Centos和 RHEL 对 iSCSI Initiator 支持非常不错,但由于 iSCSI 、 Linux 通常都是搭配应用在中、大型系统环境下,所以我们买的 iSCSI 硬体厂商都会提供驱动程式给 Linux 使用,尤以 RedHat 、 SuSE 这些 Linux 知名厂商支持度最高,直到最近 2007 年左右,现在 Linux 都渐渐已经内建 iSCSI Initiator 相关软体,来介绍如何在 Linux 实做 iSCSI Initiator 。
Initiator 主要功能是提供电脑主机连线到 Target 作磁碟存取。这个 Initiator 可使用硬件方式 Initiator 或者软件方式 Initiator ,我们下面的 Initiator ,基本都是使用软件方式 Target 与 Initiator 。 “ 软件 ” 或 “ 硬件 ” 的 iSCSI Target 与 iSCSI Initiator 就好比 RAID 有 “SoftRAID” 与 “Hardware RAID” 。
第一步安装 iSCSI Initiator for Linux
在 Centos 5 软体内就有 iSCSI Initiator .
#yum -y install iscsi-initiator-utils
或者下载open iscsi进行 make && make install
第二步:使用 iscsiadm 指令管理连线
#service iscsi start
#iscsiadm -m discovery –type sendtargets –portal 192.168.0.1
iSCSI Target 主机查找 Target Record 信息,其中 192.168.0.1 为 Target 主机 IP 或 DNS 名称。找到后会提示你发现 …
#service iscsi restart
现在就可以在你的电脑中见到新的设备了./dev/sdb… 之类 , 我们可以对他来象本地一样操作
接下来在 Linux 分区、格式化与挂载就可以用了 .
分区
#fdisk /dev/sdbX
#mkfs -j( ext3 格式)
#mkreiserfs( ReiserFS 格式)
#mount /dev/sdbX /
下次开机自动取得 iSCSI Target 磁碟
只要 iSCSI Initiator 主机曾经 sendtargets 过并且 login 相关 record, 只要在 Initiator 主机使用指令 “chkconfig iscsi on” 设定下次开机自动启动 iSCSI Initiator Daemon ,就可以办到 ‘ 下次开机自动取得 iSCSI Target 磁碟 ’ 功能。
#chkconfig iscsi on
有关iSCSI 的其它
iSCSI 在安全方面相关设定 ,iSCSI 在安全管理方面有着不错优势 , 可以使用 ” 主机 ” 和 ” 使用者 ” 来完成允许或拒绝存取的设定。
0.iSCSI Target 安装
# tar zxvf iscsi-target.xxxxx.tar.gz
# cd iscsi-target.xxxxx
# make ( 编译过程可能会有部分error ,请参考本论坛博客文章 《 iscsitarget 在 Linux2.6.32 内核上编译 若干编译错误与解决方法(备忘) 》 )
# make install
# mkdir /iscsidisk
# dd if=/dev/zero of=/iscsidisk/sharedisk1.img bs=1k count=1 seek=2000K
(以上这句是用 dd 建立了一个 2G 大小的映像文档,也就是我们的一个 iscsi 映像磁盘 )
# vim /etc/ietd.conf
找到"Target iqn" ,注意这行 Target 后的一串字符,是 iscsi 的标记
找到"Lun 0" 一行,改为
Lun 0 Path=/iscsidisk/sharedisk1.img,Type=fileio
# chkconfig iscsi-target on
# /etc/init.d/iscsi-target start
1.iSCSI Target 实战以 IP 为基础的允许或拒绝 Initiator 主机
iSCSI Enterprise Target 软体本身有内建类似 TCP Wrapper ( /etc/hosts.allow 、 /etc/hosts.deny )的 /etc/initiators.allow 、 /etc/initiators.deny ,接下来示范设定这两个档案来限制 Initiator 主机存取。
设定 /etc/initiators.allow 、 /etc/initiators.deny 这二个文件就可以控制主机了 . 安装完会默认生成
底下列出例子为“ 只允许 172.16.7.120 这台 Initiator” 并 “ 拒绝全部 ” 设定
/etc/initiators.allow 内容,最后一行允许 172.16.7.120 (其他三行被#注解)
# Some exmaples
#iqn.2001-04.com.example:storage.disk1.sys1.xyz 192.168.22.2, 192.168.3.8
#iqn.2001-04.com.example:storage.disk1.sys4.xyz [3ffe:302:11:1:211:43ff:fe31:5ae2], [3ffe:505:2:1::]/64
iqn.2001-04.com.example:storage.disk2.sys1.xyz 172.16.7.120
/etc/initiators.deny 内容,最后一行拒绝全部(其他四行被#注解)
# Some exmaples
#iqn.2001-04.com.example:storage.disk1.sys1.xyz ALL
#iqn.2001-04.com.example:storage.disk1.sys2.xyz 192.168.12.2, 192.168.3.0/24, 192.167.1.16/28
#iqn.2001-04.com.example:storage.disk1.sys4.xyz [3ffe:302:11:1:211:43ff:fe31:5ae2], [3ffe:505:2:1::]/64
iqn.2001-04.com.example:storage.disk2.sys1.xyz ALL
注意到 iqn 需与 /etc/ietd.conf 内的 iqn 相同。
2.iSCSI Target 使用者帐号密码为基础的允许或拒绝 Initiator 主机
iSCSI Target 使用帐号密码方式认证分成两阶段:
第一阶段是 Discovery 时认证所使用的帐号密码( SendTargets 用的)。
第二阶段是登入各别 Target / iqn / Lun 时所使用的帐号密码( Login 用的)。
一个 iSCSI Enterprise Target 能够在 /etc/ietd.conf 设定多个 Target 区段,分享多个 iqn / Lun 并且可以为每个 Target / iqn / Lun 设定存取的帐号密码。
由下图的上半个视窗可以看到在 Target 主机于 /etc/ietd.conf 设定两个 Target / iqn / Lun ,而下半个视窗可看到 Initiator 主机使用 iscsiadm 指令发现两个 Target 。
/etc/ietd.conf Initiator 主机设定
Discovery 时使用的帐号密码
(SendTargets 用的) IncomingUser joe secret
(独立于 Target 区段外) discovery.sendtargets.auth.username = joe
discovery.sendtargets.auth.password = secret
连接 Target / iqn / Lun 时使用的帐号密码
(Login 用的) IncomingUser joe2 secret2
(置于 Target 区段内) node.session.auth.username = joe2
node.session.auth.password = secret2
Note: joe 、 secret 、 joe2 与 secret2 都是测试用的帐号密码。
只要有改到 /etc/ietd.conf 、 /etc/iscsid.conf 别忘了各别需要使用 InitScripts ( /etc/init.d/iscsi-target 、 /etc/init.d/iscsi )重新启动相关 Daemon ( ietd 、 iscsid )。
SAN 架构与其相关技术应用非常广,比如我们可以配合集群( Cluster )与丛集群案系统( Cluster File System )的高级应用,像是 RedHat GFS 或是 Oracle OCFS2 档案系统,提供分享( Shared ) Block Level I/O 给多台主机。
注意:若未使用及设定 Cluster File System 但却使用两个 Initiator 同时存取同一个 Target Device 会导致资料毁损,请小心!