Questa guida spiega come installare un’iSCSI target e un’iSCSI initiator (client), entrambi in esecuzione su Debian Squeeze.
Il protocollo iSCSI è uno storage area network (SAN) protocol che permette agli  iSCSI initiator di utilizzare dispositivi di archiviazione remoti iSCSI target attraverso il normale cablaggio ethernet. Per l’iSCSI initiator, lo storage remoto si presenta come un normale disco rigido collegato localmente.

1- Nota preliminare

Sto utilizzando due server Debian Squeeze:

    • server1.example.com (Iniziatore): Indirizzo IP 192.168.0.10
    • server2.example.com (Destinazione): Indirizzo IP 192.168.0.101

2- Setting Up The Target (server2)

Prima di tutto dobbiamo installare e configurare il taget (server2):

apt-get install iscsitarget iscsitarget-dkms

Aprire /etc/default/iscsitarget

vi /etc/default/iscsitarget

… e settare ISCSITARGET_ENABLE a true:

ISCSITARGET_ENABLE=true


Possiamo usare logical volumes liberi, image files, hard drives (e.g. /dev/sdb), hard drive partitions (e.g. /dev/sdb1) o RAID devices (e.g. /dev/md0) per lo storage. In questo esempio creerò un logical volume di 20GB chiamato storage_lun1 nel volume group vg0:

lvcreate -L20G -n storage_lun1 vg0

(Se vuoi usare un image file, crealo nel seguente modo:

mkdir /storage
dd if=/dev/zero of=/storage/lun1.img bs=1024k count=20000

l’image file /storage/lun1.img con un size of 20GB è stato creato.)

Ora, editiamo /etc/iet/ietd.conf…

vi /etc/iet/ietd.conf

… e commentiamo ogni campo. Alla fine aggiungiamo le seguenti voci:

[...]
Target iqn.2001-04.com.example:storage.lun1
        IncomingUser someuser secret
        OutgoingUser
        Lun 0 Path=/dev/vg0/storage_lun1,Type=fileio
        Alias LUN1
        #MaxConnections  6


Il target name dovrebbe essere un globally unique name, lo standard iSCSI definisce il “iSCSI Qualified Name” nel metodo seguente: iqn.yyyy-mm.<reversed domain name>[:identifier];
yyyy-mm è la data per la quale il dominio è valido;
l’identifier è di libera scelta.
L’IncomingUser line contiene un’username e una password, in questo modo solo l’initiators (clients) che fornirà questa username e password potrà eseguire la log in e usare lo storage device; se non si vuole un’autenticazione, non specificare la username e la password nell’IncomingUser line.
Alla linea Lun, specifichiamo il full path allo storage device (e.g. /dev/vg0/storage_lun1, /storage/lun1.img, /dev/sdb, etc.).

Ora abilitiamo il target al quale vogliamo permettere la connessione al device iqn.2001-04.com.example:storage.lun1 dall’IP address 192.168.0.100 (server1.example.com)…

vi /etc/iet/initiators.allow
[...]
iqn.2001-04.com.example:storage.lun1 192.168.0.100


… e avviamo il servizio:

/etc/init.d/iscsitarget start

3- Setting Up The Initiator (server1)

server1:
On server1, we install the initiator:

apt-get install open-iscsi

Editiamo /etc/iscsi/iscsid.conf…

vi /etc/iscsi/iscsid.conf

… e modifichiamo node.startup ad automatic:

[...]
node.startup = automatic
[...]


Riavviamo il servizio initiator:

/etc/init.d/open-iscsi restart

Ora colleghiamoci al target server (server2) e verifichiamo:

iscsiadm -m discovery -t st -p 192.168.0.101

[email protected]:~# iscsiadm -m discovery -t st -p 192.168.0.101
 192.168.0.101:3260,1 iqn.2001-04.com.example:storage.lun1
 [email protected]:~#

iscsiadm -m node

[email protected]:~# iscsiadm -m node
 192.168.0.101:3260,1 iqn.2001-04.com.example:storage.lun1
 [email protected]:~#

