LIO Target介绍(一)

Linux-IO Target介绍

转载自IBM中国Linux虚拟化实验室:

Linux-IO TargetLinux内核中,用软件实现各SCSI Target,其支SAN技术包Fibre ChannelFCoEiSCSI等,同时还能为本机生成模拟SCSI设备,以及为虚拟机提供virtioSCSILinux-IO Target使用户能够使用相对廉价Linux系统实SCSISAN的各种功能,而不用购买昂贵的专业设备

 

TargetInitiatorSCSI的术语Initiator指的SCSI会话的发起方TargetLUNLogical Unit Number,可认为是逻辑块设),并将数据的读写指令发送TargetTarget指的是SCSI会话的一方,它接收来Initiator的指令InitiatorLUN,并实LUN的读写。如果用客户-服务器的模型来考虑Initiator即是客户端Target是服务器。SAN中,主机一般都Initiator,存储设备则Target

 

Linux的流行,人们在内核里加入了各种各样的功能,比Linux系统可以用作路由器和交换机。人们也希望能够Linux来实现专业的存储设备才有的功能Linux-IO Target之前Linux内核采STGT项目来实现各Target,配置管理则使用大家熟tgtadmin等工具,根据作者的经tgtadm使用起来很不友STGTSCSI模拟实际都是在用户态中实现的,存在性能瓶颈Linux-IO Target则在内核态实现Target的模拟,配置管理则采用了更现代的基sysfs的方式,既消除了性能瓶颈,也提供了友好的用户态管理工具从内核2.6.38版起Linux内核都Linux-IO Target的相关模块。在用户态,各大发行版都打包targetclirtslib,其targetcli程序用于配置、管理rtslib则提Python编程接

 

1. Linux-IOiSCSI Target架构摘自LIO官网)


imageiSCSI为例,Linux-IO Target的配置结构如1所示。处于最后端的是各种各样Linux的存储设备Linux-IO Target支持的后端存储设备包Ramdisk、通用块设备和文件,也可以直接映射本SCSI设备Linux-IO Target通过创backstore存储对象来导入这些存储设备。它可以使用SAN传输技术来导出这些存储对象。首先,基于SAN技术(iSCSI)创建Target。接着Target里创建TPGTarget Portal Group)。每Target下可以创建多TPG,每TPG包含了一组入口Portal)。然TPG里创LUN,并将特定的存储对象与特定LUN关联起来。最后TPG里创建一个或者多个入口iSCSI来说,Portal就是一IP地址和端口的组合。为了更精确的控制LUN的访问,还可以TPG之下创建各ACL规则。

 

targetcli介绍

targetcliLinux-IO Target的用户态的管理配置工具。用户可以使yumapt-get直接从各大发行版的官方仓库安装targetcli提供一个类shell的界面,而前文提到的各TargetTPGLUNbackstore对象则被组织成目录树的形式,用户可以lscd命令来浏览目录树,createdelete命令来创建和删除各种对象。浏览,就是浏览目录树,创建删除各种对象,就是在目录树的各级节点中创建新的节点。同targetcli还提供了常见shell命令辅助编辑功能,例TAB智能补上下键切换命令Ctrl + R搜索命令历史凡是有不熟悉的命令,都可以help命令查询使用说

 

使用targetcli创建后端存储对象

Target的第一步就是创建存储对象。运targetcli程序,进入一shell界面,系统显示如清1

 

清单1. targetcli初始提示

targetcli shell version 2.1.fb30

Copyright 2011-2013 by Datera, Inc and others.

For help on commands, type 'help'.

 

/>

 

ls命令targetcli便将当前的目录树输出,如清2

 

清单2. 列出初始目录树

/> 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]

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

 

输入cd backstores/fileio命令,backstores/fileio子目录,并create命令创建一个文件存储对象。接着使cd ../ramdisk命令,backstores/fileio移动backstores/ramdisk子目录,并create命令创建一ramdisk,如清3

 

清单3. 创建文件存储对象

/> cd backstores/fileio

/backstores/fileio> create disk0 /tmp/disk0.img 10MB

Created fileio disk0 with size 10485760

/backstores/fileio> cd ../ramdisk

/backstores/ramdisk> create rd0 10MB

Created ramdisk rd0 with size 10MB.

 

最后回backstore这级目录并ls命令确认当前创建的存储对象,运行结果如4

 

清单4. 浏览存储对象

/backstores/ramdisk> cd ..

/backstores> ls

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

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

o- fileio .............................. [Storage Objects: 1]

| o- disk0 [/tmp/disk0.img (10.0MiB) write-back deactivated]

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

o- ramdisk ............................. [Storage Objects: 1]

o- rd0 ............................ [(10.0MiB) deactivated]

 

除了可以fileioramdisk类型backstore对象,还可以创blockpscsi对象block对象可以用来导入一般的块设备,/dev/hdaX/dev/sdX/dev/vgX/lvXpscsi对象可以用来导入系统里已有SCSI设备(lsscsi列出的设备),SAN的前端收到SCSI命令都会透传pscsi导入的设备。需要注Linux-IO Target所模拟SCSI设备实SPC-2SCP-3SPC-4规范,也就是Persistent Reservations (PRs)Asymmetric Logical Unit Assignment (ALUA)vStorage APIs for Array Integration (VAAI)等高SCSI特性都有实现。但是主机上的现SCSI设备则未必实现SPC-4,因此在需要高SCSI特性的场合,最好通block对象来/dev/sdX这样的设备,而不是通pscsi

 

使targetcliiSCSI

