三种iSCSI target管理工具的比较

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

在target管理方面,用户既可以使用下面的界面进行LUN的创建删除等操作:

[[email protected]
usr]# targetcli

targetcli
shell version 2.1.fb37

Copyright
2011-2013 by Datera, Inc and others.

For
help on commands, type ‘help‘.

/>
ls

o-
/
.........................................................................................................................
[...]

o-
backstores
..............................................................................................................
[...]

|
o- block
..................................................................................................
[Storage Objects: 0]

|
o- fileio
.................................................................................................
[Storage Objects: 0]

|
o- pscsi
..................................................................................................
[Storage Objects: 0]

|
o- ramdisk
................................................................................................
[Storage Objects: 0]

o-
iscsi
............................................................................................................
[Targets: 0]

o-
loopback
.........................................................................................................
[Targets: 0]

也可以参考下面的步骤一步一步用shell命令或者脚本进行创建(当然还可以用python
rtslib直接进行二次开发):

#!/bin/bash

##
Clean original setting

targetcli
clearconfig confirm=True

#
Remove all original config #

targetcli
clearconfig confirm=True

targetcli
/backstores/block create ssd_vol1 /dev/sdc3

#targetcli
/iscsi create

iscsiname=`targetcli
/iscsi create | grep "Created" | head -n1 | awk ‘{print
$3}‘`;

iscsiname=${iscsiname%.*}

echo
"Hi, iscsiname is $iscsiname"

#
/backstores/block/my_vol1

targetcli
/iscsi/${iscsiname}/tpg1/luns create /backstores/block/ssd_vol1

targetcli
/iscsi/${iscsiname}/tpg1 set attribute authentication=0
demo_mode_write_protect=0 generate_node_acls=1

targetcli
/iscsi/${iscsiname}/tpg1/portals delete 0.0.0.0 3260

[[
$? != 0 ]]  && targetcli /iscsi/${iscsiname}/tpg1/portals/
delete 0.0.0.0 3260 confirm=True

targetcli
/iscsi/${iscsiname}/tpg1/portals create 192.168.1.115 3260

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, 效果如下图:

此时在initiator端发现能扫描并连接到两个target上去。

设置target的CHAP:

A.新建一个CHAP账户

tgtadm
--lld iscsi --op new --mode account --user test --password abc123

绑定该用户到target
2:

tgtadm
--lld iscsi --op bind --mode account --tid 2 --user test

此时可以看到Target
2里面的user
account 已经有test了

B.看chap是否工作,在远端测试initiator能否再次登录到targte2上:

发现有CHAP的target
2不能登录,而没有设置CHAP的target1照常可以登录成功。

删除一个lun:
(注意所有target的lun0不能删去,lun0是系统默认的配置信息)

tgtadm
--lld iscsi --op delete --mode logicalunit --tid 2 --lun 1

完了用命令tgtadm
--lld iscsi --op show --mode target 可以看到target2的卷少了一个。

删除一个target:

运行下面的命令可以删除target
2: tgtadm --lld iscsi --op delete --mode target --tid 2

用tgtadm
--lld iscsi --op show --mode target命令检查会发现target2不见了。

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

载到源代码之后,整个目录是这个样子的:

