คอนฟิก iSCSI initiator บน Linux

iSCSI (Internet Small Computer System Interface) เป็นวิธีการเชื่อมต่อ storage โดยผ่าน Internet Protocol (IP) ทำให้สามารถเชื่อมต่อ เครื่องกับ storage ผ่านทาง network ต่างๆ ระยะทางไกลได้ (เป็นข้อดีที่เหนือกว่าการใช้ Fiber Channel ที่ถูกจำกัดระยะทางด้วยสาย Fiber)

iSCSI ทำงานในรูปแบบ Server-Client โดย ฝั่ง Client หรือเรียกว่า Initiator ทำหน้าที่ส่ง SCSI command ไปยัง storage ของ Server ปลายทาง ที่เรียกว่า Target

บทความนี้กล่าวถึงวิธีการติดตั้งโปรแกรมและคอนฟิก iSCSI ฝั่ง Client เพื่อให้สามารถเรียกใช้ดิสก์ (target) จาก server ได้ โดยฝั่ง server อาจเป็น Storage Array หรือ Server ที่ถูกคอนฟิกเพื่อทำหน้าที่เป็น target ได้

ตัวอย่างในบทความนี้ ถือว่าฝั่ง server คอนฟิกสร้าง volume ชื่อ “vol-01” และอนุญาตให้เครื่องที่เราจะคอนฟิกสามารถใช้งานได้ (access)

ติดตั้งไฟล์ rpm

ตัวอย่างการติดตั้งไฟล์ rpm สำหรับ Fedora 11

[root@fc11-64a ~]# rpm -i iscsi-initiator-utils-6.2.0.870-8.fc11.x86_64.rpm

ค้นหา target

เริ่มต้น ต้องค้นหาชื่อ target ปลายทางจาก IP ที่ระบุ โดยใช้คำสั่ง iscsiadm โหมด discovery

[root@fc11-64a ~]# iscsiadm -m discovery -t sendtargets -p 192.168.1.1:3260
Starting iscsid:                                           [  OK  ]
192.168.1.1:3260,1 iqn.2000-10.com.example:0-999999-b8f877804-bfd0000000c13f3e-vss-control
192.168.1.1:3260,1 iqn.2000-10.com.example:0-999999-141376505-58c000000654afe7-vol-01

หากเป็นการเรียกใช้คำสั่ง iscsiadm ครั้งแรก เซอร์วิส iscsid จะถูกรันขึ้นมาโดยอัตโนมัติ

ตัวอย่างข้อความที่เกิดขึ้นในไฟล์ /var/log/messages ซึ่งไฟล์นี้จะมีประโยชน์มากในการตรวจสอบ และแก้ไขปัญหาที่อาจเกิดขึ้น

[root@fc11-64a ~]# tail -f /var/log/messages
...
Nov 14 16:24:31 fc11-64a kernel: Loading iSCSI transport class v2.0-870.
Nov 14 16:24:31 fc11-64a kernel: iscsi: registered transport (tcp)
Nov 14 16:24:31 fc11-64a kernel: iscsi: registered transport (iser)
Nov 14 16:24:31 fc11-64a iscsid: iSCSI logger with pid=6014 started!
Nov 14 16:24:32 fc11-64a iscsid: transport class version 2.0-870. iscsid version 2.0-870
Nov 14 16:24:32 fc11-64a iscsid: iSCSI daemon with pid=6016 started!

login เข้า target ที่ต้องการ

เมื่อเราทราบชื่อ target ที่ต้องการใช้แล้ว สามารถใช้คำสั่ง iscsiadm โหมด node ระบุออปชั่น ‘-l’ เพื่อ login เข้าสู่ target ได้

[root@fc11-64a ~]# iscsiadm -m node -p 192.168.1.1 -T iqn.2000-10.com.example:0-999999-141376505-58c000000654afe7-vol-01 -l
Logging in to [iface: default, target: iqn.2000-10.com.example:0-999999-141376505-58c000000654afe7-vol-01, portal: 192.168.1.1,3260]
Login to [iface: default, target: iqn.2000-10.com.example:0-999999-141376505-58c000000654afe7-vol-01, portal: 192.168.1.1,3260]: successful

ตัวอย่างข้อความที่เกิดขึ้นในไฟล์ /var/log/messages

