ISCSI; Penggunaan iSCSI di Ubuntu sebagai Initiator dan Target
Tulisan ini akan menjelaskan bagaimana mensetup iSCSI target dan iSCSI initiator (client), yang di jalankan di Ubuntu.
iSCSI protokol adalah protokol yang digunakan di Storage Area Network (SAN) yang memungkinkan iSCSI initiator untuk menggunakan storage device di (remote) iSCSI target menggunakan kabel LAN biasa.
Bagi iSCSI inisiator, remote storage akan tampak normal seperti harddisk yang di attached ke komputer kita.
Persiapan Awal
Dalam contoh ini akan digunakan dua (2) Ubuntu 9.04 server,
- server1.example.com (Initiator): IP address 192.168.0.100
- server2.example.com (Target): IP address 192.168.0.101
Karena kita akan menjalankan semua perintah sebagai root, pilihan kita adalah menambahkan semua perintah dengan sudo atau sebelum melakukan semua pekerjakan lakukan
sudo su
Menyiapkan Target (server2)
server2:
Pertama-tama kita setup Target(server2):
aptitude install iscsitarget
Buka /etc/default/iscsitarget...
vi /etc/default/iscsitarget
... dan set ISCSITARGET_ENABLE menjadi true:
ISCSITARGET_ENABLE=true
Kita dapat menggunakan volume logical yang tidak digunakan, file image, harddisk (misalnya, /dev/sdb), partisi harddisk (misalnya, /dev/sdb1) atau RAID device (misalnya, /dev/md0) untuk storage. Dalam contoh ini, kita akan membuat sebuah volume logical 20GB dengan nama storage_lun1 di volume group vg0:
lvcreate -L20G -n storage_lun1 vg0
Kita akan menggunakan sebuah image file, kita dapat membuatnya sebagai berikut,
mkdir /storage dd if=/dev/zero of=/storage/lun1.img bs=1024k count=20000
Ini akan membuat image file /storage/lun1.img yang besarnya 20GB.
Selanjutnya edit /etc/ietd.conf...
vi /etc/ietd.conf
Remarks / comment out semua yang ada di file tersebut, di akhir kita tambahkan paragraf berikut:
[...] 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
Nama target harus unik secara global, standard iSCSI mendefinisikan standard "iSCSI Qualified Name" sebagai berikut:
iqn.yyyy-mm.<reversed domain name>[:identifier]
Dimana:
- yyyy-mm adalah tanggal dimana domain valid.
- identifier bebas untuk ditentukan.
- IncomingUser berisi username dan password jadi hanya initiator (client) yang memberikan username & password yang dapat login dan menggunakan storage device. Jika anda tidak membutuhkan authentikasi, jangan menulis username & password di IncomingUser.
- Lun berisi full path line storage device (misalnya, /dev/vg0/storage_lun1, /storage/lun1.img, /dev/sdb, etc.).
Beritahu target bahwa kita memberikan ijin sambungan ke device iqn.2001-04.com.example:storage.lun1 dari IP address 192.168.0.100 (server1.example.com), edit
vi /etc/initiators.allow
isi dengan
[...] iqn.2001-04.com.example:storage.lun1 192.168.0.100
start target
/etc/init.d/iscsitarget start
Set Initiator (server1)
server1:
Di server1, kita menginstalasi initiator:
aptitude install open-iscsi
Next we open /etc/iscsi/iscsid.conf...
vi /etc/iscsi/iscsid.conf
... and set node.startup to automatic:
[...] node.startup = automatic [...]
Then we restart the initiator:
/etc/init.d/open-iscsi restart
Now we connect to the target (server2) and check what storage devices it has to offer:
iscsiadm -m discovery -t st -p 192.168.0.101
server1:~# iscsiadm -m discovery -t st -p 192.168.0.101 192.168.0.101:3260,1 iqn.2001-04.com.example:storage.lun1 server1:~#
iscsiadm -m node
server1:~# iscsiadm -m node 192.168.0.101:3260,1 iqn.2001-04.com.example:storage.lun1 server1:~#
Setting untuk storage device iqn.2001-04.com.example:storage.lun1 di 192.168.0.101:3260,1 di simpan di /etc/iscsi/nodes/iqn.2001-04.com.example:storage.lun1/192.168.0.101,3260,1/default. Kita perlu menset username dan password untuk target di file tersebut, daripada mengedit secara manual, kita dapat menggunakan perintah iscsiadm berikut:
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
Sekarang kita dapat login bisa menggunakan perintah
iscsiadm -m node --targetname "iqn.2001-04.com.example:storage.lun1" --portal "192.168.0.101:3260" --login
server1:~# 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 server1:~#
atau dengan me-restart initiator:
/etc/init.d/open-iscsi restart
Jika kita ingin log out, kita dapat menjalankan
iscsiadm -m node --targetname "iqn.2001-04.com.example:storage.lun1" --portal "192.168.0.101:3260" --logout
Memproses Harddisk Baru hasil iSCSI
Di output dari perintah
fdisk -l
Kita harusnya akan menemukan harddisk baru (contoh /dev/sdb); ini adalah storage iSCSI:
server1:~# fdisk -l
Disk /dev/sda: 32.2 GB, 32212254720 bytes 255 heads, 63 sectors/track, 3916 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Disk identifier: 0x00031334 Device Boot Start End Blocks Id System /dev/sda1 * 1 3749 30113811 83 Linux /dev/sda2 3750 3916 1341427+ 5 Extended /dev/sda5 3750 3916 1341396 82 Linux swap / Solaris
Disk /dev/sdb: 21.4 GB, 21474836480 bytes 64 heads, 32 sectors/track, 20480 cylinders Units = cylinders of 2048 * 512 = 1048576 bytes Disk identifier: 0x00000000
Disk /dev/sdb tidak berisi tabel partisi. Untuk menggunakan harddisk baru tersebut, kita harus memformat:
fdisk /dev/sdb
server1:~# fdisk /dev/sdb Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel Building a new DOS disklabel with disk identifier 0x882944df. Changes will remain in memory only, until you decide to write them. After that, of course, the previous content won't be recoverable.
The number of cylinders for this disk is set to 20480. There is nothing wrong with that, but this is larger than 1024, and could in certain setups cause problems with: 1) software that runs at boot time (e.g., old versions of LILO) 2) booting and partitioning software from other OSs (e.g., DOS FDISK, OS/2 FDISK) Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite) 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 The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks. server1:~#
Setelah selesai, lihat fdisk -l
fdisk -l
akan tampak kira-kira
server1:~# fdisk -l
Disk /dev/sda: 32.2 GB, 32212254720 bytes 255 heads, 63 sectors/track, 3916 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Disk identifier: 0x00031334 Device Boot Start End Blocks Id System /dev/sda1 * 1 3749 30113811 83 Linux /dev/sda2 3750 3916 1341427+ 5 Extended /dev/sda5 3750 3916 1341396 82 Linux swap / Solaris Disk /dev/sdb: 21.4 GB, 21474836480 bytes 64 heads, 32 sectors/track, 20480 cylinders Units = cylinders of 2048 * 512 = 1048576 bytes Disk identifier: 0x882944df Device Boot Start End Blocks Id System /dev/sdb1 1 20480 20971504 83 Linux server1:~#
Selanjutnya kita dapat membuat filesystem di /dev/sdb1...
mkfs.ext3 /dev/sdb1
dan mount untuk keperluan testing misalnya ke
mount /dev/sdb1 /mnt
Kita dapat melihat device baru dari output
mount
server1:~# 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 ext3 (rw) server1:~#
... dan
df -h
server1:~# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda1 29G 685M 27G 3% / tmpfs 253M 0 253M 0% /lib/init/rw udev 10M 88K 10M 1% /dev tmpfs 253M 0 253M 0% /dev/shm /dev/sdb1 20G 173M 19G 1% /mnt server1:~#
Kita dapat unmount menggunakan perintah
umount /mnt
Agar device mount secara automatis saat boot, misalnya ke directory /storage, pertama-tama buat directory tersebut
mkdir /storage
tambahkan pada fstab
vi /etc/fstab
[...] /dev/sdb1 /storage ext3 defaults,auto,_netdev 0 0
Untuk mencoba-nya, silahkan di reboot
reboot
Setelah reboot, devica harusnya termount secara automatis
mount
server1:~# 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 /storage type ext3 (rw,_netdev) server1:~#
df -h
server1:~# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda1 29G 685M 27G 3% / tmpfs 253M 0 253M 0% /lib/init/rw udev 10M 88K 10M 1% /dev tmpfs 253M 0 253M 0% /dev/shm /dev/sdb1 20G 173M 19G 1% /storage server1:~#