[[email protected]
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"。
除此之外还有很多其他参数可以设置,具体参考:
http://manpages.ubuntu.com/manpages/hardy/man5/ietd.conf.5.html

2.4 三种iSCSI
target管理工具的使用对比

通过上面的介绍和举例,我们不难看到三种工具各有优劣,区别如下:


安装包


前端工具


后台服务


性能


登录历史


功能


iSNS


LIO
targetcli


targetcli.noarch


Targetcli


Target;

targetd


好,2.6.38+原生内核支持


不记录initiator 登录信息


ACL控制


不支持


STGTT
targetadm


scsi-target-utils.x86_64


Tgtadm


tgtd


不好,用户态模拟设备


记录登录initiator名称


ACL;

Tags;


支持


STGT
ietadm


Iscsitarget-1.4.20.2


Ietadm


Ietd


好,有内核驱动模拟iSCSI设备


记录登录initiator名称及一些discovery信息


ACL;

Tags;

Disk
ID ;

基于配置文件的管理


支持

3.总结

根据上面的介绍可以看到,实现target管理有多中工具,每种工具都各有千秋,这就要求在实际工作中充分考虑到当前项目和长期客户需求,合理选择最适合自己的iscsi
target 套件。

4.参考文档和链接

https://github.com/agrover/targetcli-fb

SCSI
target framework (tgtadm)

http://www.bubuko.com/infodetail-1152038.html

http://www.linuxidc.com/Linux/2015-03/114323.

http://www.linuxidc.com/Linux/2012-08/67740.htm

https://github.com/konis/tgt/blame/master/doc/README.passthrough

http://blog.chinaunix.net/uid-30212356-id-5520545.html

https://github.com/fujita/tgt

http://iscsitarget.sourceforge.net/

https://sourceforge.net/projects/iscsitarget

https://www.ibm.com/developerworks/community/blogs/5144904d-5d75-45ed-9d2b-cf1754ee936a/entry/linux_io_target%25e4%25bb%258b%25e7%25bb%258d_%25e4%25b8%2580?lang=en

http://czmmiao.iteye.com/blog/2055805

时间: 2024-12-20 23:17:30

三种iSCSI target管理工具的比较的相关文章

三种Linux性能分析工具的比较

无论是在CPU设计.服务器研发还是存储系统开发的过程中,性能总是一个绕不过去的硬指标.很多时候,我们发现系统功能完备,但就是性能不尽如意,这时候就需要找到性能瓶颈.进行优化.首先我们需要结合硬件特点.操作系统和应用程序的特点深入了解系统内部的运行机制.数据流图和关键路径,最好找出核心模块.建立起抽象模型:接着需要利用各种性能分析工具,探测相关模块的热点路径.耗时统计和占比.在这方面,Linux操作系统自带了多种灵活又具有专对性的工具,此外一些厂家也开源了不少优秀的性能分析工具.下面就结合笔者最近

sas高级编程(1) 定点抽样、随机抽样、三种索引、管理索引

1:抽样 1.1 定点抽样 data sasuser.subset; do pickit=1 to totobs by 10; set sasuser.revenue point=pickit nobs=totobs; output; end; stop; run; 总体样本数量未知的情况下,使用set语句的nobs=选项获得总体观测行数,总体观测行数是在编译时确定的,并在创建pdv的时候被写入,存在文件描述部分中. point=n 表明要抽选第n条观测值,n必须为变量不能为常量. 为什么要使用

linux的gzip、bzip2、xz三种压缩使用方法工具介绍

压缩打包介绍: 常用压缩文件类型: 1.windows:.rar/.zip/.7z 2.linux:.zip/.gz/.bz2/.xz/.tar/.gz/.tar/.bz2/.tar/.xz gzip压缩工具: 1.实验,cd到/tmp目录下,使用mkdi创建一个目录d6z,在cd到d6z目录下创建一个文本1.txt,文本里面放入些内容,把空间加大,然后使用命令gzip压缩及解压缩过程. 实验操作如下: [[email protected] ~]# cd /tmp/      //先进入tmp目

安装软件包的三种方法和rpm工具使用

1.安装与卸载软件 在windows下安装一个软件很轻松,只要双击下载完成的.exe的文件,安装提示连续 "下一步" 即可.实际上,这个.exe文件是一个二进制的安装包.然而linux系统下安装一个软件似乎并不那么轻松了,因为我们不是在图形界面下,所以要学会如何在linux下安装一个软件. Linux下的安装,有三种方法:rpm工具,与Windows下的.exe文件类似yum工具源码包 2.rpm包介绍 RPM是 "Redhat Package Manager" 的

tkinter的三种几何布局管理类

1.pack() 主要采用块的方式组织子组件 如下: import tkinter root=tkinter.Tk() #创建窗口对象 label=tkinter.Label(root,text='hello,python') #创建标签对象 label.pack()  #将label组件添加到窗口中显示 button1=tkinter.Button(root,text='BUTTON1')   #创建按钮对象 button1.pack(side=tkinter.LEFT)     #将butt

Docker可视化管理工具DockerUI ,Portainer ,Shipyard对比(转)

一.Docker图形化工具 docker 图形页面管理工具常用的有三种,DockerUI ,Portainer ,Shipyard .DockerUI 是 Portainer 的前身,这三个工具通过docker api来获取管理的资源信息.平时我们常常对着shell对着这些命令行客户端,审美会很疲劳,如果有漂亮的图形化界面可以直观查看docker资源信息,也是非常方便的.今天我们就搭建单机版的三种常用图形页面管理工具.这三种图形化管理工具以Portainer最为受欢迎. 二.DockerUI 轻

Java利用 DES / 3DES / AES 这三种算法分别实现 对称加密

转载请注明出处:http://blog.csdn.net/smartbetter/article/details/54017759 有两句话是这么说的: 1)算法和数据结构就是编程的一个重要部分,你若失掉了算法和数据结构,你就把一切都失掉了. 2)编程就是算法和数据结构,算法和数据结构是编程的灵魂. 注意,这可不是我说的,是无数程序员总结的,话说的很实在也很精辟,若想长久可持续发展,多研究算法还是很有必要的,今天我给大家说说加密算法中的对称加密算法,并且这里将教会大家对称加密算法的编程使用.包含

【one day one linux】linux下的软件包管理工具

Linux 下的软件包管理工具 linux下的软件安装可以通过两种方式,一种是直接使用自带的软件包管理工具安装,另外一种通过编译源码安装. 1.软件包的种类 Red Hat和Fedora:redhat最早发行的个人版本的Linux,自从Red Hat 9.0版本发布后,RedHat 公司就不再开发桌面版的 Linux发行套件,Red Hat Linux停止了开发,而将全部力量集中在服务器版的开发上,也就是 Red Hat Enterprise Linux 版.2004年4月30日,Red Hat

源代码管理工具Svn和Git

一.源代码管理工具诞生的原因: 1.无法后悔:做错了一个操作后,没有后悔药可以吃: 注解:在用Xcode编程的时候,我们做了一个代码修改,忽然Xcode崩了,或者是不小心关掉了.那么刚才所写的好代码就丢失了,即使Command+Z也无法后退 2.版本备份:费空间.费时间: 如果我们为了防止写完一个模块或者一个功能的代码后Xcode因不小心关闭而丢失代码,就去做版本备份,那写完一个项目,岂不是备份了成百上千份?耗时耗空间! 3.版本混乱:因版本备份过多造成混乱,难于找回正确的想要的版本: 备份过多