iscsi是internet small computer system interface的缩写,它使得scsi协议可以承载于tcp/ip上,也就是说有ip的地方,就可以用它。iscsi的发现降低了网络存储的存本,它比FC(fibre channel)存储的成本要便宜很多,但是速度没有FC快。iscsi也称为IP SAN(基于IP的存储域网络)。
iscsi协议运行的时候分两端,发起通信的一端成为Initiators,被连接端称为Targets.通常Initators为主机设备,Target为存储设备。iscsi用iqn (iSCSI qualified name)来表示target和initator.iqn格式是iqn.2001-04.org.gentoo:iSCSI.test.disk1,格式是这样定义的,iqn是类型,通常就是iqn,2001-04就是target分配的年月,org.gentoo是反转域名,ISCSI.test.disk1是唯一标识符号,可以是你的target的主机名或者磁盘。运行ISCSI需要你的网卡支持Jumbo Frames.现在一般的G网卡都支持。
这里我不讲怎么在Target上创建LUN,我后面提到的参考文献会涉及到LUN创建的说明。
首先配置Target端:
1,内核选项必须激活以下选项:
Cryptographic options --->
[*] Cryptographic API
<*> CRC32c CRC algorithm
如果CRC编译成模块,则必须把它加到开机自动加载选项里面。
#echo "crc32c" >> /etc/modules.autoload.d/kernel-2.6
编译完内核重启之后,安装ISCI-target.
#emerge iscsitarget
也把这个模块加到开机自动加载里面。
#echo "iscsi_trgt" >> /etc/modules.autoload.d/kernel-2.6
配置iSCSI-target,可以编辑/etc/ietd.conf文件,具体的可以参考man ietd.conf.
我这里的配置文件如下:
Target iqn.2011-03.org.gentoo:iSCSI.test.disk1
Lun 0 Path=/home/gentoo/test.img,Type=fileio
MaxConnections 1
我这里用的Type是fileinfo,这样的话你的target可以是磁盘,块设备甚至可以是普通的文件,因为我手头没有多余的硬盘来测试,所以我就在target端创建了一个文件。
#dd if=/dev/zero of=/home/gentoo/test.img bs=2M count=1000
配置网络支持Jumbo Frames.
#ifconfig eth0 mut 9000
或者在/etc/conf.d/net里面加入 mut_eth0="9000"
开启target服务。
#/etc/init.d/ietd start
2,配置initiator
确保内核选项包括以下内容:
Device Drivers --->
SCSI device support --->
[*] SCSI device support
<*> SCSI disk support
SCSI Transports --->
{M} iSCSI Transports Attributes
[*] SCSI low-level drivers --->
<M> iSCSI Initiator over TCP/IP
Cryptographic options --->
[*] Cryptographic API
<*> CRC32c CRC algorithm
把niscsi_tcp加到自动加载模块里面
#echo -e "libiscsi/nscsi_transport_iscsi/niscsi_tcp" >> /etc/modules.autoload.d/kernel-2.6
安装initiator:
#emerge open-iscsi
配置你的initiator.
#vim /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.2011-04.org.gentoo:initiator-test
InitiatorAlias=initiator-test
开启iscsid:
#/etc/init.d/iscid start
在接到target之前,必须告诉iscsid用什么接口,接口是用MAC地址来表示的。假设你的initiator的eth0的MAC是AA:BB:CC:DD:EE:FF,用以下命令来增加接口(interface).
#iscsiadm -m iface -I iface0 --op=new
#iscsiadm -m iface -I iface0 --op=update -n iface.hwaddress -v AA:BB:CC:DD:EE:FF
#ifconfig eth0 mtu 9000
下面就开始寻找IP是192.168.1.100上的targets.
#iscsiadm -m discovery -t st -p 192.168.1.100 -P 1
这样会得到你在target上配置的target名称:iqn.2011-03.org.gentoo:iSCSI.test.disk1
.
看initiator端加载target:
#iscsiadm -m node -T iqn.2011-03.org.gentoo:iSCSI.test.disk1 -l
用fdisk -l查看你的磁盘,你会发现多了个2G的磁盘。我的是多了个2G的/dev/sdd
这样你就可以按照本地磁盘那样来操作这个软成的磁盘了。
卸载target:
#iscsiadm -m node -T iqn.2011-03.org.gentoo:iSCSI.test.disk1 -u
参考文献:
1,ISCSI WIKI。 http://en.gentoo-wiki.com/wiki/ISCSI.
2, 大话存储。张东著。