续iSCSI 在Linux下的模拟实验(二)
5、iSCSI客户端(Initiator)配置
在Linux 2.6内核中提供了iscsi驱动,iSCSI 驱动(driver)使主机拥有了通过IP网络访问存储
的能力,驱动在主机(Initiator)和服务端(Target)间使用iSCSI协议在TCP/IP网上传输SCSI
请求和响应,在构建上,iSCSI驱动与TCP/IP栈、网络驱动和网络接口卡(NIC)结合,其等同于
SCSI或光纤通道卡适配器驱动对主机总线卡(HBA)的作用。驱动采用采用模块的方式,具体模块
包括iscsi_tcp, libiscsi, libiscsi_tcp。
在具体使用时,Linux用户空间组件初始化iSCSI驱动,具体的文档和例子可在http://open-iscsi.org
网站上获取。本文即采用open-iscsi提供的iscsi-initiator-utils工具作为iSCSI用户空间组件,此软
件作为iSCSI连接的发起端,实现主机与存储基于iSCSI协议的访问。
下面具体说明initiator的安装和使用。
1)Initiator安装
iscsi-initiator-utils已经打包在各个Linux distribution中,可以在安装操作系统是选择安装或者
操作系统安装完成后,进入到安装介质目录,执行rpm -ivh iscsi-initiator-utils进行安装。如果
配置好yum repository,则执行yum install iscsi-initiator-utils进行安装。
安装完成后他,通过rpm -qi iscsi-initiator-utils查看软件的介绍:
Name : iscsi-initiator-utils Relocations: (not relocatable)
Version : 6.2.0.872 Vendor: CentOS
Release : 10.el5 Build Date: Fri 22 Jul 2011 01:19:09 PM CST
Size : 2589266 License: GPL
Signature : DSA/SHA1, Sat 13 Aug 2011 05:24:56 AM CST, Key ID a8a447dce8562897
URL : http://www.open-iscsi.org
Summary : iSCSI daemon and utility programs
Description :
The iscsi package provides the server daemon for the iSCSI protocol,
as well as the utility programs used to manage it. iSCSI is a protocol
for distributed disk access using SCSI commands sent over Internet
Protocol networks.
安装的文件包括:
/etc/iscsi
/etc/iscsi/iscsid.conf --initiator配置文件
/etc/rc.d/init.d/iscsi
/etc/rc.d/init.d/iscsid
/sbin/brcm_iscsiuio
/sbin/iscsi-iname
/sbin/iscsiadm --initiator管理工具
/sbin/iscsid
/sbin/iscsistart
/usr/include/fw_context.h
/usr/include/iscsi_list.h
/usr/include/libiscsi.h
/usr/lib/libfwparam.a
/usr/lib/libiscsi.so
/usr/lib/libiscsi.so.0
/usr/lib/python2.4/site-packages/libiscsimodule.so
/usr/share/doc/iscsi-initiator-utils-6.2.0.872
/usr/share/doc/iscsi-initiator-utils-6.2.0.872/README
/usr/share/man/man8/brcm_iscsiuio.8.gz
/usr/share/man/man8/iscsi-iname.8.gz
/usr/share/man/man8/iscsiadm.8.gz
/usr/share/man/man8/iscsid.8.gz
/usr/share/man/man8/iscsistart.8.gz
/var/lib/iscsi
/var/lib/iscsi/ifaces
/var/lib/iscsi/isns
/var/lib/iscsi/nodes
/var/lib/iscsi/send_targets
/var/lib/iscsi/slp
/var/lib/iscsi/static
/var/lock/iscsi
2)Initiator守护进程
open-iscsi包括两个守护进程iscsid和iscsi,其中iscsid是主进程,iscsi进程则主要负责
根据配置,在系统启动时进行发起端(Initiator)到服务端(target)的登录,建立发起端
与服务端的会话,使主机在启动后即可使用通过iSCSI提供服务的存储设备。
iscsid进程实现iSCSI协议的控制路径以及相关管理功能。例如守护进程(指iscsid)可配置
为在系统启动时基于持久化的iSCSI数据库内容,自动重新开始发现(discovery)目标设备。
3)Initiator配置
1> iSCSI initiator 名称设置
initiator名称用来唯一标识一个iSCSI Initiator端。保存此名称的配置文件为
/etc/iscsi/initiatorname.iscsi,命名规则可采用iqn-type格式,利用
iscsi-iname命令可产出一个名称,将此名称输入到initiatorname.iscsi配置
文件即可。
2> iSCSI Initiator配置
iSCSI Initiator的配置文件为/etc/iscsi/iscsid.conf,在iSCSI initiator
的scsid进程启动和执行iscsiadm命令时,将读取这个配置文件的内容,获取
与SCSI目标进行交互的相关信息,主要的配置内容包括:
CHAP Settings 组
本组下的各个设置项主要用来指定Initiator与target验证方式及相关信息
设置节点会话的验证模式
node.session.auth.authmethod = CHAP
CHAR(Challenge Handshake Authentication Protocol ),默认为不验证(none)
设置会话target验证initiator的CHAR用户名及对应的密码
node.session.auth.username = scott
node.session.auth.password = tiger
设置会话initiator验证target的用户名及其对应的密码
#node.session.auth.username_in = username_in
#node.session.auth.password_in = password_in
设置initiator发现target的验证模式,默认为不验证(none)
discovery.sendtargets.auth.authmethod = CHAP
设置发现会话(discovery session)target验证initiator的CHAR用户名及对应的密码
discovery.sendtargets.auth.username = scott
discovery.sendtargets.auth.password = tiger
设置发现会话(discovery session)initiator验证target的CHAR用户名及对应的密码
#discovery.sendtargets.auth.username_in = username_in
#discovery.sendtargets.auth.password_in = password_in
通过上述配置项,可以看到iSCSI的主要验证方式是CHAR,并且验证是双方向的,在本例
中,因为在目标端设置的验证帐号,所以只设定了target验证initiator所需要的用户名
和密码。
超时(Timeouts)设置组:
本组设置initiator与target端交互的时间限制。
重试(retry)设置组:
本组设置iscsid重试登录节点的次数。
会话和设备排队深度(session and device queue depth)设置组:
设置session排队命令的数量,设置设备队列深度
iSCSI设置(iSCSI settings)组:
启用或禁止R2T(Ready to Transmit)流控,启用后,initiator在发送任何数据前必
须等待 一个R2T命令,默认为禁止(no)。
node.session.iscsi.InitialR2T = Yes|no
启用或禁止立即数据(immediate data ),禁止后,initiator不随着SCSI 命令PDU发
送未请求的数据。默认为启用(Yes)
node.session.iscsi.ImmediateData = Yes|No
3)initiator相关命令介绍
open-iscsi initiator-utils提供的管理命令为iscsiadm
此命令包括discovery、node、session几种模式,分别处理不同的情况。在服务器能够使用
Target提供的存储空间前,必须在服务器上通过Initiator软件执行以下步骤:
发现目标设备-->登录目标设备-->与目标设备建立会话,下面分别说明通过各个命令进行说明。
(1)发现目标设备(Target),使用iscsiadm discovery模式,命令格式如下:
iscsiadm -m discovery [ -P printlevel ]
[ -t type -p ip:port [ -l ] ] |
[ [ -p ip:port ] [ -l | -D ] ]
命令示例:
iscsiadm -m discovery -t sendtargets -p 192.168.1.211:3260
返回信息:192.168.1.211:3260,1 iqn.2012-01.cn.nayun:test-01
192.168.1.211:3260,1 iqn.2012-01.cn.nayun:test-02
此命令查询目标门户(Portal)为192.168.1.211:3260上的目标,查找成功后,返回相应
的target ID,同时在 /var/lib/iscsi/send_targets 和 /var/lib/iscsi/nodes目录下记
录相应的门户和节点信息。/var/lib/iscsi目录下的内容采用dbm数据库方式存储,所有版
本的linux以及大多的unix都随系统带有一个基本的,但是却很高效的数据存储程序集合,
被成为dbm数据库。适合于相对比较静态的索引化数据。其实就是一个索引化的文件存储系统。
这些信息称之为initiator discoverydb,可以通过iscsiadm相关操作进行管理。
使用iscsiadm -m node命令,可以查看到发现的节点记录。
备注:iSCSI node是一个在网络上可用的SCSI设备标识符,在open-iscsi中利用术语node表示
目标(target)上的门户(portal)。一个target可以有多个portal,portal 由IP地址
和端口构成。
(2)在完成目标发现后,即可以登录到相应的节点,使用目标设备提供的存储空间。
node相关命令如下:
iscsiadm -m node [ -P printlevel ] [ [ -T targetname -p ip:port ] [ -l | -u | -R | -s] ]
[ [ -o operation ] [ -n name ] [ -v value ] [ -p ip:port ] ]
命令示例:
iscsiadm -m node -T iqn.2012-01.cn.nayun:test-01 -l
执行成功,返回如下信息:
Logging in to [iface: default, target: iqn.2012-01.cn.nayun:test-01, portal: 192.168.1.211,3260]
Login to [iface: default, target: iqn.2012-01.cn.nayun:test-01, portal: 192.168.1.211,3260] successful.
执行失败,返回如下信息:
iscsiadm: Could not login to [iface: default, target: iqn.2012-01.cn.nayun:test-02, portal: 192.168.1.211,3260].
iscsiadm: initiator reported error (24 - iSCSI login failed due to authorization failure)
iscsiadm: Could not log into all portals
出现上述提示,需要检查target与initiator的验证配置是否对应。
登录成功后。在/sys/devices/platform目录下将自动生成一个hostX目录,其中X是一个编号,每次有可能不同,在
此目录下包含相关的session和connection信息。
在服务端(target)可以查看登录情况,使用如下命令:
tgt-admin --show
显示如下信息:
Target 1: iqn.2012-01.cn.nayun:test-01
System information:
Driver: iscsi
State: ready
I_T nexus information:
I_T nexus: 1
Initiator: iqn.2012-01.cn.nayun:initiator-212
Connection: 0
IP Address: 192.168.1.212
LUN information:
LUN: 0
Type: controller
SCSI ID: IET 00010000
SCSI SN: beaf10
Size: 0 MB, Block size: 1
Online: Yes
Removable media: No
Readonly: No
Backing store type: null
Backing store path: None
Backing store flags:
LUN: 1
Type: disk
SCSI ID: IET 00010001
SCSI SN: beaf11
Size: 537 MB, Block size: 512
Online: Yes
Removable media: No
Readonly: No
Backing store type: rdwr
Backing store path: /dev/sdb
Backing store flags:
Account information:
ACL information:
192.168.1.0/24
192.168.1.210
在I_T nexus information部分显示了连接信息。
(3)登录目标节点成功后,即建立了initiator与target之间的会话(session),同时target提供的存储设备
也挂载到主机中,在/dev目录下生成一个新的设备文件类似于sdb、sdc等。查看session命令格式如下:
iscsiadm -m session [ -P printlevel [ -r sessionid | sysfsdir [ -R ] [ -u | -s ] ]
命令示例:
iscsiadm -m session -P 3
返回如下信息:
iSCSI Transport Class version 2.0-871
version 2.0-872
Target: iqn.2012-01.cn.nayun:test-01
Current Portal: 192.168.1.211:3260,1
Persistent Portal: 192.168.1.211:3260,1
**********
Interface:
**********
Iface Name: default
Iface Transport: tcp
Iface Initiatorname: iqn.2012-01.cn.nayun:initiator-212
Iface IPaddress: 192.168.1.212
Iface HWaddress: <empty>
Iface Netdev: <empty>
SID: 10
iSCSI Connection State: LOGGED IN
iSCSI Session State: LOGGED_IN
Internal iscsid Session State: NO CHANGE
************************
Negotiated iSCSI params:
************************
HeaderDigest: None
DataDigest: None
MaxRecvDataSegmentLength: 262144
MaxXmitDataSegmentLength: 8192
FirstBurstLength: 65536
MaxBurstLength: 262144
ImmediateData: Yes
InitialR2T: Yes
MaxOutstandingR2T: 1
************************
Attached SCSI devices:
************************
Host Number: 11 State: running
scsi11 Channel 00 Id 0 Lun: 0
scsi11 Channel 00 Id 0 Lun: 1
Attached scsi disk sdc State: running
备注:ISCSI会话用来标识到某个具体SCSI I_T连接的所有TCP连接。同一个会话里可能有一个或多个连接。
当initiator通过默认端口或指定端口与target建立连接时,登录过程就开始了,initiator和target互相
认证并建立安全协议。在登录阶段,ISCS Iinitiator和target会协商建立多种连接属性。
(4)使用target提供的存储盘
登录到target后,即可使用fdisk等工具像使用本地磁盘一样对磁盘进行分区,并mount到相关目录下进行
文件的存取。
(5)注销登录
使用一下命令注销登录:
iscsiadm -m node -T iqn.2012-01.cn.nayun:test-01 -p 192.168.1.211 -u
Logging out of session [sid: 1, target: iqn.2012-01.cn.nayun:test-01, portal: 192.168.1.211,3260]
Logout of [sid: 1, target: iqn.2012-01.cn.nayun:test-01, portal: 192.168.1.211,3260] successful.
(6)其他操作
删除一个目标(/var/lib/iscsi/nodes目录下)
iscsiadm -m node -o delete -name iqn.2012-01.cn.nayun:test-01
删除一个目标(/var/lib/iscsi/send_targets目录下)
iscsiadm --mode discovery -o delete -p 192.168.1.211:3260
查看某个sendtargets portal记录
iscsiadm -m discoverydb -p 192.168.1.211:3260 -t st -o show
# BEGIN RECORD 2.0-872
discovery.startup = manual
discovery.type = sendtargets
discovery.sendtargets.address = 192.168.1.211
discovery.sendtargets.port = 3260
discovery.sendtargets.auth.authmethod = CHAP
discovery.sendtargets.auth.username = scott
discovery.sendtargets.auth.password = ********
discovery.sendtargets.auth.username_in = <empty>
discovery.sendtargets.auth.password_in = <empty>
discovery.sendtargets.timeo.login_timeout = 15
discovery.sendtargets.use_discoveryd = No
discovery.sendtargets.discoveryd_poll_inval = 30
discovery.sendtargets.reopen_max = 5
discovery.sendtargets.timeo.auth_timeout = 45
discovery.sendtargets.timeo.active_timeout = 30
discovery.sendtargets.iscsi.MaxRecvDataSegmentLength = 32768