1. iSCSI簡介
從協議層次的角度看,通常所說的SCSI通常是指一組包含塊命令、控制器管理、系統命令和enclosure服務等內容的協議規范,對應於回話層;而其下的物理通道和鏈接方式就對應在數據鏈路層,SCSI命令可以通過串口、Fibre Channel、SAS、infiniband、Internet、USB、PCIE等進行傳輸。iSCSI就是一種把異地存儲資源通過TCP/IP網絡映射到本地邏輯存儲設備的SCSI實現。不同於NFS向用戶提供按文件為單位訪問遠程存儲的方式,它向用戶提供了以塊方式訪問遠程存儲資源的接口,也就是說用戶可以在本地/dev/下看到iSCSI映射后的磁盤。通常所說的target端是指遠端存儲資源所在的主機,比如存儲服務器;而initiator端是指鏈接到target端並會訪問遠端存儲資源的節點。
2. iSCSI target管理工具的特點
基於iSCSI的網絡屬性,很直觀地我們能想到它基本上是基於server-client模型。提供存儲資源的target相當於server,而使用遠程存儲資源的initiator端相當於client。基於現有的iSCSI協議規范,能夠開發出target端和initiator端工具。在Linux系統上,initiator端工具可以用iscsiadm,目前大部分os都自帶有這款工具;而target端的工具由於直接和性能和存儲管理相關,數量更多,目前常見的有targetcli、targetadm、ietadm,它們各有所長,分別能適用不同的場合。
2.1小巧玲瓏的LIO targetcli
相對而言,targetcli是最新的target管理工具,內核態基於Linux 2.6.38開始引入的Linux IO Target,用戶態提供了targetcli命令和python開發庫rtslib,為用戶提供了友好的操作界面。為此,現在大部分Linux OS發現版本默認都自帶了LIO targetcli。在缺省沒有安裝的linux OS上,用戶可以參考下面的命令進行安裝:
yum install targetcli.noarch
如果重啟后,發現target異常,需要檢查下面兩個后台服務是否開啟:
systemctl start targetd.service
systemctl start target.service
2.2功能完備的tgtadm
在LIO出現之前,tgtadm是首選的target管理工具,被用到企業存儲解決方案當中。除了LUN管理、ACL控制等功能之外,它還提供了對已連接上的initiator的檢測和iSNS服務的支持。雖然界面沒法和LIO的targetcli相比,但是不乏功能強大的命令來完成各種操作。
用戶可以通過下面的命令來安裝它:
yum install scsi-target-utils.x86_64
同樣tgtadm后台依賴於tgtd的默默運行,雖然你可以打開debug選項來調試。
下面給出了常用命令的一些例子:
創建一個target:
tgtadm --lld iscsi --op new --mode target --tid 2 -T iqn.2016-09.com.sborst:storage.sdc3
往target里面新建一個lun:
tgtadm --lld iscsi --op new --mode logicalunit --tid 2 --lun 1 -b /dev/sdc3
用下面的命令可以顯示剛創建的target和lun:
tgtadm --lld iscsi --op show --mode target
在target端可以通過類似下面的命令來添加portal信息:
tgtadm --lld iscsi --op new --mode portal --param portal=10.1.1.111:3260
添加ACL列表:
tgtadm --lld iscsi --op bind --mode target --tid 2 -I ALL,
2.3精益求精的ietadm
tgtadm創建的SCSI設備實際都是在用戶態中實現的,存在性能瓶頸。為了解決這個問題,企業級別的target管理工具((iSCSI Enterprise Target) 營運而生,它依賴內核模塊iscsi_trgt.ko來幫助iSCSI設備的創建。此外,ietadm提供了以配置腳本的方式來設置和管理target及權限,還提供了顯示discovery列表的功能。
從https://sourceforge.net/projects/iscsitarget/files/latest/download?source=typ_redirect
載到源代碼之后,整個目錄是這個樣子的:
[root@localhost iscsitarget-1.4.20.2]# ls
ChangeLog dkms.conf etc iscsitarget.spec Makefile README README.mcs RELEASE_NOTES
COPYING doc include kernel patches README.initiators README.vmware usr
用戶可以make && make install, 然后make生成ietadm和它依賴的后台服務ietd。接着啟動ietd服務后,就可以創建自己的LUN和ACL了。根據http://czmmiao.iteye.com/blog/2055805的描述,還有許多腳本可以用來控制哪些initiator可以discovery target,
/etc/init.d/iscsi-target iscsitarget的啟動腳本
/etc/ietd.conf iscsitarget的配置文件
/etc/initiators.allow控制initiator對target的訪問權限。
/etc/initiators.deny控制initiator對target的訪問權限。
/etc/iet/targets.allow控制不同target的被訪問權限。
/etc/ietd.conf
Target iqn.2001-04.com.example:storage.disk2.sys1.xyz
Lun 0 Path=/dev/sda1,Type=fileio
Alias lun0
大致說明:
Target iqn.2001-04.com.example:storage.disk2.sys1.xyz 表示該ISCSI Target 的命名,命名在同一子網內應該是唯一的,標准命名方式為:
"Target "+ target名字 (格式如下:iqn.yyyy-mm.<reversed domain name>[:identifier] )
“Lun 0 Path=/dev/sda1”表示塊設備號為0,映射的磁盤為/dev/sda1。
本次配置中Type的設定為"fileio",當然也可以針對需要設置為:"file" or "LVM"。