DevinChen 2011-04-04
Linux target framework(tgt)是为创建、维护SCSI target 驱动(包括iSCSI、FC、SRP等)提供支持。它的关键目标是简洁地集成到scsi-mid层,并且实现大部分应用层空间的tgt(The key goals are the clean integration into the scsi-mid layer and implementing a great portion of tgt in user space)。
IET(iSCSI Enterprise Target )的开发者帮助开发了Linux SCSI target framework(stgt),
The developer of IET is also helping to develop Linux SCSI target framework (stgt) which looks like it might lead to an iSCSI target implementation with an upstream kernel component.
iSCSI Target可以用来:
a]用来安装stateless server/client (用于无盘安装)
b]通过局域网、无线网络或者因特网共享磁盘或者磁带设备
c]安装SAN——存储阵列
d]通过Linux下的分布式文件系统实现负载均衡的web服务器集群
在这个教程中,将要学到如何通过tgt框架构建一个全功能的Linux iSCSI SAN。
iSCSI target(server)
存储资源所在的iSCSI服务器被称为“target”。iSCSI target通常是一个硬盘存储设备。当前大部分的主流操作系统都提供了配合iSCSI target使用的客户端软件initiator。
iSCSI initiator(client)
initiator就是iSCSI传输的服务端。典型的initiator都有共同的目的,就是作为一个SCSI总线的适配器,代替物理上的SCSI设备(类似硬盘或者磁带)。iSCSI initiator通过IP网络传输SCSI命令。
CentOS / RHEL / Fedora 安装tgt
$yum install scsi-target-utils
Debian / Ubuntu Linux 安装tgt
$ sudo apt-get install tgt
tgtadm——Linux SCSI Target管理工具
tgtadm是用来监控、修改Linux SCSI target 的工具,包括target设置、卷设置,等等。这个工具允许提供为装有SCSI initiator的其它操作系统提供块级(block-level)的SCSI存储。这个功能最初被部署为Linux iSCSI target,通过网络向装有iSCSI initiator的系统提供存储服务。
启动tgtd
启动tgtd程序,可以输入:
$/usr/sbin/tgtd
RHEL / CentOS 系统下可以启动tgtd的服务程序,输入:
$/etc/init.d/tgtd start
定义iSCSI target名
以下的例子中,创建了一个id为1的target,它的iqn为:iqn.2001-04.com.example:storage.disk2.amiens.sys1.xyz,并且添加了一个lun( logical unit)号为1的逻辑单元(由/dev/hdc1提供)
$ tgtadm --lld iscsi --op new --mode target --tid 1 -T iqn.2001-04.com.example:storage.disk2.amiens.sys1.xyz
iqn号是局域网内iSCSI target的唯一标识,用来区分不同的target,所以在一个网络内,iqn号一定不能相同
要显示当前的iqn号,输入:
$ tgtadm --lld iscsi --op show --mode target
通常输出如下:
Target 1: iqn.2001-04.com.example:storage.disk2.amiens.sys1.xyz
System information:
Driver: iscsi
State: ready
I_T nexus information:
LUN information:
LUN: 0
Type: controller
SCSI ID: IET 00010000
SCSI SN: beaf10
Size: 0 MB
Online: Yes
Removable media: No
Backing store type: rdwr
Backing store path: None
Account information:
ACL information:
为target增加一个lun(/dev/sdb1)
$ tgtadm --lld iscsi --op new --mode logicalunit --tid 1 --lun 1 -b /dev/sdb1
对于家用电脑或测试系统的注意事项:
# dd if=/dev/zero of=/fs.iscsi.disk bs=1M count=512
创建了一个512M大小的文件/fs.iscsi.disk
把/fs.iscsi.disk当做一个lun加入到target中:
# tgtadm --lld iscsi --op new --mode logicalunit --tid 1 --lun 1 -b /fs.iscsi.disk
再查看lun信息:
# tgtadm --lld iscsi --op show --mode target
可以看到如下结果:
Target 1: iqn.2001-04.com.example:storage.disk2.amiens.sys1.xyz
System information:
Driver: iscsi
State: ready
I_T nexus information:
LUN information:
LUN: 0
Type: controller
SCSI ID: IET 00010000
SCSI SN: beaf10
Size: 0 MB
Online: Yes
Removable media: No
Backing store type: rdwr
Backing store path: None
LUN: 1
Type: disk
SCSI ID: IET 00010001
SCSI SN: beaf11
Size: 537 MB
Online: Yes
Removable media: No
Backing store type: rdwr
Backing store path: /fs.iscsi.disk
Account information:
ACL information:
接受iSCSI initiator的访问:
要使target接受initiator的访问,需要输入:
# tgtadm --lld iscsi --op bind --mode target --tid 1 -I ALL
这样将打开了3260端口
#netstat -tulpn | grep 3260
结果如下:
t
c
p 0 0 0.0.0.0:3260 0.0.0.0:* LISTEN 27328/tgtd
tcp6 0 0 :::3260 :::* LISTEN 27328/tgtd
当你做完这些操作,你的系统就被设置成一个iSCSI Target了。远程的客户端计算机就可以通过网络访问这台计算机上的硬盘了。你可以使用分布式的集群文件系统来安装真正的共享存储。如果需要的话,打开防火墙上的3260端口。