作业环境
在VirtualBox4.0 虚拟机下操作
服务器端sqinga:CentOS 5.5-i386
客户端sqingb:CentOS 5.5-i386
一、关于iSCSI(资料)
iSCSI是internet Small Computer System Interface的缩写,又称为IP-SAN,是一种基于因特网及SCSI-3协议下的存储技术,其目的是为了用IP协议将存储设备连接在一起。通过在IP网上传送SCSI命令和数据,iSCSI推动了数据在网络之间的传递,同时也促进了数据的远距离管理。由于其出色的数据传输能力,iSCSI协议被认为是促进存储区域网(SAN)市场快速发展的关键因素之一。因为IP网络的广泛应用, iSCSI能够在LAN、WAN甚至Internet上进行数据传送,使得数据的存储不再受地域的限制。
iSCSI技术的核心是在TCP/IP网络上传输SCSI协议,即使用TCP/IP报文和iSCSI报文封装SCSI报文,使得SCSI命令和数据可以在普通以太网络上进行传输,如下图所示。
iSCSI的工作过程:当iSCSI主机应用程序发出数据读写请求后,操作系统会生成一个相应的SCSI命令,该SCSI命令在iSCSI initiator层被封装成ISCSI消息包并通过TCP/IP传送到设备侧,设备侧的iSCSI target层会解开iSCSI消息包,得到SCSI命令的内容,然后传送给SCSI设备执行;设备执行SCSI命令后的响应,在经过设备侧iSCSI target层时被封装成ISCSI响应PDU,通过TCP/IP网络传送给主机的ISCSI initiator层,iSCSI initiator会从ISCSI响应PDU里解析出SCSI响应并传送给操作系统,操作系统再响应给应用程序。
二、服务器端SCSI target的配置及使用
Linux target framework(tgt)是为创建、维护SCSI target 驱动(包括iSCSI、FC、SRP等)提供支持。它的关键目标是简洁地集成到scsi-mid层,并且实现大部分应用层空间。
安装scsi-target-utils
[root@sqinga ~]# yum install scsi-target-utils
启动tgtd服务
[root@sqinga ~]# /etc/init.d/tgtd start
[root@sqinga ~]# /etc/init.d/tgtd status
tgtd (pid 1996 1995) is running...
将tgtd设为开机启动
[root@sqinga ~]# chkconfig tgtd on
创建一个id为1的target,其名为:iqn.2010-05.sqing:shuqing
(iSCSI节点名称有两种格式,即 iqn-type 格式和 eui-type 格式,Linux常用的是iqn-type的格式。一般iSCSI Target命名采用“iqn.yyyy-mm.<reversed domain name>: identifier 识别代号”的格式。iqn号是局域网内iSCSI target的唯一标识,用来区分不同的target,所以在一个网络内,iqn号一定不能相同)
[root@sqinga ~]# tgtadm --lld iscsi --op new --mode target --tid 1 -T iqn.2010-05.sqing:shuqing
为上一步创建的目标增加逻辑分卷,添加一个lun( logical unit)号为1的逻辑单元,该逻辑单元使用逻辑分区LogVol2
[root@sqinga ~]# tgtadm --lld iscsi --op new --mode logicalunit --tid 1 --lun 1 -b /dev/VolGroup00/LogVol02
使target接受initiator的访问(这里设为允许所有的initiator访问)
[root@sqinga ~]# tgtadm --lld iscsi --op bind --mode target --tid 1 -I ALL
查看端口3260使用情况
[root@sqinga ~]# netstat -tulpn | grep 3260
tcp 0 0 0.0.0.0:3260 0.0.0.0:* LISTEN 2980/tgtd
tcp 0 0 :::3260 :::* LISTEN 2980/tgtd
查看lun信息
[root@sqinga ~]# tgtadm --lld iscsi --op show --mode target
Target 1: iqn.2010-05.sqing:shuqing
System information:
Driver: iscsi
State: ready
I_T nexus information:
I_T nexus: 2
Initiator: iqn.1994-05.com.redhat:d2c9f41e816a
Connection: 0
IP Address: 10.8.0.116
LUN information:
LUN: 0
Type: controller
SCSI ID: IET 00010000
SCSI SN: beaf10
Size: 0 MB
Online: Yes
Removable media: No
Backing store type: null
Backing store path: None
Backing store flags:
LUN: 1
Type: disk
SCSI ID: IET 00010001
SCSI SN: beaf11
Size: 6442 MB
Online: Yes
Removable media: No
Backing store type: rdwr
Backing store path: /dev/VolGroup00/LogVol02
Backing store flags:
Account information:
ACL information:
ALL
至此,系统的逻辑分区/dev/VolGroup00/LogVol02已被设置成一个iSCSI Target,远程的客户端计算机可以通过网络访问对此进行访问了。
要使以上设置,在系统重启时生效,需写进rc.local文件
[root@sqinga ~]# cat /etc/rc.local
touch /var/lock/subsys/local
tgtadm --lld iscsi --op new --mode target --tid 1 -T iqn.2010-05.sqing:shuqing
tgtadm --lld iscsi --op new --mode logicalunit --tid 1 --lun 1 -b /dev/VolGroup00/LogVol02
tgtadm --lld iscsi --op bind --mode target --tid 1 -I ALL
三、客户端iSCSI-initiator的配置及使用
安装iscsi-initiator-utils
[root@sqingb ~]# yum install iscsi-initiator-utils
用chkconfig检查iscsi和iscsid服务在运行级别3和5中随系统的启动而自动启动
[root@sqingb ~]# chkconfig --list |grep iscsi
iscsi 0:off 1:off 2:off 3:on 4:on 5:on 6:off
iscsid 0:off 1:off 2:off 3:on 4:on 5:on 6:off
如果iscsid和iscsi没有随系统的启动而启动,则用chkconfig设置这两个服务在系统运行级别为3和5时随系统启动而启动
[root@sqingb ~]# chkconfig iscsi --level 35 on
[root@sqingb ~]# chkconfig iscsid --level 35 on
启动iscsi服务
[root@sqingb ~]# /etc/init.d/iscsi start
[root@sqingb ~]# /etc/init.d/iscsi status
iscsid (pid 1508) is running...
[root@sqingb ~]# /etc/init.d/iscsid status
iscsid (pid 1508) is running...
查看target上的逻辑卷(RHEL 5上当前的iSCSI Initiator版本只支持sendtargets 的发现方式,不支持SLP和iSNS)
[root@sqingb ~]# iscsiadm -m discovery -t sendtargets -p 10.8.110.29
10.8.110.1:3260, 1 iqn.2010-05.sqing:shuqing
使用iscsiadmin登陆target:
[root@sqingb ~]# iscsiadm -m node -T iqn.2010-05.sqing:shuqing -p 10.8.110.1 --login
Logging in to [iface: default, target: iqn.2010-05.sqing:shuqing, portal: 10.8.110.1,3260]
Vendor:IET Model:Controller Rev:0001
Type: Direct-Access ANSI SCSI revision:05
scsi 2:0:0:0: Attached scsi generic sg1 type 12
Vendor:IET Model:Controller Rev:0001
Type: Direct-Access ANSI SCSI revision:05
……
Login to [iface: default, target: iqn.2010-05.sqing:shuqing, portal: 10.8.110.1,3260] successful
注销target和删除target的命令分别为:
[root@sqingb ~]# iscsiadm -m node --T iqn.2010-05.sqing:shuqing -p 10.8.110.1 --logout
[root@sqingb ~]# iscsiadm -m node –o delete --T iqn.2010-05.sqing:shuqing
使用fdisk检验被识别的设备名:
[root@sqingb ~]# fdisk -l
Disk /dev/sda: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 104391 83 Linux
/dev/sda2 14 1044 8281507+ 8e Linux LVM
Disk /dev/sdb: 2013MB, 2013265920 bytes
62 heads, 62 sectors/track, 1022 cylinders
Units = cylinders of 3844 * 512 = 1968128 bytes
Disk /dev/sdb doesn't contain a valid partition table
使用fdisk /dev/sdb命令为sdb建立一个分区sdb1,结果如下:
[root@sqingb ~]# fdisk -l
Disk /dev/sda: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 104391 83 Linux
/dev/sda2 14 1044 8281507+ 8e Linux LVM
Disk /dev/sdb: 2013MB, 2013265920 bytes
62 heads, 62 sectors/track, 1022 cylinders
Units = cylinders of 3844 * 512 = 1968128 bytes
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sdb1 1 1022 1964253 83 Linux
格式化分区
[root@sqingb ~]# mkfs.ext3 /dev/sdb1
mke2fs 1.39 (29-May-2006))
Filesystem label=
OS type:Linux
Block size=4096(log=2)
Fragment size=4096 blocks
245760 inodes, 491063 blocks
24553 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=503316480
15 block groups
32768 blocks per group, 32768 fragments per group
16384 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 22937 294912
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 20 mounts or 180 days,whichever comes first. Use tune2fs –c or –I to override.
设定加载点
[root@sqingb ~]# mdir /home/sna
[root@sqingb ~]# mount /dev/sdb1 /home/sna
用df查看文件系统是否已挂载成功
[root@sqingb ~]# df –Th
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
ext3 3.9G 2.4G 1.3G 66% /
/dev/sda1 ext3 99M 12M 82M 13% /boot
tmpfs tmpfs 506M 0 506M 0% /dev/shm
/dev/sdb1 ext3 1.9G 35M 1.8G 2% /home/sna
至此,sqingnb已经连接到 sqinga的虚拟iSCSI 储存设备, 并且如同本机上面的一个 SCSI 硬盘一样。 使用的方式也几乎一样。
用tune2fs查看文件系统的UUID
[root@sqingb ~]# tune2fs –l /dev/sdb1
tune2fs 1.39 (29-May-2006)
Filesystem volume name: <none>
Last mounted on: <not available>
Filesystem UUID: b469ef1e-2f2f-450e-82af-0634d0021735
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal resize_inode dir_index filetype needs_recovery sparse_super large_file
……
如果要将其设置为自动挂载,需将其UUID加入到fstab文件中(据资料分析,Linux系统重启后,磁盘设备的名称可能会发生变化,从而引起文件系统不能挂载上来或者不能正确挂载,使用UUID的方式进行挂载可以解决这个问题)。实际操作中,手动重启后,系统要十多分钟才能成功登录,需要耐心等待(一些画面会停很久,开始时以为是重启死机了呢),并且在登录的过程中,系统会自动再启动一次。另一种说法,挂载选项类型为“_netdev”,尝试了下,也是一样的重启过程。
[root@sqingb ~]# cat /etc/fstab
/dev/VolGroup00/LogVol00 / ext3 defaults 1 1
LABEL=/boot /boot ext3 defaults 1 2
tmpfs /dev/shm tmpfs defaults 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
/dev/VolGroup00/LogVol01 swap swap defaults 0 0
UUID= b469ef1e-2f2f-450e-82af-0634d0021735 /home/sna ext3 defaults 0 0
四、相关目录、文件资料介绍
Discovery (/var/lib/iscsi/send_targets):在/var/lib/iscsi/send_targets目录下包含iSCSI portals的配置信息,每个portal对应一个文件,文件名为“iSCSI portal IP,端口号”(例如“10.8.110.1,3260”)。
Node (/var/lib/iscsi/nodes):在/var/lib/iscsi/nodes目录下,生成一个或多个以iSCSI存储服务器上的Target名命名的文件夹(例如:iqn.2010-05.sqing:shuqing),在该文件夹下有一个文件名为“iSCSI portal IP,端口号” (例如“10.8.110.1,3260”)的配置参数文件,该文件中是initiator登录target时要使用的参数,这些参数的设置是从/etc/iscsi/iscsi.conf中的参数设置继承而来的,可以通过iscsiadm对某一个参数文件进行更改(需要先注销到target的登录)。
tgtadm是用来监控、修改Linux SCSI target 的工具,包括target设置、卷设置,等等。这个工具允许提供为装有SCSI initiator的其它操作系统提供块级(block-level)的SCSI存储。这个功能最初被部署为Linux iSCSI target,通过网络向装有iSCSI initiator的系统提供存储服务。
iscsiadm是用来管理(更新、删除、插入、查询)iSCSI配置数据库文件的命令行工具,用户能够用它对iSCSI nodes、sessions、connections和discovery records进行一系列的操作。
iscsi-initiator-utils 将iscsid、iscsiadm安装到/sbin目录下,还将把默认的配置文件安装到/etc/iscsi目录下:
/etc/iscsi/iscsid.conf 所有刚发起的iSCSI session默认都将使用这个文件中的参数设定。
/etc/iscsi/initiatorname.iscsi 软件iSCSI initiator的intiator名称配置文件。