On fait les presentations : les 3 machines sont des vmware (version vmware 1.0.5 host => kernel-2.6.25.2 SMP)
Je pars du principe que sur toutes les machines les headers du kernel en cours d'utilisation ainsi que les outils de dev sont installes. 

root@hardy:/etc/ocfs2# cat /proc/version
Linux version 2.6.24-16-generic (buildd@yellow) (gcc version 4.2.3 (Ubuntu 4.2.3-2ubuntu7)) #1 SMP Thu Apr 10 12:47:45 UTC 2008
Adresse IP : 192.168.0.10

dbip63:/# cat /proc/version
Linux version 2.6.24-1-amd64 (Debian 2.6.24-6) (waldi@debian.org) (gcc version 4.1.3 20080308 (prerelease) (Debian 4.1.2-21)) #1 SMP Fri Apr 18 23:08:22 UTC 2008
Adresse IP: 192.168.0.63

dbip64:/# cat /proc/version
Linux version 2.6.24-1-amd64 (Debian 2.6.24-6) (waldi@debian.org) (gcc version 4.1.3 20080308 (prerelease) (Debian 4.1.2-21)) #1 SMP Fri Apr 18 23:08:22 UTC 2008
Adresse IP: 192.168.0.64

La machine hardy sera le target iscsi. Mais comme lors de ma derniere tentative, apres install via apt, le demarrage de iscsitarget se solde par une erreur bien que cette machine soit en version ubuntu-hardy (la plus recente donc). Je vais donc recuperer les sources, compiler et installer iscsitarget.


root@hardy:/usr/local# wget http://dfn.dl.sourceforge.net/sourceforge/iscsitarget/iscsitarget-0.4.16.tar.gz

root@hardy:/usr/local# tar zxvf iscsitarget-0.4.16.tar.gz && mv iscsitarget-0.4.16.tar.gz src

Ne pas oublier le paquet libssl-dev sinon ca plante a la compil:

root@hardy:/usr/local/iscsitarget-0.4.16# apt-get install libssl-dev

root@hardy:/usr/local/iscsitarget-0.4.16# make && make install
détruit `/usr/sbin/ietd'
`usr/ietd' -> `/usr/sbin/ietd'
détruit `/usr/sbin/ietadm'
`usr/ietadm' -> `/usr/sbin/ietadm'
`etc/initd/initd.debian' -> `/etc/init.d/iscsi-target'
`doc/manpages/ietadm.8' -> `/usr/share/man/man8/ietadm.8'
`doc/manpages/ietd.8' -> `/usr/share/man/man8/ietd.8'
`doc/manpages/ietd.conf.5' -> `/usr/share/man/man5/ietd.conf.5'
`ChangeLog' -> `/usr/share/doc/iscsitarget/ChangeLog'
`COPYING' -> `/usr/share/doc/iscsitarget/COPYING'
`README' -> `/usr/share/doc/iscsitarget/README'
détruit `/usr/share/doc/iscsitarget/README.vmware'
`README.vmware' -> `/usr/share/doc/iscsitarget/README.vmware'
install: création du répertoire `/lib/modules/2.6.24-16-generic/kernel/iscsi'
`kernel/iscsi_trgt.ko' -> `/lib/modules/2.6.24-16-generic/kernel/iscsi/iscsi_trgt.ko'
Running depmod


