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"。