ISCSI; Penggunaan iSCSI di Ubuntu sebagai Initiator dan Target

From OnnoWiki
Jump to navigation Jump to search

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:~#

Pranala Menarik