下面iSCSI为例子,展示如何创TargetTPGLUNPortal对象。首先,使cd命令进iscsi子目录。接着,使create命令创建一Target对象,如果Target对象WWNtargetcli会自动生成一个。创Target对象的同时targetcli还在其下自动创建了一TPG,名tpg1tpg1之下,可以创LUNPortalACL对象。出于简单起见,我们没有启ACLCHAP认证,因此,我们还要set命令设TPG的属性,以允许匿名访问。整个过程如清5所示

 

清单5. 创建iSCSI目标

/backstores/ramdisk> cd /iscsi

/iscsi> create

Created target iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.d6f52e88795d.

Created TPG 1.

/iscsi> cd iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.d6f52e88795d/tpg1/

/iscsi/iqn.20...2e88795d/tpg1> luns/ create /backstores/fileio/disk0

Created LUN 0.

/iscsi/iqn.20...2e88795d/tpg1> luns/ create /backstores/ramdisk/rd0

Created LUN 1.

/iscsi/iqn.20...2e88795d/tpg1> portals/ create 0.0.0.0

Using default IP port 3260

Binding to INADDR_ANY (0.0.0.0)

Created network portal 0.0.0.0:3260.

/iscsi/iqn.20...2e88795d/tpg1> set attribute authentication=0 demo_mode_write_protect=0 generate_node_acls=1 cache_dynamic_acls=1

Parameter demo_mode_write_protect is now '0'.

Parameter authentication is now '0'.

Parameter generate_node_acls is now '1'.

Parameter cache_dynamic_acls is now '1'.

 

在运cdcreate命令的之后,我们还可以ls命令以确认执行的结果,出于篇幅本文没有举例,读者可以自己执ls命令观察结果。最后,我们进入顶层目录,并运ls命令查看总的结果,输出如清6

 

清单6. 浏览iSCSI和后端存储

/iscsi/iqn.20...2e88795d/tpg1> cd /

/> ls

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

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

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

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

| | o- disk0 ................. [/tmp/disk0.img (10.0MiB) write-back activated]

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

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

| o- rd0 ............................................. [(10.0MiB) activated]

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

| o- iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.d6f52e88795d . [TPGs: 1]

| o- tpg1 .............................................. [gen-acls, no-auth]

| o- acls ...................................................... [ACLs: 0]

| o- luns ...................................................... [LUNs: 2]

| | o- lun0 .............................. [fileio/disk0 (/tmp/disk0.img)]

| | o- lun1 ................................................ [ramdisk/rd0]

| o- portals ................................................ [Portals: 1]

| o- 0.0.0.0:3260 ................................................. [OK]

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

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

 

从清6中,我们可以很形象的Target(名为iqn.2003-01...的对象TPGACLLUNPortal的从属关系,也可以很清楚的看lun0的后端对象fileio/disk0,映射的文件/tmp/disk0.imglun1的后端ramdisk/rd0。如果对结果满意,则可saveconfig命令,会将配置保存为一json文件。为了让系统启动的时候能够自动重新加载这json文件,则应该启target服务,SystemD为例,运行systemctl enable target”即可。

 

要测试刚才配置好的iSCSI Target,我们在别的机器上,Linux的软件实现iSCSI Initiator来装Target。首先RPMiscsi-initiator-utils,里面包含iscsiadm命令。我们运iscsiadm可以检测导出Target并装载其中LUN,简单起见,我们在同一台机器上Target。最后lsscsi,我们可以发现输出中新sdbsdc这两个新的设备。命令输出如清7所示

 

清单7. 装载iSCSI Target

[root@localhost edward]# 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.d6f52e88795d

[root@localhost edward]# iscsiadm --mode node \

> --targetname iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.d6f52e88795d \

> --portal 127.0.0.1 --login

Logging in to [iface: default, target: iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.d6f52e88795d, portal: 127.0.0.1,3260] (multiple)

Login to [iface: default, target: iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.d6f52e88795d, portal: 127.0.0.1,3260] successful.

[root@localhost edward]# lsscsi

[0:0:0:0] disk ATA HITACHI HTS72755 JF3Z /dev/sda

[1:0:0:0] cd/dvd HL-DT-ST DVDRAM GT50N LT20 /dev/sr0

[6:0:0:0] disk LIO-ORG disk0 4.0 /dev/sdb

[6:0:0:1] disk LIO-ORG rd0 4.0 /dev/sdc

 

为了删除刚才创建Target,我们首先Initiator卸载它,然后targetclidelete命令将其删除即targetcli除了可shell形式运行,还可将要运行的操作指令作为参数直接调targetclitargetcli执行指令后就自动退出,很方便。命令输出如清8。可以发现,只需要删除指定Target,其目录下TPGLUNPortalACL等对象会自动被级联删除,操作起来简单又符合直觉

 

清单8. 卸载并删除iSCSI Target

[root@localhost edward]# iscsiadm --mode node --targetname iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.d6f52e88795d --portal 127.0.0.1 --logout

Logging out of session [sid: 1, target: iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.d6f52e88795d, portal: 127.0.0.1,3260]

Logout of [sid: 1, target: iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.d6f52e88795d, portal: 127.0.0.1,3260] successful.

[root@localhost edward]# targetcli iscsi/ delete iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.d6f52e88795d

Deleted Target iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.d6f52e88795d.

[root@localhost edward]# targetcli ls

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

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

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

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

| | o- disk0 ............... [/tmp/disk0.img (10.0MiB) write-back deactivated]

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

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

| o- rd0 ........................................... [(10.0MiB) deactivated]

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

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

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

(未完待续)

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值