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 [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 |