NAS (Network Attached Storage, 网络附加储存服务器) :提供相关的网络文件系统,如NFS
SAN (Storage Area Networks, 储存局域网络):提供磁盘
iSCSI 配置:
yum -y install scsi-target-utils
查看该工具包生成了哪些文件:
rpm -ql scsi-target-utils
/etc/rc.d/init.d/tgtd #
/etc/sysconfig/tgtd
/etc/tgt/targets.conf #
/usr/sbin/tgt-admin #
/usr/sbin/tgt-setup-lun
/usr/sbin/tgtadm #
/usr/sbin/tgtd
/usr/sbin/tgtimg
/usr/share/doc/scsi-target-utils-1.0.24
/usr/share/doc/scsi-target-utils-1.0.24/README
/usr/share/doc/scsi-target-utils-1.0.24/README.iscsi
/usr/share/doc/scsi-target-utils-1.0.24/README.iser
/usr/share/doc/scsi-target-utils-1.0.24/README.lu_configuration
/usr/share/doc/scsi-target-utils-1.0.24/README.mmc
/usr/share/man/man5/targets.conf.5.gz
/usr/share/man/man8/tgt-admin.8.gz
/usr/share/man/man8/tgt-setup-lun.8.gz
/usr/share/man/man8/tgtadm.8.gz
其中/usr/sbin/tgtadm和/usr/sbin/tgt-admin的都是管理和配置target的工具,它们作用是一样的,只不过tgtadm是命令行下的工具,
而tgt-admin是根据配置文件/etc/tgt/targets.conf调用tgtadm来实现。另外/etc/init.d/tgtd是服务启动脚本。
启动tgtd:
service tgtd start
netstat -tnlp | grep 3260
tcp 0 0 0.0.0.0:3260 0.0.0.0:* LISTEN 2074/tgtd
tcp 0 0 :::3260 :::* LISTEN 2074/tgtd
开机自启:
chkconfig tgtd on
tgtadm
是一个高度模式化的命令,他们的模式很相近。有三个模式:target、logicalunit、account。
指定模式时使用--mode选项。再使用--op来指定对应模式下的选项。另外,使用-lld指定driver,有两种driver:iscsi和iser,基本都会使用iscsi。
tgtadm --help
--lld <driver> --mode target --op new --tid <id> --targetname <name>
add a new target with <id> and <name>. <id>
must not be zero.
--lld <driver> --mode target --op delete [--force] --tid <id>
delete the specific target with <id>.
With force option, the specific target is
deleted even if there is an activity.
--lld <driver> --mode target --op show
show all the targets.
--lld <driver> --mode target --op show --tid <id>
show the specific target's parameters.
--lld <driver> --mode target --op update --tid <id> --name <param> --value <value>
change the target parameters of the specific
target with <id>.
--lld <driver> --mode target --op bind --tid <id> --initiator-address <address>
--lld <driver> --mode target --op bind --tid <id> --initiator-name <name>
enable the target to accept the specific initiators.
--lld <driver> --mode target --op unbind --tid <id> --initiator-address <address>
--lld <driver> --mode target --op unbind --tid <id> --initiator-name <name>
disable the specific permitted initiators.
--lld <driver> --mode logicalunit --op new --tid <id> --lun <lun>
--backing-store <path> --bstype <type> --bsoflags <options>
add a new logical unit with <lun> to the specific
target with <id>. The logical unit is offered
to the initiators. <path> must be block device files
(including LVM and RAID devices) or regular files.
bstype option is optional.
bsoflags supported options are sync and direct
(sync:direct for both).
--lld <driver> --mode logicalunit --op delete --tid <id> --lun <lun>
delete the specific logical unit with <lun>
that the target with <id> has.
--lld <driver> --mode account --op new --user <name> --password <pass>
add a new account with <name> and <pass>.
--lld <driver> --mode account --op delete --user <name>
delete the specific account having <name>.
--lld <driver> --mode account --op bind --tid <id> --user <name> [--outgoing]
add the specific account having <name> to
the specific target with <id>.
<user> could be <IncomingUser> or <OutgoingUser>.
--control-port <port> use control port <port>
2.2.2 target的命名方式
iqn.YYYY-mm.<reversed domain name>[:identifier]
iqn是iscsi qualified name的缩写,就像fqdn一样。
YYYY-mm描述的是此target是何年何月创建的,如2016-06。
<reversed domain name>是域名的反写,起到了唯一性的作用,如longshuai.com写为com.longshuai。
identifier是可选的,是为了知道此target相关信息而设的描述性选项,如指明此target用到了哪些硬盘。
示例:
iqn.2016-06.com.longshuai:test.disk1
2.2.3 创建一个target
注意:创建target时,tid不能是0,因为0是被系统保留的。
tgtadm --lld iscsi --mode target --op new --tid 1 --targetname iqn.2017-03.com.longshuai:test.disk1
或
tgtadm -L iscsi -m target -o new -t 1 -T iqn.2017-03.com.longshuai:test.disk1
查看:
tgtadm -L iscsi -m target -o show
向此target添加一个lun,使用新插入的磁盘/dev/sdc1(全新)。
tgtadm -L iscsi -m logicalunit -o new -t 1 -l 1 -b /dev/sdc1
或
tgtadm --lld iscsi --mode logicalunit --op new --tid 1 --lun 1 --backing-store /dev/sdc1
限定访问的客户端地址
tgtadm -L iscsi -m target -o bind -t 1 -I 192.168.100.0/24
2.2.4 tgt-admin和配置文件targets.conf
tgt-admin是读取配置文件的选项然后调用tgtadm来执行的工具。tgt的配置文件为/etc/tgt/targets.conf
列出当前target的信息:
tgt-admin -s
使用--dump选项输出为配置文件的格式,并将其重定向到/tmp/tgt.conf中:
tgt-admin --dump | tee /tmp/tgt.conf
注意,这样导出的配置文件指定的LUN号码可能会在tgt-admin读取并执行的时候更换位置,但这并不会有任何影响
删除所有target:
tgt-admin --delete ALL
从刚才生成的配置文件中读取并启动
tgt-admin -e -c /tmp/tgt.conf
使用dump出来的配置文件会有default-driver指令行,而这一行在主配置文件中也有,且他们是不能出现多次的,否则将会报错,所以需要将主配置文件中的default-driver指令注释掉。
target端使用tgtadm命令配置的结果都是工作在内核中的,重启tgt服务或重启系统时,内存中的内容都会丢失。所以要永久让配置生效需要写入到配置文件中去。
target的配置文件默认是/etc/tgt/targets.conf,但是可以在/etc/tgt/temp/目录(默认不存在)下建立多个以".conf"为后缀的配置文件,然后启用主配置文件中的include指令即可。
以下给出两个配置的例子,这个配置文件很通俗易懂。
#include /etc/tgt/temp/*.conf
default-driver iscsi
<target iqn.2017-03.com.longshuai:test.disk1>
backing-store /dev/sdb1
backing-store /dev/sdc
incominguser <incoming_username> <PASSWORD>
outgoinguser <outgoing_username> <PASSWORD>
initiator-address 192.168.100.0/24
</target>
这样的配置,backing-store的顺序决定了lun号码的顺序,上面的配置中/dev/sdb1会是Lun1,/dev/sdc会是lun2
若想要为每个逻辑设备指定想要指定的lun号码,需要将每个backing-store封装在target中并独立指定lun号码。
#include /etc/tgt/temp/*.conf
default-driver iscsi
<target iqn.2017-03.com.longshuai:test.disk1>
<backing-store /dev/sdb1>
lun 5
</backing-store>
<backing-store /dev/sdc>
lun 6
</backing-store>
incominguser <incoming_username> <PASSWORD>
outgoinguser <outgoing_username> <PASSWORD>
initiator-address 192.168.100.0/24
</target>
重新加载配置:service tgtd force-reload
2.3 安装initiator
yum -y install iscsi-initiator-utils
2.3.1 相关文件和目录说明
下面是此安装包生成的一些重要文件和目录(只列出了必要的部分)。
rpm –ql iscsi-initiator-utils
Linux上配置使用iSCSI详细说明第14张
其中:
/etc/iscsi/iscsid.conf:是iscsi发起者的配置文件。
/etc/rc.d/init.d/{iscsi,iscsid}:服务启动脚本,只需要启动iscsi即可,因为它会自动调用iscsid脚本。
/sbin/iscsi-iname:为initiator命名的工具。就像target有自己独特的iqn名称,initiator也有独特的名称标识自己。
/sbin/iscsiadm:initiator的管理工具,在initiator上的绝大部分的命令都是通过它来执行的。
/var/lib/iscsi/ifaces:指定使用哪个网卡接口和target通信。
/var/lib/iscssi/nodes:该目录中保存了发现的target,分别是以target_name命名的目录,在target_name目录下又保存了以"target_ip,port"(如192.168.100.151,3260)的配置文件,这个配置文件是本initiator向对应的target 发起连接时的参数,这些参数继承于/etc/iscsi/iscsid.conf。
/var/lib/iscsi/send_targets:该目录中也存储了一个或多个以"target_IP,port"命名的目录,记录的是discovery的历史记录,对于discovery成功的则在对应的目录会有文件,否则是空目录。失败的也会记录
其中IP,port的记录方式称为protal,是入口、入门的意思。
需要注意的是,建议不要把iscsi和iscsid设置为开机自启动,因为开机时如果它找不到target的时候会一直卡在那里等待。可以将其放在rc.local文件中来启动。
chkconfig iscsi off
chkconfig iscsid off
echo "service iscsi start" >>/etc/rc.d/rc.local
2.3.4 发现target(discovery)
即使用discovery模式。
iscsiadm -m discovery [ -d debug_level ] [ -t type -p ip:port -I ifaceN [ -p ip:port ]
-d:输出调试信息,级别从0-8。出现错误的时候用来判断错误来源是很有用处的,可以使用级别2。
-I:指定发现target时通信接口。
-t type:有三种type(sendtargets,SLP,iSNS),一般只会用到sendtargets,可以简写为st。
-p IP:PORT:指定要发现target的IP和端口,不指定端口时使用默认的3260。
如:iscsiadm -m discovery -t st -p 192.168.100.151:3260
在发现了target后,在/var/lib/iscsi中的nodes和send_targets目录中就有了文件。
2.3.5 关联和解除关联target(node)
关联target的作用是initiator和target建立session,建立session后,initiator上就可以查看、访问、操作target上的scsi设备。
有两种关联方法,一是关联所有,一是指定单个target进行关联。
iscsiadm -m node [-d debug_level] [-L all,manual,automatic] [-U all,manual,automatic]
iscsiadm -m node [-d debug_level] [[-T targetname -p ip:port -I ifaceN] [-l | -u ]] [-o operation]
-d:指定debug级别,有0-8个级别。
-L和-U:分别是登录和登出target,可以指定ALL表示所有发现的target,或者manual指定。
-l和-u:分别是登录和登出某一个target。
-T:用于-l或-u时指定要登录和登出的targetname。
-o:对discoverydb做某些操作,可用的操作有new/delete/update/show,一般只会用到delete和show。
例如,使用单个的关联方式关联target。其中target_name可以通过命令iscsiadm -m node查看。
bash> iscsiadm -m node
192.168.100.151:3260,1 iqn.2017-03.com.longshuai:test.disk1
bash> iscsiadm -m node -T iqn.2017-03.com.longshuai:test.disk1 -p 192.168.100.151:3260 -l
Logging in to [iface: default, target: iqn.2017-03.com.longshuai:test.disk1, portal: 192.168.100.151,3260] (multiple)
Login to [iface: default, target: iqn.2017-03.com.longshuai:test.disk1, portal: 192.168.100.151,3260] successful.
实际上,在执行discovery的时候很可能就已经自动执行了关联,所以再次关联很可能什么消息也看不到。如果是这样的话,需要先退出session,再进行关联。当然也可能是直接显示successful,这样就说明原来discovery的时候是没有主动关联的。
iscsiadm -m node -T iqn.2017-03.com.longshuai:test.disk1 -p 192.168.100.151:3260 -u
此时fdisk -l看看是否已经多了硬盘
2.4 CHAP认证
对于iscsi而言,在CHAP认证的机制上有两种方式:initiator authentication和target authentication
initiator authentication认证: 在initiator尝试连接到一个target的时候,initator需要提供一个用户名和密码给target被target进行认证。也就是说initiator需要被target认证,它向target端提供的账号和密码是target端指定的
target authentication认证: 在initiator尝试连接到一个target的时候,target有时也需要被initiator认证,以确保该target是合法而非伪装的target,这就要求target提供一个用户名和密码给initiator被initiator进行认证。
target向initiator提供的账号和密码对于target而言是流出的,所以称之为outgoing。所以outgoing使用的账号和密码在后文称为outgoing账号和outgoing密码。而对于initiator而言是incoming的,所以在initiator配置文件中称为in。
也就是说outgoing账号是target端提供给initiator端,被initiator认证的账号,但尽管如此,这个账号和密码还是在target端创建和绑定的
2.4.2 2 tgtadm命令的account模式用法
以下是tgtadm --help关于account的结果,但是用法给的并不全面。
--lld <driver> --mode account --op new --user <name> --password <pass>
--lld <driver> --mode account --op delete --user <name>
--lld <driver> --mode account --op bind --tid <id> --user <name> [--outgoing]
--lld <driver> --mode account --op unbind --tid <id> --user <name>
以下是个人发现的较为全面的用法,为了偷懒,所以使用短选项格式来表示。其中
# 新建一个用户
-L <driver> -m account -o new --u <name> --p <pass>
# 删除一个用户
-L <driver> -m account -o delete --u <name>
# 查看用户列表
-L <driver> -m account -o show
# 绑定用户到target上,outgoing的意义在后文会说明
-L <driver> -m account -o bind -t <tid> -u <name> [--outgoing]
# 从target上解绑用户
-L <driver> -m account -o unbind -t <tid> -u <name> [--outgoing]
一般而言,对于initiator的配置文件/etc/iscsi/iscsid.conf,如果不使用CHAP,则基本可以无视这个配置文件。
如果只要实现单向认证,则开启以下三项即可。
node.session.auth.authmethod = CHAP
node.session.auth.username = username
node.session.auth.password = password
如果要实现双向认证,则需要开启以下5项。
node.session.auth.authmethod = CHAP
node.session.auth.username = username
node.session.auth.password = password
node.session.auth.username_in = username_in
node.session.auth.password_in = password_in
且需要注意的是,如果是单向认证,则后两项必须不能开,开了就会进行双向认证。
虽然iscsi-initiator-utils支持discovery认证,但是由于scsi-target-utils不支持discovery认证,所以在认证关联target之前必须先进行discovery,也就是说在target端的访问控制列表ACL项中必须要定义允许initiator进行discovery