Il faut ensuite indiquer dans le fichier /etc/ietd.conf les periphs accessibles via iscsi. Dans mon cas (c'est là tout l'avantage des vm, c'est un disque ajoute en 2 clicks. Apres demarrage de la machine, un petit coup de fdisk pour creer 2 partitions et  je lance partprobe /dev/sdb du paquet gparted pour ne pas avoir a rebooter).

root@hardy:/usr/local/iscsitarget-0.4.16# cat /etc/ietd.conf | grep -v '#'
Target iqn.2001-04.com.example:storage.disk2.sys1.xyz
        Lun 0 Path=/dev/sdb,Type=fileio


Le demarrage se passe nettement mieux.

root@hardy:/usr/local/iscsitarget-0.4.16# /etc/init.d/iscsi-target start
Starting iSCSI enterprise target service: succeeded.

root@hardy:/usr/local/iscsitarget-0.4.16# lsmod|grep iscsi
iscsi_trgt             83180  4


Cote initiateur (version debian lenny) c'est pas non plus du sans-faute...

dbip63:~# apt-get install open-iscsi
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances      
Lecture des informations d'état... Fait
Les NOUVEAUX paquets suivants seront installés :
  open-iscsi
0 mis à jour, 1 nouvellement installés, 0 à enlever et 0 non mis à jour.
Il est nécessaire de prendre 0o/168ko dans les archives.
Après cette opération, 582ko d'espace disque supplémentaires seront utilisés.
Sélection du paquet open-iscsi précédemment désélectionné.
(Lecture de la base de données... 27417 fichiers et répertoires déjà installés.)
Dépaquetage de open-iscsi (à partir de .../open-iscsi_2.0.865-1_amd64.deb) ...
Paramétrage de open-iscsi (2.0.865-1) ...
Starting iSCSI initiator service: iscsid.
Setting up iSCSI targets:
iscsiadm: No records found!

dbip63:~# iscsiadm -m discovery -t st -p 192.168.0.10 -l
192.168.0.10:3260,1 iqn.2001-04.com.example:storage.disk2.sys1.xyz
dbip63:~# /etc/init.d/open-iscsi restart
Disconnecting iSCSI targets:.
Stopping iSCSI initiator service:.
Starting iSCSI initiator service: iscsid.
Setting up iSCSI targets:
iscsiadm: No records found!

Aucune target iscsi decouverte: la routine donc !!!  J'adopte donc la meme methode que precedemment:  desinstall de open-iscsi, recup des sources, compil, install.

dbip63:/usr/local# apt-get remove --purge open-iscsi
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances      
Lecture des informations d'état... Fait
Les paquets suivants seront ENLEVÉS :
  open-iscsi*
0 mis à jour, 0 nouvellement installés, 1 à enlever et 0 non mis à jour.

dbip63:/usr/local# wget http://www.open-iscsi.org/bits/open-iscsi-2.0-869.1.tar.gz
dbip63:/usr/local# tar zxvf open-iscsi-2.0-869.1.tar.gz && mv open-iscsi-2.0-869.1.tar.gz src

Comme indique plus haut il est necessaire d'avoir installe les headers:

dbip63:/usr/local/open-iscsi-2.0-869.1# dpkg -l linux-header*
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Cfg-files/Unpacked/Failed-cfg/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err: uppercase=bad)
||/ Nom                        Version                    Description
+++-==========================-==============================================================
un  linux-headers              <néant>                   (aucune description n'est disponible)
un  linux-headers-2.6          <néant>                   (aucune description n'est disponible)
ii  linux-headers-2.6.24-1-amd 2.6.24-6                   Header files for Linux 2.6.24 on AMD64
ii  linux-headers-2.6.24-1-com 2.6.24-6                   Common header files for Linux 2.6.24


dbip63:/usr/local/open-iscsi-2.0-869.1# make && make install
...
make[1]: quittant le répertoire « /usr/local/open-iscsi-2.0-869.1/utils »

Compilation complete                Output file
----------------------------------- ----------------
Built iSCSI Open Interface module:  kernel/scsi_transport_iscsi.ko
Built iSCSI library module:         kernel/libiscsi.ko
Built iSCSI over TCP kernel module: kernel/iscsi_tcp.ko
Built iSCSI daemon:                 usr/iscsid
Built management application:       usr/iscsiadm

Read README file for detailed information.

Reboot de la machine par precaution. Autant partir sur des bases propres.

dbip63:~# /etc/init.d/open-iscsi start
Starting iSCSI initiator service: iscsid.
Setting up iSCSI targets:iscsiadm: No records found!

Jusque-là c'est normal, on pousse un peu :

dbip63:~# iscsi_discovery 192.168.0.10
iscsiadm: No active sessions.
Set target iqn.2001-04.com.example:storage.disk2.sys1.xyz to automatic login over tcp to portal 192.168.0.10:3260
Logging out of session [sid: 1, target: iqn.2001-04.com.example:storage.disk2.sys1.xyz, portal: 192.168.0.10,3260]
Logout of [sid: 1, target: iqn.2001-04.com.example:storage.disk2.sys1.xyz, portal: 192.168.0.10,3260]: successful
discovered 1 targets at 192.168.0.10

dbip63:~# tail /var/log/messages
May  8 12:48:35 dbip63 kernel: scsi1 : iSCSI Initiator over TCP/IP
May  8 12:48:35 dbip63 kernel: scsi 1:0:0:0: Direct-Access     IET      VIRTUAL-DISK     0    PQ: 0 ANSI: 4
May  8 12:48:35 dbip63 kernel: sd 1:0:0:0: [sdb] 2097152 512-byte hardware sectors (1074 MB)
May  8 12:48:35 dbip63 kernel: sd 1:0:0:0: [sdb] Write Protect is off
May  8 12:48:35 dbip63 kernel: sd 1:0:0:0: [sdb] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
May  8 12:48:35 dbip63 kernel: sd 1:0:0:0: [sdb] 2097152 512-byte hardware sectors (1074 MB)
May  8 12:48:36 dbip63 kernel: sd 1:0:0:0: [sdb] Write Protect is off
May  8 12:48:36 dbip63 kernel: sd 1:0:0:0: [sdb] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
May  8 12:48:36 dbip63 kernel:  sdb: sdb1 sdb2
May  8 12:48:36 dbip63 kernel: sd 1:0:0:0: [sdb] Attached SCSI disk


dbip63:/etc/ocfs2# /etc/init.d/open-iscsi restart
Disconnecting iSCSI targets:.
Stopping iSCSI initiator service:.
Starting iSCSI initiator service: iscsid.
Setting up iSCSI targets:Logging in to [iface: default, target: iqn.2001-04.com.example:storage.disk2.sys1.xyz, portal: 192.168.0.10,3260]
Login to [iface: default, target: iqn.2001-04.com.example:storage.disk2.sys1.xyz, portal: 192.168.0.10,3260]: successful

dbip63:/etc/ocfs2# cat /proc/partitions
major minor  #blocks  name

   8     0    2097152 sda
   8     1    1943833 sda1
   8     2          1 sda2
   8     5     152586 sda5
   8    16    1048576 sdb
   8    17     730926 sdb1
   8    18     313267 sdb2

Ok c'est tout bon. Je refais pile poil les memes operations sur la deuxieme vm et j'ai bien la meme target: initiée

dbip64:~# cat /proc/partitions
major minor  #blocks  name

   8     0    2097152 sda
   8     1    1943833 sda1
   8     2          1 sda2
   8     5     152586 sda5
   8    16    1048576 sdb
   8    17     730926 sdb1
   8    18     313267 sdb2



dbip64:~# /etc/init.d/open-iscsi restart
Disconnecting iSCSI targets:.
Stopping iSCSI initiator service:.
Starting iSCSI initiator service: iscsid.
Setting up iSCSI targets:Logging in to [iface: default, target: iqn.2001-04.com.example:storage.disk2.sys1.xyz, portal: 192.168.0.10,3260]
Login to [iface: default, target: iqn.2001-04.com.example:storage.disk2.sys1.xyz, portal: 192.168.0.10,3260]: successful


Donc le probleme avec iscsi est que si dbip63 et dbip64 montent /dev/sdb1 et qu'il ecrivent dessus, ils ne verront que leurs fichiers et pas ceux ecrits depuis l'autre machine.
La soluce consiste donc a utliser, par exemple, ocfs2.
Ne m'en demandez pas trop la-dessus, c'est un peu chaud a expliquer et je vous invite plutot a consulter les docs officielles.

http://oss.oracle.com/projects/ocfs2/documentation/


dbip63:~# apt-get install ocfs2-tools
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances      
Lecture des informations d'état... Fait
Les paquets supplémentaires suivants seront installés :
  libglib2.0-0 libglib2.0-data libpcre3
Paquets suggérés :
  ocfs2console
Les NOUVEAUX paquets suivants seront installés :
  libglib2.0-0 libglib2.0-data libpcre3 ocfs2-tools
0 mis à jour, 4 nouvellement installés, 0 à enlever et 0 non mis à jour.
Il est nécessaire de prendre 0o/2035ko dans les archives.
Après cette opération, 6533ko d'espace disque supplémentaires seront utilisés.
Souhaitez-vous continuer [O/n] ?
Préconfiguration des paquets...
Sélection du paquet libpcre3 précédemment désélectionné.
(Lecture de la base de données... 27417 fichiers et répertoires déjà installés.)
Dépaquetage de libpcre3 (à partir de .../libpcre3_7.4-1+lenny1_amd64.deb) ...
Sélection du paquet libglib2.0-0 précédemment désélectionné.
Dépaquetage de libglib2.0-0 (à partir de .../libglib2.0-0_2.16.1-2_amd64.deb) ...
Sélection du paquet libglib2.0-data précédemment désélectionné.
Dépaquetage de libglib2.0-data (à partir de .../libglib2.0-data_2.16.1-2_all.deb) ...
Sélection du paquet ocfs2-tools précédemment désélectionné.
Dépaquetage de ocfs2-tools (à partir de .../ocfs2-tools_1.2.4-1+b1_amd64.deb) ...
Paramétrage de libpcre3 (7.4-1+lenny1) ...
Paramétrage de libglib2.0-0 (2.16.1-2) ...
Paramétrage de libglib2.0-data (2.16.1-2) ...
Paramétrage de ocfs2-tools (1.2.4-1+b1) ...


Le fichier de config d'ocfs2 ainsi que son repertoire d'utilisation doivent etre crees a la mano et doivent etre absolument identiques sur tous les noeuds du cluster.

root@hardy:/usr/local/iscsitarget-0.4.16# /etc/init.d/o2cb start
Loading module "configfs": OK
Mounting configfs filesystem at /sys/kernel/config: OK
Loading module "ocfs2_nodemanager": OK
Loading module "ocfs2_dlm": OK
Loading module "ocfs2_dlmfs": OK
Mounting ocfs2_dlmfs filesystem at /dlm: OK
Starting O2CB cluster ocfs2: OK



root@hardy:/etc/ocfs2# ll
total 20
drwxr-xr-x   2 root root  4096 2008-05-04 21:08 .
drwxr-xr-x 136 root root 12288 2008-05-04 23:44 ..
-rw-r--r--   1 root root   391 2008-05-04 21:08 cluster.conf

root@hardy:/etc/ocfs2# cat cluster.conf
node:
        ip_port = 7777
        ip_address = 192.168.0.10
        number = 0
        name = hardy
        cluster = ocfs2

node:
        ip_port = 7777
        ip_address = 192.168.0.63
        number = 1
        name = dbip63
        cluster = ocfs2

node:
        ip_port = 7777
        ip_address = 192.168.0.64
        number = 2
        name = dbip64
        cluster = ocfs2

cluster:
        node_count = 3
        name = ocfs2


Recopie de /etc/ocfs2/cluster.conf vers les 2 autres noeuds.

root@hardy:/etc/ocfs2# scp cluster.conf 192.168.0.63:/etc/ocfs2
The authenticity of host '192.168.0.63 (192.168.0.63)' can't be established.
RSA key fingerprint is 4f:34:62:f1:66:ed:c6:45:7d:6f:9f:8e:7f:2a:c1:76.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.0.63' (RSA) to the list of known hosts.
root@192.168.0.63's password:
cluster.conf                                                                                     100%  391     0.4KB/s   00:00   
root@hardy:/etc/ocfs2# scp cluster.conf 192.168.0.64:/etc/ocfs2
The authenticity of host '192.168.0.64 (192.168.0.64)' can't be established.
RSA key fingerprint is 4f:34:62:f1:66:ed:c6:45:7d:6f:9f:8e:7f:2a:c1:76.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.0.64' (RSA) to the list of known hosts.
root@192.168.0.64's password:
cluster.conf                                                                                     100%  391     0.4KB/s   00:00  

Remarque: il faudra activer le demarrage de o2cb via /etc/default/o2cb

dbip63:/etc/ocfs2# vi /etc/default/o2cb

# O2CB_ENABLED: 'true' means to load the driver on boot.
O2CB_ENABLED=true

dbip64:/etc/ocfs2# vi /etc/default/o2cb

# O2CB_ENABLED: 'true' means to load the driver on boot.
O2CB_ENABLED=true

dbip63:/etc/ocfs2# /etc/init.d/o2cb start

Loading module "configfs": OK
Mounting configfs filesystem at /sys/kernel/config: OK
Loading module "ocfs2_nodemanager": OK
Loading module "ocfs2_dlm": OK
Loading module "ocfs2_dlmfs": OK
Creating directory '/dlm': OK
Mounting ocfs2_dlmfs filesystem at /dlm: OK
Starting O2CB cluster ocfs2: OK

dbip64:~# /etc/init.d/o2cb start
Loading module "configfs": OK
Mounting configfs filesystem at /sys/kernel/config: OK
Loading module "ocfs2_nodemanager": OK
Loading module "ocfs2_dlm": OK
Loading module "ocfs2_dlmfs": OK
Creating directory '/dlm': OK
Mounting ocfs2_dlmfs filesystem at /dlm: OK
Starting O2CB cluster ocfs2: OK

Maintenant je tente de monter le periph /dev/sdb1 que j'avais formatte au prealable sur la machine hardy par mkfs.ocfs2 -L DATA /dev/sdb1 mais ca passe pas, sans doute a cause d'une histoire de version.

dbip63:/etc/ocfs2# mount -t ocfs2 /dev/sdb1 /mnt
mount.ocfs2: Filesystem has unsupported feature(s) while opening device /dev/sdb1

Qu'a cela ne tienne, puisque le but du jeu etant que dbip63 et dbip64 puissent ecrire sur la meme partition je vais la formatter a partir de l'une de ces 2 machines, sachant qu'elles sont
issues de la meme distrib/version.

dbip63:/etc/ocfs2# mkfs -t  ocfs2 -L DATA /dev/sdb1
mkfs.ocfs2 1.2.4
Filesystem label=DATA
Block size=2048 (bits=11)
Cluster size=4096 (bits=12)
Volume size=748466176 (182731 clusters) (365462 blocks)
12 cluster groups (tail covers 8139 clusters, rest cover 15872 clusters)
Journal size=33554432
Initial number of node slots: 2
Creating bitmaps: done
Initializing superblock: done
Writing system files: done
Writing superblock: done
Writing backup superblock: 0 block(s)
Formatting Journals: done
Writing lost+found: done
mkfs.ocfs2 successful

Et ca passe tout seul :)

dbip63:/etc/ocfs2# mount -t ocfs2 /dev/sdb1 /mnt
dbip63:/etc/ocfs2# mount
/dev/sda1 on / type ext3 (rw,errors=remount-ro)
tmpfs on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
procbususb on /proc/bus/usb type usbfs (rw)
udev on /dev type tmpfs (rw,mode=0755)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620)
configfs on /sys/kernel/config type configfs (rw)
ocfs2_dlmfs on /dlm type ocfs2_dlmfs (rw)
/dev/sdb1 on /mnt type ocfs2 (rw,_netdev,heartbeat=local)