Le configurazioni per lo storage device iqn.2001-04.com.example:storage.lun1 su 192.168.0.101:3260,1 sono inclusi nel file /etc/iscsi/nodes/iqn.2001-04.com.example:storage.lun1/192.168.0.101,3260,1/default.
Ora inseriamo username e password per il target nel file; al posto di editare il file manualmente, possiamo usare il comando iscsiadm:

iscsiadm -m node --targetname "iqn.2001-04.com.example:storage.lun1" --portal "192.168.0.101:3260" --op=update --name node.session.auth.authmethod --value=CHAP
 iscsiadm -m node --targetname "iqn.2001-04.com.example:storage.lun1" --portal "192.168.0.101:3260" --op=update --name node.session.auth.username --value=someuser
 iscsiadm -m node --targetname "iqn.2001-04.com.example:storage.lun1" --portal "192.168.0.101:3260" --op=update --name node.session.auth.password --value=secret

Eseguiamo il login…

iscsiadm -m node –targetname “iqn.2001-04.com.example:storage.lun1” –portal “192.168.0.101:3260” –login

[email protected]:~# iscsiadm -m node --targetname "iqn.2001-04.com.example:storage.lun1" --portal "192.168.0.101:3260" --login Logging in to [iface: default, target: iqn.2001-04.com.example:storage.lun1, portal: 192.168.0.101,3260] Login to [iface: default, target: iqn.2001-04.com.example:storage.lun1, portal: 192.168.0.101,3260]: successful 
[email protected]:~#

… o riavviamo il servizio dell’initiator:

/etc/init.d/open-iscsi restart

