组建iscsi 网络三种target工具,分别为tgt,iscsi_tgt,和targetcli ;
initiator 端均使用open-iscsi即可;
- a. tgt
使用tgtadm命令创建iscsi target;
首先,创建target
tgtadm --lld iscsi --mode target --op new --tid 1 --targetname=iqn.xxxxx:xxx
tgtadm --lld iscsi --mode target --op new --tid 2 --targetname=iqn.xxxxx:xxx
其次,--op bind,将target与initiator 地址bind,也可指定-I All,所有initiator均可连接到该target.
tgtadm --lld iscsi --mode target --op bind --tid 1 --initiator-address <address> or
tgtadm --lld iscsi --mode target --op bind --tid 2 -I ALL
再次,在target上创建lun.
tgtadm --lld iscsi --mode logicalunit --op new --tid 1 --lun 1 [-f|--bsoflags {direct|sync}] [-b|--backing-store /dev/sda]
显示创建target:
tgtadm --lld iscsi --mode target --op show
删除lun:
tgtadm --lld iscsi --mode logicalunit --op delete --tid 1 --lun 1
删除target:
tgtadm --lld iscsi --mode target --op delete --tid 1
b. open-iscsi
在initiator端使用iscsiadm来管理iscsi initiator;
首先,发现target
iscsiadm -m discovery -t sendtargets -p ip:port
然后,用一个node来记录发现的target
iscsiadm -mode node
login:
iscsiadm --mode node [--targetname iqn.xxxxxx:xxx] --portal|-p ip:port --login
logout:
iscsiadm --mode node [--targetname iqn.xxxxxx:xxx] --partal|-p ip:port --logout
删除discovery的target:
iscsiadm --mode discovery -t sendtarget -p ip:port --op|-o delete
删除记录的node:
iscsiadm -mode node --op|-o delete
- 使用iscsi_tgt创建iscsi target
iscsi_tgt是spdk+dpdk中带的一套支持iscsi协议的方法。在使用iscsi_tgt需要先下载dpdk和spdk。
编译spdk和dpdk参见官方网站:
将spdk+dpdk编译好之后,首先执行 spdk/scrips/setup.sh: mount hugepage 文件系统
运行iscsi_tgt需要vfio-pci的支持: modprobe vfio-pci;
然后,配置iscsi.conf,在/usr/local/etc/spdk/iscsi.conf ,具体可参见spdk/etc/spdk/iscsi.conf.in示例配置文件;
其中,支持了 Nvme, AIO ,Malloc等块设备方式;
最后,运行命令: ./iscsi_tgt -m 0xxx 通过-m mask来决定spdk 起几个线程来polling;具体参看iscsi_tgt -h;
initiator端配置方式,同tgt中讲解的open-iscsi
- 使用targetcli创建iscsi target
Linux-IO target 在linux内核2.6.38以后,用软件实现的scsi target,起支持的SAN技术中所有流行的存储协议包括Fibre Channel、FCoe
\iSCSI、iser等,同时还能为本机生成模拟的scsi设备,以及为虚拟机提供基于virtio的scsi设备。
LIO架构图如下:
LIO在内核态实现了对Target的模拟,配置管理则采用基于sysfs的方式,提供友好的的用户管理工具。在用户态,各大发行版都包含了targetcli和rtslib,targetcli程序用于配置管理,rtslib则提供Python编程接口。
1). targetcli
- 1a)root权限运行targetcli
- 1b)浏览存储对象, ls查看目录树信息,cd到执行目录
- 1c)创建文件存储对象
- cd /backstores/fileio
- create disk0 /tmp/disk0.img 10MB
- cd /backstores/ramdisk
- create rd0 10MB
- 1d)创建iSCSI目标
- cd /iscsi
- create
- cd iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.6b448471ba5e/tpg1/
- luns/ create /backstores/fileio/disk0
- luns/ create /backstores/ramdisk/rd0
- portals/ create 0.0.0.0
- set attribute authentication=0 demo_mode_write_protect=0 generate_node_acls=1 cache_dynamic_acls=1
- cd /
- ls
- saveconfig
- 1e)启动iscsi target服务
- [root@localhost ~]# service target start
- [root@localhost ~]# service target status
- 1f)装载iSCSI Target
- [root@localhost ~]# iscsiadm -m discovery -t sendtargets -p 127.0.0.1
- 127.0.0.1:3260,1 iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.6b448471ba5e
- [root@localhost ~]# iscsiadm –mode node \
- > –targetname iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.6b448471ba5e \
- > –portal 127.0.0.1 –login
- [root@localhost dennis]# lsscsi
- [2:0:0:0] disk ATA ST3160815AS A /dev/sda
- [6:0:0:0] disk LIO-ORG disk0 4.0 /dev/sdb
- [6:0:0:1] disk LIO-ORG rd0 4.0 /dev/sdc
- 1g)卸载并删除iSCSI目标
- iscsiadm –mode node –targetname iqn.2003-01.org.linux-iscsi.localhost.x8664:sn. 6b448471ba5e –portal 127.0.0.1 –logout
- targetcli iscsi/ delete iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.6b448471ba5e
除了targetcli之外,rtslib提供了python的编程接口。这里不再细述了。