iSCSI Server Dengan CentOS 6.5

iSCSI adalah teknologi yang biasa digunakan untuk menghubungkan server dengan SAN (storage area network). Biasanya harddisk terhubung langsung dengan server melalui konektor seperti SATA, SCSI, atau SAS. Protokol iSCSI mengemulasikan koneksi SCSI melalui jaringan TCP/IP. Keuntungan utamanya adalah fleksibilitas dalam menyambungkan server dengan storage (atau disk array). Jauh lebih flexible karena koneksinya melalui jaringan TCP/IP. Untuk mendapat throughput yang cukup untuk keperluan transfer data, tentu perlu koneksi yang cukup stabil & setidaknya memiliki bandwidth 1 Gbps melalui Gigabit Ethernet.

Dalam terminologi iSCSI setidaknya ada 2 istilah penting yang perlu kita kenal :

  1. iSCSI Target : ini adalah server yang memiliki storage & membagi-bagikannya kepada server lain yang membutuhkan.
  2. iSCSI Initiator : ini adalah client yang akan butuh storage dengan mengakses iSCSI Target.

Simple Shared Disk Via iSCSI

Dalam tulisan ini saya akan menulis langkah-langkah sederhana untuk membuat CentOS Linux sebagai iSCSI Target & juga sebagai iSCSI Initiator seperti pada gambar di atas. Server yang akan menjadi iSCSI Target adalah sansvr01, sementara server yang menjadi iSCSI Initiator adalah dev01. Idenya adalah server dev01 membutuhkan tambahan storage, server ini akan menggunakan storage yang di-share oleh sansvr01.

Untuk komunikasi iSCSI, kedua server akan menggunakan network 172.16.10.0/24. Network ini terpisah dari public network 192.168.10.0/24.

Menyiapkan iSCSI Target

Mesin sansvr01 menggunakan CentOS 6.5 & mempunyai konfigurasi IP seperti berikut ini :

root@sansvr01:~# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:8b:ec:a5 brd ff:ff:ff:ff:ff:ff
    inet 172.16.10.5/24 brd 172.16.10.255 scope global eth1
    inet6 fe80::5054:ff:fe8b:eca5/64 scope link 
       valid_lft forever preferred_lft forever
3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:66:ec:19 brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.111/24 brd 192.168.10.255 scope global eth0
    inet6 fe80::5054:ff:fe66:ec19/64 scope link 
       valid_lft forever preferred_lft forever
root@sansvr01:~#

Mesin sansvr01 memiliki 2 buah harddisk yaitu sda (boot disk-nya) & sdb (harddisk yang akan dijadikan shared storage). :

root@sansvr01:~# fdisk -l

Disk /dev/sda: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 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: 0x0002d485

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          64      512000   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              64        1045     7875584   8e  Linux LVM

Disk /dev/sdb: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 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: 0x00000000

Disk /dev/mapper/vg_sansvr01-lv_root: 7205 MB, 7205814272 bytes
255 heads, 63 sectors/track, 876 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: 0x00000000

Disk /dev/mapper/vg_sansvr01-lv_swap: 855 MB, 855638016 bytes
255 heads, 63 sectors/track, 104 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: 0x00000000

root@sansvr01:~#

Pertama saya perlu menyiapkan /dev/sdb terlebih dulu. Dengan menggunakan perintah fdisk saya membuat 1 partisi /dev/sdb1 :

root@sansvr01:~# 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 0x7943fd2f.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-1044, default 1): 
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-1044, default 1044): 
Using default value 1044

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
root@sansvr01:~#

