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 ~]#
ข้อมูลอ้างอิง
- คอนฟิก iSCSI target บน Linux
- iSCSI – Wikipedia
- man iscsiadm (8)