[root@fc11-64a ~]# tail -f /var/log/messages
...
Nov 14 16:28:20 fc11-64a kernel: scsi6 : iSCSI Initiator over TCP/IP
Nov 14 16:28:30 fc11-64a kernel: scsi 6:0:0:0: Direct-Access     EXAMPLE  100E-00         x.x  PQ: 0 ANSI: 5
Nov 14 16:28:30 fc11-64a kernel: sd 6:0:0:0: [sdb] 209725440 512-byte hardware sectors: (107 GB/100 GiB)
Nov 14 16:28:30 fc11-64a kernel: sd 6:0:0:0: [sdb] Write Protect is off
Nov 14 16:28:30 fc11-64a kernel: sd 6:0:0:0: [sdb] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
Nov 14 16:28:30 fc11-64a kernel: sd 6:0:0:0: [sdb] 209725440 512-byte hardware sectors: (107 GB/100 GiB)
Nov 14 16:28:30 fc11-64a kernel: sd 6:0:0:0: [sdb] Write Protect is off
Nov 14 16:28:30 fc11-64a kernel: sd 6:0:0:0: [sdb] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
Nov 14 16:28:30 fc11-64a kernel: sdb: unknown partition table
Nov 14 16:28:30 fc11-64a kernel: sd 6:0:0:0: [sdb] Attached SCSI disk
Nov 14 16:28:30 fc11-64a kernel: sd 6:0:0:0: Attached scsi generic sg2 type 0
Nov 14 16:28:30 fc11-64a iscsid: connection1:0 is operational now

จากไฟล์ /var/log/messages เมื่อ login เข้า target สำเร็จ volume จะถูก map เป็นดิสก์ (sdb) ให้เราสามารถเรียกใช้ได้

ใช้คำสั่ง fdisk ตรวจสอบ

[root@fc11-64a ~]# fdisk -l /dev/sdb
Disk /dev/sdb: 107.3 GB, 107379425280 bytes
255 heads, 63 sectors/track, 13054 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00000000
Disk /dev/sdb doesn't contain a valid partition table

เราสามารถสร้าง partition แล้วสร้าง filesystem ตามที่ต้องการได้เหมือนดิสก์ทั่วๆ ไป

ใช้คำสั่ง fdisk เพื่อสร้าง partition

[root@fc11-64a ~]# 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 0x52c1bb70.
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 13054.
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): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-13054, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-13054, default 13054):
Using default value 13054
Command (m for help): p
Disk /dev/sdb: 107.3 GB, 107379425280 bytes
255 heads, 63 sectors/track, 13054 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x52c1bb70
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1       13054   104856223+  83  Linux
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.

ใช้คำสั่ง mkfs.xfs เพื่อสร้าง filesystem แบบ xfs บน partition ที่ถูกสร้างขึ้น

[root@fc11-64a ~]# mkfs.xfs /dev/sdb1
meta-data=/dev/sdb1              isize=256    agcount=4, agsize=6553514 blks
         =                       sectsz=512   attr=2
data     =                       bsize=4096   blocks=26214055, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0
log      =internal log           bsize=4096   blocks=12799, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=0
realtime =none                   extsz=4096   blocks=0, rtextents=0

ใช้คำสั่ง mount เพื่อ mount filesystem

[root@fc11-64a ~]# mount /dev/sdb1 /mnt/vol-01/
[root@fc11-64a ~]# cd /mnt/vol-01/
[root@fc11-64a vol-01]# df -h .
Filesystem            Size  Used Avail Use% Mounted on
/dev/sdb1             100G  4.2M  100G   1% /mnt/vol-01

เลิกใช้งาน disk

เมื่อจะเลิกใช้งาน ต้อง umount ก่อน

[root@fc11-64a ~]# umount /mnt/vol-01
[root@fc11-64a ~]#

ใช้คำสั่ง iscsiadm โหมด node ระบุออปชั่น ‘-u’ เพื่อจะ logout ออกจาก target

[root@fc11-64a ~]# iscsiadm -m node -p 192.168.1.1 -T iqn.2000-10.com.example:0-999999-141376505-58c000000654afe7-vol-01 -u
Logging out of session [sid: 1, target: iqn.2000-10.com.example:0-999999-141376505-58c000000654afe7-vol-01, portal: 192.168.1.1,3260]
Logout of [sid: 1, target: iqn.2000-10.com.example:0-999999-141376505-58c000000654afe7-vol-01, portal: 192.168.1.1,3260]: successful

หลังจาก logout แล้ว ตรวจสอบด้วยคำสั่ง fdisk จะไม่เห็นดิสก์ที่ map ไว้

[root@fc11-64a ~]# fdisk -l /dev/sdb
[root@fc11-64a ~]#

ข้อมูลอ้างอิง

Leave a Reply