Saya memilih untuk mengatur shared disk-nya menggunakan LVM. Ada 3 langkah yang perlu dilakukan untuk membuat logical volume yang akan dibagikan ke semua iSCSI Client.

  1. Inisialisasi partisi dengan perintah pvcreate :
    root@sansvr01:~# pvcreate /dev/sdb1
      Physical volume "/dev/sdb1" successfully created
    root@sansvr01:~# 
    root@sansvr01:~# pvs
      PV         VG            Fmt  Attr PSize PFree
      /dev/sda2  vg_sansvr01 lvm2 a--  7.51g    0 
      /dev/sdb1  vg_shareddisk lvm2 a--  8.00g 8.00g
    root@sansvr01:~#
  2. Membuat volume group baru dengan perintah vgcreate. Pada contoh ini saya membuat grup baru dengan nama “vg_shareddisk” :
    root@sansvr01:~# vgcreate vg_shareddisk /dev/sdb1
      Volume group "vg_shareddisk" successfully created
    root@sansvr01:~# 
    root@sansvr01:~# vgs
      VG            #PV #LV #SN Attr   VSize VFree
      vg_sansvr01   1   2   0 wz--n- 7.51g    0 
      vg_shareddisk   1   0   0 wz--n- 8.00g 8.00g
    root@sansvr01:~#
  3. Membuat logical volume yang nantinya akan di-share kepada iSCSI Client. Dalam contoh ini saya membuat sebuah logical volume berukuran 500MB & menamainya “shared01” :
    root@sansvr01:~# lvcreate -n shared01 -L +500M vg_shareddisk
      Logical volume "shared01" created
    root@sansvr01:~# lvs
      LV       VG            Attr       LSize   Pool Origin Data%  Move Log Cpy%Sync Convert
      lv_root  vg_sansvr01 -wi-ao----   6.71g                                             
      lv_swap  vg_sansvr01 -wi-ao---- 816.00m                                             
      shared01 vg_shareddisk -wi-a----- 500.00m                                             
    root@sansvr01:~#

Setelah menyiapkan logical volume, langkah berikutnya adalah menginstal semua paket yang diperlukan oleh iSCSI Server ini. Di RedHat atau CentOS paket-paket yang diperlukan tersedia dalam grup paket “Network Storage Server” :

root@sansvr01:~# yum groupinstall "Network Storage Server"
root@sansvr01:~# rpm -aq | grep scsi-target
scsi-target-utils-1.0.24-10.el6.x86_64
root@sansvr01:~#

tgtd adalah nama daemon dari iSCSI Server. Kita bisa melihat berkas-berkas yang termasuk dalam paket scsi-target-utils tadi dengan menggunakan perintah berikut ini :

root@sansvr01:~# rpm -ql scsi-target-utils-1.0.24-10.el6.x86_64
/etc/rc.d/init.d/tgtd
/etc/sysconfig/tgtd
/etc/tgt/targets.conf
/usr/sbin/tgt-admin
/usr/sbin/tgt-setup-lun
/usr/sbin/tgtadm
/usr/sbin/tgtd
/usr/sbin/tgtimg
/usr/share/doc/scsi-target-utils-1.0.24
/usr/share/doc/scsi-target-utils-1.0.24/README
/usr/share/doc/scsi-target-utils-1.0.24/README.iscsi
/usr/share/doc/scsi-target-utils-1.0.24/README.iser
/usr/share/doc/scsi-target-utils-1.0.24/README.lu_configuration
/usr/share/doc/scsi-target-utils-1.0.24/README.mmc
/usr/share/man/man5/targets.conf.5.gz
/usr/share/man/man8/tgt-admin.8.gz
/usr/share/man/man8/tgt-setup-lun.8.gz
/usr/share/man/man8/tgtadm.8.gz
root@sansvr01:~#

Berikutnya saya tinggal mendaftarkan logical volume yang sudah dibuat tadi. Mari kita lihat lagi logical volume “shared01” dengan menggunakan perintah lvs :

root@sansvr01:~# lvs
  LV       VG            Attr       LSize   Pool Origin Data%  Move Log Cpy%Sync Convert
  lv_root  vg_sansvr01   -wi-ao----   6.71g                                             
  lv_swap  vg_sansvr01   -wi-ao---- 816.00m                                             
  shared01 vg_shareddisk -wi-a----- 500.00m                                             
root@sansvr01:~#

Logical volume “shared01” memiliki alamat device seperti berikut ini :

root@sansvr01:~# ls /dev/mapper/vg_shareddisk-shared01 
/dev/mapper/vg_shareddisk-shared01
root@sansvr01:~#

Saya perlu mendaftarkan logical volume tersebut ke dalam berkas /etc/tgt/targets.conf. Berkas targets.conf memuat daftar semua harddisk (logical volume) yang dimiliki oleh iSCSI Server. Berikut ini adalah contoh konfigurasi yang perlu ditambahkan ke dalam berkas targets.conf :

<target iqn.2014-04.localdomain:sansvr01.shared01>
    backing-store /dev/mapper/vg_shareddisk-shared01
</target>

Setiap harddisk atau logical volume yang diatur oleh iSCSI Server dikenal sebagai “target”. Tiap target harus memiliki nama yang unik dalam satu jaringan. Ada konvensi penulisan nama target, aturan ini dikenal dengan “iSCSI Qualified Name” (IQN). IQN ini kurang lebih seperti ini aturannya :

