iSCSI
iSCSI 又稱為IP-SAN,是一種基於網際網路及SCSI-3協議下的存儲技術,由IETF提出,並於2003年2月11日成為正式的標準。與傳統的SCSI技術比較起來,iSCSI技術有以下三個革命性的變化:
把原來只用於本機的SCSI協同透過TCP/IP網路傳送,使連接距離可作無限的地域延伸;
連接的伺服器數量無限(原來的SCSI-3的上限是15);
由於是伺服器架構,因此也可以實現在線擴容以至動態部署。
iSCSI Qualified Name (IQN)
Format: The iSCSI Qualified Name is documented in RFC 3720, with further examples of names in RFC 3721. Briefly, the fields are:
From the RFC:
Naming String defined by
Type Date Auth "example.com" naming authority
+--++-----+ +---------+ +-----------------------------+
| || | | | | |
iqn.1992-01.com.example:storage:diskarrays-sn-a8675309
iqn.1992-01.com.example
iqn.1992-01.com.example:storage.tape1.sys1.xyz
通訊 port : TCP 3260
iSCSI target(伺服器)
CentOS6 iSCSI target and initiator 的設定
流程:
需要有各儲存裝置 (這裡以 LVM 切割出一塊裝置做使用)
安裝 target 服務
啟動服務
到 initiator 端,將 target 的分享掛載起來
需要有各儲存裝置 (以 lvm 的裝置示範)
[root@server1 ~]# lvcreate -l 3 -n iscsi10 vgsrv
Logical volume "iscsi10" created
--- Logical volume ---
LV Name /dev/vgsrv/iscsi10
VG Name vgsrv
LV UUID VcQj9X-yhOD-wMDY-Sh2b-9Z8X-r0Cj-h08rB0
LV Write Access read/write
LV Status available
# open 0
LV Size 96.00 MiB
Current LE 3
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:3
安裝 target 服務
# 安裝 scsi-target-utils
[root@server1 ~]# yum install scsi-target-utils
修改 targets 服務設定 (詳細請見 man 5 targets.conf)
# 修改 targets 設定 (Linux SCSI Target Configuration File)
[root@server1 ~]# vim /etc/tgt/targets.conf
# 在檔案最後面加入這一段
# target 名稱遵循 IQN 規範,通常用這樣的格式即可
# 設定儲存裝置來源
backing-store /dev/vgsrv/iscsi10
# 設定可存取的 initiator 位置
initiator-address 192.168.123.0/24
# 登入的學生帳號密碼
incominguser student PaSsWoRd
啟動 tgtd 服務(Linux SCSI Target Administration Utility)
# 重新啟動 tgtd 服務
[root@server1 ~]# /etc/init.d/tgtd restart
# tgtd 預設開機啟動
[root@server1 ~]# chkconfig tgtd on
show tgtadm 顯示設定檔狀況並驗證(詳細說明 man 8 tgtadm)
# show tgtadm 顯示 target 設定檔狀況並驗證
[root@server1 ~]# tgtadm --mode target --op show
Target 1: iqn.2012-05.world.server:target0
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
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: 101 MB, Block size: 512
Online: Yes
Removable media: No
Readonly: No
Backing store type: rdwr
Backing store path: /dev/vgsrv/iscsi10 # 裝置代號
Backing store flags:
Account information:
student # 需要的登入帳號
ACL information:
192.168.123.0/24 # 可使用的主機存取控制
iSCSI Initiator(客戶端)
當有了 target 可以透過 initiator 探索 target 的資源,並且掛載使用。
到 initiator 端,將 target 的分享掛載起來,首要先探索伺服器提供 target 資源為何?
iscsiadm (open-iscsi administration utility) 詳細 man 8 iscsiadm
[root@desktop1 ~]# iscsiadm -m discovery -t st -p 192.168.123.194
Starting iscsid: [ OK ]
192.168.123.194:3260,1 iqn.2012-05.world.server:target0
加入預設登入密碼於設定檔內(因為剛剛在 target 有設定密碼,如果沒設定這段會在過程中發生錯誤)
# 因為 target 有設定密碼,所以需要設定這段.
[root@desktop1 ~]# vim /etc/iscsi/iscsid.conf
# To enable CHAP authentication set node.session.auth.authmethod
# to CHAP. The default is None.
node.session.auth.authmethod = CHAP
# To set a CHAP username and password for initiator
# authentication by the target(s), uncomment the following lines:
node.session.auth.username = student
node.session.auth.password = password
... 省略 ...
掛載 iscsi target ,這裡使用的是 -l 登入主機
[root@desktop1 ~]# iscsiadm -m node -T iqn.2012-05.world.server:target0 -p 192.168.123.194 -l
Logging in to [iface: default, target: iqn.2012-05.world.server:target0, portal: 192.168.123.194,3260]
Login to [iface: default, target: iqn.2012-05.world.server:target0, portal: 192.168.123.194,3260] successful.
找尋裝置代號需要透過 /var/log/message 的內容發現他掛載到那個裝置內,這裡是 /dev/sdb 這個裝置。
[root@desktop1 ~]# tail /var/log/messages
May 6 00:34:21 desktop1 kernel: scsi 4:0:0:0: Attached scsi generic sg2 type 12
May 6 00:34:21 desktop1 kernel: scsi 4:0:0:1: Direct-Access IET VIRTUAL-DISK 0001 PQ: 0 ANSI: 5
May 6 00:34:21 desktop1 kernel: sd 4:0:0:1: Attached scsi generic sg3 type 0
May 6 00:34:21 desktop1 kernel: sd 4:0:0:1: [sdb] 196608 512-byte logical blocks: (100 MB/96.0 MiB)
May 6 00:34:21 desktop1 kernel: sd 4:0:0:1: [sdb] Write Protect is off
May 6 00:34:21 desktop1 kernel: sd 4:0:0:1: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
May 6 00:34:21 desktop1 kernel: sdb: unknown partition table
May 6 00:34:21 desktop1 kernel: sd 4:0:0:1: [sdb] Attached SCSI disk
也可以透過 /dev/disk/by-path/ 目錄找尋載入的裝置名稱。
預設開機啟動掛載
[root@desktop1 ~]# chkconfig iscsi on
[root@desktop1 ~]# chkconfig iscsid on
掛到檔案系統使用,流程就和一般的硬碟使用方式一樣。需要格式化檔案系統、建立掛載點、掛載、寫入開機 /etc/fstab 等動作。
# 建立分割區
[root@desktop1 ~]# fdisk /dev/sdb
# 需要重開機後才可以發現這個分割區(partprobe 在 centos 6.3 還是不可以使用)
# 格式化為 ext4 檔案系統
[root@desktop1 ~]# mkfs -t 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
51200 inodes, 204592 blocks
10229 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=67371008
25 block groups
8192 blocks per group, 8192 fragments per group
2048 inodes per group
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 22 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
# 使用 UUIS 方式掛載
[root@desktop1 ~]# blkid /dev/sdb1
/dev/sdb1: UUID="66e276f3-fc47-472b-8037-acca7250c5e4" TYPE="ext4"
# 建立掛載點
[root@desktop1 ~]# mkdir /storage
# 寫入 /etc/fstab 確認開機啟動正常
[root@desktop1 ~]# vim /etc/fstab
... 略 ....
UUID=66e276f3-fc47-472b-8037-acca7250c5e4 /storage ext4 _netdev 0 0
# 重新掛載所有檔案系統,並驗證。
[root@localhost ~]# mount -o remount -a
[root@localhost ~]# mount
... 略 ....
/dev/sdb1 on /storage type ext4 (rw,_netdev)
如果已經不需要使用,可以使用底下的方式移除
# -u 登出系統
[root@localhost ~]# iscsiadm -m node -T iqn.2012-05.world.server:target0 -p 192.168.123.194 -u
Logging out of session [sid: 2, target: iqn.2012-05.world.server:target0, portal: 192.168.123.194,3260]
Logout of [sid: 2, target: iqn.2012-05.world.server:target0, portal: 192.168.123.194,3260] successful.
# -o delete 刪除這個 node 在本機的記錄
[root@localhost ~]# iscsiadm -m node -T iqn.2012-05.world.server:target0 -p 192.168.123.194 -o delete