Meme manip sur l'autre noeud:

dbip64:~# mount -t ocfs2 /dev/sdb1 /mnt
dbip64:~# mount
/dev/sda1 on / type ext3 (rw,errors=remount-ro)
tmpfs on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
procbususb on /proc/bus/usb type usbfs (rw)
udev on /dev type tmpfs (rw,mode=0755)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620)
configfs on /sys/kernel/config type configfs (rw)
ocfs2_dlmfs on /dlm type ocfs2_dlmfs (rw)
/dev/sdb1 on /mnt type ocfs2 (rw,_netdev,heartbeat=local)

Maintenant je teste :

dbip63:/mnt# touch essaidbip63
dbip63:/mnt# ls -la
total 12
drwxr-xr-x  3 root root 2048 mai  8 13:07 .
drwxr-xr-x 22 root root 4096 mai  8 12:57 ..
-rw-r--r--  1 root root    0 mai  8 13:07 essaidbip63
drwxr-xr-x  2 root root 2048 mai  8 13:05 lost+found

Je retrouve bien le fichier sur la partition.

dbip64:~# cd /mnt
dbip64:/mnt# ll
total 12
drwxr-xr-x  3 root root 2048 mai  8 13:07 .
drwxr-xr-x 22 root root 4096 mai  8 15:12 ..
-rw-r--r--  1 root root    0 mai  8 13:07 essaidbip63
drwxr-xr-x  2 root root 2048 mai  8 13:05 lost+found

Je fais la manip "dans l'autre sens":

dbip64:/mnt# touch dbip64
dbip64:/mnt# ls -la
total 12
drwxr-xr-x  3 root root 2048 mai  8 15:22 .
drwxr-xr-x 22 root root 4096 mai  8 15:12 ..
-rw-r--r--  1 root root    0 mai  8 15:22 dbip64
-rw-r--r--  1 root root    0 mai  8 13:07 essaidbip63
drwxr-xr-x  2 root root 2048 mai  8 13:05 lost+found

C'est tout bon.

dbip63:/mnt# ll
total 12
drwxr-xr-x  3 root root 2048 mai  8  2008 .
drwxr-xr-x 22 root root 4096 mai  8 12:57 ..
-rw-r--r--  1 root root    0 mai  8  2008 dbip64
-rw-r--r--  1 root root    0 mai  8 13:07 essaidbip63
drwxr-xr-x  2 root root 2048 mai  8 13:05 lost+found

Temps d'install: 1 heure. Desole de ne pas entrer davantage dans les details techniques mais personellement j'ai deja un peu de mal a suivre :), je ne souhaite donc pas vous embrouiller.
Si vous avez besoin d'infos supplementaires concernant cette install : http://www.pmenier.net/contact.php