iqn.[informasi tanggal].[domain]:[hostname server].[shared disk name]

Setelah selesai mendaftarkan logical volume, saya bisa langsung mengaktifkan service tgtd seperti pada contoh berikut ini :

root@sansvr01:~# service --status-all | grep tgt
tgtd is stopped
root@sansvr01:~# service tgtd start
Starting SCSI target daemon:                               [  OK  ]
root@sansvr01:~# service tgtd status
tgtd (pid 1458 1455) is running...
root@sansvr01:~#

Penting juga untuk mengatur tgtd supaya otomatis aktif saat proses booting :

root@sansvr01:~# chkconfig tgtd on
root@sansvr01:~# chkconfig tgtd --list
tgtd            0:off   1:off   2:on    3:on    4:on    5:on    6:off
root@sansvr01:~#

Kita bisa lihat status shared disk dengan perintah tgt-admin seperti contoh berikut ini :

root@sansvr01:~# tgt-admin -s -v
tgtadm -C 0 --op show --mode target
Target 1: iqn.2014-04.localdomain:sansvr01.shared01
    System information:
        Driver: iscsi
        State: ready
    I_T nexus information:
    LUN information:
        LUN: 0
            Type: controller
            SCSI ID: IET     00010000
            SCSI SN: beaf10
            Size: 0 MB, Block size: 1
            Online: Yes
            Removable media: No
            Prevent removal: No
            Readonly: No
            Backing store type: null
            Backing store path: None
            Backing store flags: 
        LUN: 1
            Type: disk
            SCSI ID: IET     00010001
            SCSI SN: beaf11
            Size: 524 MB, Block size: 512
            Online: Yes
            Removable media: No
            Prevent removal: No
            Readonly: No
            Backing store type: rdwr
            Backing store path: /dev/mapper/vg_shareddisk-shared01
            Backing store flags: 
    Account information:
    ACL information:
        ALL
root@sansvr01:~#

Bila sudah muncul tampilan seperti contoh di atas, itu artinya logical volume sudah siap diakses oleh iSCSI Client.

Kita bisa menambahkan ACL (access control list) pada berkas targets.conf tadi. ACL ini fungsinya untuk membatasi hanya iSCSI Client tertentu saja yang berhak mengakses shared disk tersebut. Pada contoh di bawah ini saya mengatur tgtd supaya hanya mengijinkan akses dari client yang memiliki IP 172.16.10.31 :

root@sansvr01:~# cat /etc/tgt/targets.conf
default-driver iscsi

<target iqn.2014-04.localdomain:sansvr01.shared01>
    backing-store /dev/mapper/vg_shareddisk-shared01
    initiator-address 172.16.10.31
</target>
root@sansvr01:~#

Tiap kali kita mengubah konfigurasi berkas targes.conf tadi, kita perlu me-restart tgtd :

root@sansvr01:~# service tgtd restart
Stopping SCSI target daemon:                               [  OK  ]
Starting SCSI target daemon:                               [  OK  ]
root@sansvr01:~#

Status ACL bisa dilihat dari hasil perintah tgt-admin seperti pada contoh di bawah ini :

root@sansvr01:~# tgt-admin -s
Target 1: iqn.2014-04.localdomain:sansvr01.shared01
    System information:
        Driver: iscsi
        State: ready
    I_T nexus information:
    LUN information:
        LUN: 0
            Type: controller
            SCSI ID: IET     00010000
            SCSI SN: beaf10
            Size: 0 MB, Block size: 1
            Online: Yes
            Removable media: No
            Prevent removal: No
            Readonly: No
            Backing store type: null
            Backing store path: None
            Backing store flags: 
        LUN: 1
            Type: disk
            SCSI ID: IET     00010001
            SCSI SN: beaf11
            Size: 524 MB, Block size: 512
            Online: Yes
            Removable media: No
            Prevent removal: No
            Readonly: No
            Backing store type: rdwr
            Backing store path: /dev/mapper/vg_shareddisk-shared01
            Backing store flags: 
    Account information:
    ACL information:
        172.16.10.31
root@sansvr01:~#

Selain perintah tgt-admin tadi, kita juga bisa gunakan perintah tgtadm seperti contoh berikut ini :