(Se vuoi eseguire un log out, usate il seguente comando

iscsiadm -m node --targetname "iqn.2001-04.com.example:storage.lun1" --portal "192.168.0.101:3260" --logout

Nell’output del comando…

fdisk -l

…sarà possibile vedere il nuovo hard drive (/dev/sdb in questo esempio); Questo è il nostro iSCSI storage device:

[email protected]:~# fdisk -l
Disk /dev/sda: 32.2 GB, 32212254720 bytes
255 heads, 63 sectors/track, 3916 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00029d5c
Device Boot      Start         End      Blocks   Id  System
 /dev/sda1   *           1        3793    30461952   83  Linux
 /dev/sda2            3793        3917      992257    5  Extended
 /dev/sda5            3793        3917      992256   82  Linux swap / Solaris
Disk /dev/sdb: 21.5 GB, 21474836480 bytes
 64 heads, 32 sectors/track, 20480 cylinders
 Units = cylinders of 2048 * 512 = 1048576 bytes
 Sector size (logical/physical): 512 bytes / 512 bytes
 I/O size (minimum/optimal): 512 bytes / 512 bytes
 Disk identifier: 0x00000000
Disk /dev/sdb doesn't contain a valid partition table
[email protected]:~#

To use that device, we must format it:

fdisk /dev/sdb

[email protected]:~# fdisk /dev/sdb
Command (m for help): #<-- m
 Command action
 a   toggle a bootable flag
 b   edit bsd disklabel
 c   toggle the dos compatibility flag
 d   delete a partition
 l   list known partition types
 m   print this menu
 n   add a new partition
 o   create a new empty DOS partition table
 p   print the partition table
 q   quit without saving changes
 s   create a new empty Sun disklabel
 t   change a partition's system id
 u   change display/entry units
 v   verify the partition table
 w   write table to disk and exit
 x   extra functionality (experts only)
Command (m for help): #<-- n
 Command action
 e   extended
 p   primary partition (1-4)
 <-- p
 Partition number (1-4): <-- 1
 First cylinder (1-20480, default 1): #<-- ENTER
 Using default value 1
 Last cylinder or +size or +sizeM or +sizeK (1-20480, default 20480): #<-- ENTER
 Using default value 20480
Command (m for help): #<-- t
 Selected partition 1
 Hex code (type L to list codes): #<-- L
0  Empty           1e  Hidden W95 FAT1 80  Old Minix       be  Solaris boot
 1  FAT12           24  NEC DOS         81  Minix / old Lin bf  Solaris
 2  XENIX root      39  Plan 9          82  Linux swap / So c1  DRDOS/sec (FAT-
 3  XENIX usr       3c  PartitionMagic  83  Linux           c4  DRDOS/sec (FAT-
 4  FAT16 <32M      40  Venix 80286     84  OS/2 hidden C:  c6  DRDOS/sec (FAT-
 5  Extended        41  PPC PReP Boot   85  Linux extended  c7  Syrinx
 6  FAT16           42  SFS             86  NTFS volume set da  Non-FS data
 7  HPFS/NTFS       4d  QNX4.x          87  NTFS volume set db  CP/M / CTOS / .
 8  AIX             4e  QNX4.x 2nd part 88  Linux plaintext de  Dell Utility
 9  AIX bootable    4f  QNX4.x 3rd part 8e  Linux LVM       df  BootIt
 a  OS/2 Boot Manag 50  OnTrack DM      93  Amoeba          e1  DOS access
 b  W95 FAT32       51  OnTrack DM6 Aux 94  Amoeba BBT      e3  DOS R/O
 c  W95 FAT32 (LBA) 52  CP/M            9f  BSD/OS          e4  SpeedStor
 e  W95 FAT16 (LBA) 53  OnTrack DM6 Aux a0  IBM Thinkpad hi eb  BeOS fs
 f  W95 Ext'd (LBA) 54  OnTrackDM6      a5  FreeBSD         ee  EFI GPT
 10  OPUS            55  EZ-Drive        a6  OpenBSD         ef  EFI (FAT-12/16/
 11  Hidden FAT12    56  Golden Bow      a7  NeXTSTEP        f0  Linux/PA-RISC b
 12  Compaq diagnost 5c  Priam Edisk     a8  Darwin UFS      f1  SpeedStor
 14  Hidden FAT16 <3 61  SpeedStor       a9  NetBSD          f4  SpeedStor
 16  Hidden FAT16    63  GNU HURD or Sys ab  Darwin boot     f2  DOS secondary
 17  Hidden HPFS/NTF 64  Novell Netware  b7  BSDI fs         fd  Linux raid auto
 18  AST SmartSleep  65  Novell Netware  b8  BSDI swap       fe  LANstep
 1b  Hidden W95 FAT3 70  DiskSecure Mult bb  Boot Wizard hid ff  BBT
 1c  Hidden W95 FAT3 75  PC/IX
 Hex code (type L to list codes): #<-- 83
Command (m for help): #<-- w

Dopo questa procedura, il risultato del comando:

fdisk -l

dovrebbe assomigliare a questo:

[email protected]:~# fdisk -l
Disk /dev/sda: 32.2 GB, 32212254720 bytes
255 heads, 63 sectors/track, 3916 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00029d5c
Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1        3793    30461952   83  Linux
/dev/sda2            3793        3917      992257    5  Extended
/dev/sda5            3793        3917      992256   82  Linux swap / Solaris
Disk /dev/sdb: 21.5 GB, 21474836480 bytes
64 heads, 32 sectors/track, 20480 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x45bc2c81
Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1       20480    20971504   83  Linux
roo[email protected]:~#

Creiamo il filesystem in /dev/sdb1…

mkfs.ext4 /dev/sdb1

… e eseguiamo il mount in /mnt:

mount /dev/sdb1 /mnt

Tramite il comando mount verifichiamo l’esito…

mount

[email protected]:~# 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)
 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)
 /dev/sdb1 on /mnt type ext4 (rw)
 [email protected]:~#

… e

df -h

[email protected]:~# df -h
 Filesystem            Size  Used Avail Use% Mounted on
 /dev/sda1              29G  807M   27G   3% /
 tmpfs                 249M     0  249M   0% /lib/init/rw
 udev                  244M  108K  244M   1% /dev
 tmpfs                 249M     0  249M   0% /dev/shm
 /dev/sdb1              20G  172M   19G   1% /mnt
 [email protected]:~#

Se vogliamo che ad ogni riavvio la partizione venga montata in modo automatico, creiamo la dir ufficiale…

mkdir /storage

… e inseriamo la seguente riga in /etc/fstab:

vi /etc/fstab

[...]
/dev/sdb1       /storage        ext4    defaults,auto,_netdev 0 0