root@sansvr01:~# tgtadm --lld iscsi --mode target --op show
Target 1: iqn.2014-04.localdomain:sansvr01.shared01
    System information:
        Driver: iscsi
        State: ready
    I_T nexus information:
    LUN information:
        LUN: 0
            Type: controller
            SCSI ID: IET     00010000
            SCSI SN: beaf10
            Size: 0 MB, Block size: 1
            Online: Yes
            Removable media: No
            Prevent removal: No
            Readonly: No
            Backing store type: null
            Backing store path: None
            Backing store flags: 
        LUN: 1
            Type: disk
            SCSI ID: IET     00010001
            SCSI SN: beaf11
            Size: 524 MB, Block size: 512
            Online: Yes
            Removable media: No
            Prevent removal: No
            Readonly: No
            Backing store type: rdwr
            Backing store path: /dev/mapper/vg_shareddisk-shared01
            Backing store flags: 
    Account information:
    ACL information:
        172.16.10.31
root@sansvr01:~#

Menyiapkan iSCSI Initiator

Mesin dev01 menggunakan CentOS 6.5 & mempunyai konfigurasi IP seperti berikut ini :

root@dev01:~# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:ec:9b:73 brd ff:ff:ff:ff:ff:ff
    inet 172.16.10.31/24 brd 172.16.10.255 scope global eth1
    inet6 fe80::5054:ff:feec:9b73/64 scope link 
       valid_lft forever preferred_lft forever
3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:a6:28:13 brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.31/24 brd 192.168.10.255 scope global eth0
    inet6 fe80::5054:ff:fea6:2813/64 scope link 
       valid_lft forever preferred_lft forever
root@dev01:~#

Mesin dev01 hanya memiliki satu buah harddisk (/dev/sda) :

root@dev01:~# fdisk -l

Disk /dev/sda: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 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: 0x0002d485

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          64      512000   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              64        1045     7875584   8e  Linux LVM

Disk /dev/mapper/vg_dev01-lv_root: 7205 MB, 7205814272 bytes
255 heads, 63 sectors/track, 876 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: 0x00000000

Disk /dev/mapper/vg_dev01-lv_swap: 855 MB, 855638016 bytes
255 heads, 63 sectors/track, 104 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: 0x00000000

root@dev01:~# pvs
  PV         VG       Fmt  Attr PSize PFree
  /dev/sda2  vg_dev01 lvm2 a--  7.51g    0 
root@dev01:~# vgs
  VG       #PV #LV #SN Attr   VSize VFree
  vg_dev01   1   2   0 wz--n- 7.51g    0 
root@dev01:~# lvs
  LV      VG       Attr       LSize   Pool Origin Data%  Move Log Cpy%Sync Convert
  lv_root vg_dev01 -wi-ao----   6.71g                                             
  lv_swap vg_dev01 -wi-ao---- 816.00m                                             
root@dev01:~#

Di mesin yang akan menjadi iSCSI Client ini, kita perlu menginstal paket iscsi-initiator-utils. Paket ini bisa juga diperoleh dari YUM grup “iSCSI Storage Client”

root@dev01:~# yum groupinstall "iSCSI Storage Client"
root@dev01:~# rpm -aq | grep iscsi-initiator-utils
iscsi-initiator-utils-6.2.0.873-10.el6.x86_64
root@dev01:~#

Setelah paket iscsi-initiator-utils terpasang, kita perlu mengaktifkan service iscsid dan iscsi :

root@dev01:~# service iscsid start
root@dev01:~# service iscsi start

Penting untuk memastikan kedua servis tersebut aktif otomatis saat proses booting :

root@dev01:~# chkconfig iscsid on
root@dev01:~# chkconfig iscsi on

Sampai tahap ini mesin dev01 sudah siap untuk mengakses iSCSI Target dari mesin sansvr01. Kita bisa gunakan perintah iscsiadm untuk melakukan scanning semua iSCSI Target yang tersedia (atau lebih tepatnya iSCSI Target yang sudah disediakan oleh sansvr01). Perintahnya seperti contoh di bawah ini :

root@dev01:~# iscsiadm --mode discovery --type sendtargets --portal 172.16.10.5:3260 --discover
iscsiadm: cannot make connection to 172.16.10.5: No route to host
iscsiadm: cannot make connection to 172.16.10.5: No route to host
iscsiadm: cannot make connection to 172.16.10.5: No route to host
iscsiadm: cannot make connection to 172.16.10.5: No route to host
iscsiadm: cannot make connection to 172.16.10.5: No route to host
iscsiadm: cannot make connection to 172.16.10.5: No route to host
iscsiadm: connection login retries (reopen_max) 5 exceeded
iscsiadm: Could not perform SendTargets discovery: encountered connection failure
root@dev01:~#

Bila muncul error “No route to host” seperti ini, kita perlu memeriksa konektivitas antara iSCSI Client (dev01) dan iSCSI Server-nya (sansvr01). Pertama kita bisa gunakan perintah ping. Kedua mesin ini akan menggunakan network 172.16.10.0/24 untuk komunikasi iSCSI. Jadi pada contoh ini, yang diakses oleh mesin dev01 adalah IP 172.16.10.5.

root@dev01:~# ping 172.16.10.5
PING 172.16.10.5 (172.16.10.5) 56(84) bytes of data.
64 bytes from 172.16.10.5: icmp_seq=1 ttl=64 time=1.28 ms
64 bytes from 172.16.10.5: icmp_seq=2 ttl=64 time=0.951 ms
64 bytes from 172.16.10.5: icmp_seq=3 ttl=64 time=0.974 ms
64 bytes from 172.16.10.5: icmp_seq=4 ttl=64 time=0.946 ms
64 bytes from 172.16.10.5: icmp_seq=5 ttl=64 time=0.939 ms
^C
--- 172.16.10.5 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4551ms
rtt min/avg/max/mdev = 0.939/1.019/1.287/0.137 ms
root@dev01:~#

Bila iSCSI Client dapat melakukan ping ke mesin iSCSI Server, berikutnya kita perlu memastikan port 3260 sudah tersedia (LISTEN) di iSCSI Server. Caranya kita bisa coba telnet port tersebut.

root@dev01:~# telnet 172.16.10.5 3260
-bash: telnet: command not found
root@dev01:~#

Bila perintah telnet tidak tersedia, kita perlu instal paket telnet terlebih dulu :

root@dev01:~# yum install telnet

Lalu kita coba lagi telnet port 3260 :

root@dev01:~# telnet 172.16.10.5 3260
Trying 172.16.10.5...
telnet: connect to address 172.16.10.5: No route to host
root@dev01:~#

Bila iSCSI Client masih belum bisa melakukan telnet ke port 3260, kita perlu cek dulu apakah servis tgtd benar-benar aktif di iSCSI Server :

root@sansvr01:~# service tgtd status
tgtd (pid 1365 1362) is running...
root@sansvr01:~# netstat -plunt | grep 3260
tcp        0      0 0.0.0.0:3260                0.0.0.0:*                   LISTEN      1362/tgtd           
tcp        0      0 :::3260                     :::*                        LISTEN      1362/tgtd           
root@sansvr01:~#

Bila ternyata servis tgtd sudah aktif & port 3260 sudah tersedia, maka dapat dipastikan port 3260 ini terblok oleh firewall. Kita perlu membuka akses port 3260 ini supaya semua iSCSI Client bisa mengakses shared disk melalui protokol iSCSI. Berikut adalah contoh perintah iptables untuk membuka akses port 3260 dari semua mesin di jaringan 172.16.10.0/24.

root@sansvr01:~# iptables -I INPUT -p tcp -s 172.16.10.0/24 --dport 3260 -j ACCEPT
root@sansvr01:~# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]
root@sansvr01:~#

Setelah kita selesai mengatur firewall, kita bisa coba lagi untuk melakukan telnet dari iSCSI Client :

root@dev01:~# telnet 172.16.10.5 3260
Trying 172.16.10.5...
Connected to 172.16.10.5.
Escape character is '^]'.

^]
telnet> q
Connection closed.
root@dev01:~#

Bila perintah telnet sukses mengakses port 3260, kita bisa coba perintah iscsiadm tadi sekali lagi :

root@dev01:~# iscsiadm --mode discovery --type sendtargets --portal 172.16.10.5:3260 --discover
Starting iscsid:                                           [  OK  ]
172.16.10.5:3260,1 iqn.2014-04.localdomain:sansvr01.shared01
root@dev01:~#

Sekarang mesin dev01 sudah mengenali ada 1 shared disk yang disediakan oleh mesin sansvr01 (iqn.2014-04.localdomain:sansvr01.shared01). Setelah itu kita gunakan perintah iscsiadm lagi untuk mengakses iqn.2014-04.localdomain:sansvr01.shared01, kali ini dengan opsi --login.

root@dev01:~# iscsiadm --mode node --targetname="iqn.2014-04.localdomain:sansvr01.shared01" --portal 172.16.10.5:3260 --login
root@dev01:~#

Bila perintah tadi sukses dijalankan, sekarang dev01 sudah memiliki 1 buah hardisk baru. Mesin dev01 sukses mengakses iSCSI Target “shared01”, terdeteksi oleh dev01 sebagai /dev/sdb :

root@dev01:~# fdisk -l

Disk /dev/sda: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 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: 0x0002d485

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          64      512000   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              64        1045     7875584   8e  Linux LVM

Disk /dev/mapper/vg_dev01-lv_root: 7205 MB, 7205814272 bytes
255 heads, 63 sectors/track, 876 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: 0x00000000

Disk /dev/mapper/vg_dev01-lv_swap: 855 MB, 855638016 bytes
255 heads, 63 sectors/track, 104 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: 0x00000000

Disk /dev/sdb: 524 MB, 524288000 bytes
17 heads, 59 sectors/track, 1020 cylinders
Units = cylinders of 1003 * 512 = 513536 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

root@dev01:~#

Setelah mesin dev01 sukses mengakses shared disk “shared01” tersebut, selanjutnya kita bisa gunakan “shared01” ini seperti layaknya internal harddisk. Langkah-langkah untuk menyiapkan iSCSI disk misalnya seperti ini :

  1. Membuat partisi baru :
    root@dev01:~# 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 0x636c0fb3.
    Changes will remain in memory only, until you decide to write them.
    After that, of course, the previous content won't be recoverable.
    
    Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
    
    WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
             switch off the mode (command 'c') and change display units to
             sectors (command 'u').
    
    Command (m for help): n
    Command action
       e   extended
       p   primary partition (1-4)
    p
    Partition number (1-4): 1
    First cylinder (1-1020, default 1): 
    Using default value 1
    Last cylinder, +cylinders or +size{K,M,G} (1-1020, default 1020): 
    Using default value 1020
    
    Command (m for help): w
    The partition table has been altered!
    
    Calling ioctl() to re-read partition table.
    Syncing disks.
    root@dev01:~# fdisk -l /dev/sdb
    
    Disk /dev/sdb: 524 MB, 524288000 bytes
    17 heads, 59 sectors/track, 1020 cylinders
    Units = cylinders of 1003 * 512 = 513536 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk identifier: 0x636c0fb3
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/sdb1               1        1020      511500+  83  Linux
    root@dev01:~#
  2. Membuat filesystem baru pada partisi /dev/sdb1, pada contoh ini saya pilih filesystem ext4 :
    root@dev01:~# mkfs.ext4 /dev/sdb1
    mke2fs 1.41.12 (17-May-2010)
    Filesystem label=
    OS type: Linux
    Block size=1024 (log=0)
    Fragment size=1024 (log=0)
    Stride=0 blocks, Stripe width=0 blocks
    128016 inodes, 511500 blocks
    25575 blocks (5.00%) reserved for the super user
    First data block=1
    Maximum filesystem blocks=67633152
    63 block groups
    8192 blocks per group, 8192 fragments per group
    2032 inodes per group
    Superblock backups stored on blocks: 
        8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409
    
    Writing inode tables: done                            
    Creating journal (8192 blocks): done
    Writing superblocks and filesystem accounting information: done
    
    This filesystem will be automatically checked every 27 mounts or
    180 days, whichever comes first.  Use tune2fs -c or -i to override.
    root@dev01:~#
  3. Membuat mountpoint untuk /dev/sdb1 tadi :
    root@dev01:~# mkdir /iscsidisk
  4. Mounting partisi /dev/sdb1
    root@dev01:~# mount /dev/sdb1 /iscsidisk
    root@dev01:~# df -h
    Filesystem                    Size  Used Avail Use% Mounted on
    /dev/mapper/vg_dev01-lv_root  6.7G  748M  5.6G  12% /
    tmpfs                         499M     0  499M   0% /dev/shm
    /dev/sda1                     485M   32M  428M   7% /boot
    /dev/sdb1                     484M   11M  449M   3% /iscsidisk
    root@dev01:~# touch test
    root@dev01:~# ls -tlr /iscsidisk/
    total 13
    drwx------. 2 root root 12288 Apr  9 00:41 lost+found
    -rw-r--r--. 1 root root     0 Apr  9 00:43 test
    root@dev01:~#

Kira-kira seperti itu cara sederhana untuk menyiapkan shared disk via protokol iSCSI sekaligus mengatur iSCSI Initiator-nya.

Leave a Reply