Open-iSCSI

来自 Arch Linux 中文维基

本文讲述如何通过 Open-iSCSI initiator 访问 iSCSI 目标。

注意: iSCSI 是加密的,不建议通过不安全的信道进行数据传输。

安装[编辑 | 编辑源代码]

安装 open-iscsi 包。

注意: 旧版的 Linux-iSCSI initiator 已经于2005年4月合并进 Open-iSCSI 。不要和 linux-iscsi.org 搞混了,这个是 LIO 目标的网站。

概览[编辑 | 编辑源代码]

下图显示各组件是如何协同工作的。更详细的版本参见:Open-iSCSI 模块(已过时)

 +--------------------------------------------------------+             
 | Targets & Sessions configuration files and directories |             
 +--------------------------------------------------------+             
                                                                       
 +--------------------------+     +----------------------------------+ 
 | iscsiadm                 |     | iscsid: iSCSI daemon             | 
 |                          |     |                                  | 
 |  * Command line tool     |<--->|  * Implements Session management | 
 |  * Manages database of   |     |  * Communicates with iscsiadm    | 
 |    sessions and targets  |     |    and iscsi kernel modules      | 
 +--------------------------+     +---------------+------------------+ 
                                                  |                    
 User space                                       |                    
- - - - - - - - - - - - - - - - - - - - - - - - - | - - - - - - - - - -
 Kernel                                           v                    
         +-----------------------------------------------------------+ 
         | kernel modules: scsi_transport_iscsi, iscsi_tcp, libiscsi | 
         +-----------------------------------------------------------+ 

来自 Open-iSCSI README

配置持久化由一套文件及目录树实现,一共包括在两个目录中:

注意:open-iscsi 2.1.9-2 开始,数据库主目录由 /etc/iscsi/ 变更为 /var/lib/iscsi/。这一迁移过程不是自动的,需要先断开所有目标并停止服务,手动迁移后再重新连接。另外,需检查文件系统权限。

/etc/iscsi/ 应只包含 initiatorname.iscsiiscsid.conf

  • 发现目录 /var/lib/iscsi/send_targets:包含由目标地址命名的目录
  • 节点目录 /var/lib/iscsi/nodes:包含由特定设备的 ION(ISCSI Unique Name)命名的目录

配置[编辑 | 编辑源代码]

启动服务[编辑 | 编辑源代码]

iscsid 由一个 systemd 单元来管理。

启动 iscsid.service 或是 iscsid.socket

ISCSI Qualified Name (IQN)[编辑 | 编辑源代码]

IQN 被用于识别每个设备。

Open-ISCSI 将它的 initiator IQN 存放于 /etc/iscsi/initiatorname.iscsi 文件中,格式为 InitiatorName=iqn

在安装过程中会生成初始 IQN,如果你想生成新的 IQN,可以使用 iscsi-iname 工具来输出新的 IQN。

认证[编辑 | 编辑源代码]

如果 ISCSI 目标要求 initiator 进行认证,则需要更新配置文件(/etc/iscsi/iscsid.conf)的内容。

下列参数用于验证从 initiator 到目标的登录会话:

node.session.auth.authmethod = CHAP
node.session.auth.username = initiators_username
node.session.auth.password = initiators_password

如果目标启用了双向验证,则需要额外修改下列参数:

node.session.auth.username_in = targets_username
node.session.auth.password_in = targets_password

如果目标需要验证才能获取节点清单(少数情况下出现),则需要额外修改下列参数:

discovery.sendtargets.auth.authmethod = CHAP
discovery.sendtargets.auth.username = initiators_username
discovery.sendtargets.auth.password = initiators_password

如果目标启用了双向验证,则需要额外修改下列参数:

discovery.sendtargets.auth.username_in = targets_username
discovery.sendtargets.auth.password_in = targets_password
警告: 不能出现两个一样的密码,意味着上述配置中需要四个不同的密码。
注意: 验证数据存放在按节点区分的配置文件中。要更新这些数据,可以打开 /var/lib/iscsi/nodes/iqn.node-name/node-ip-address,port,1/default 并按需添加或编辑选项。[1]

发现目标[编辑 | 编辑源代码]

向目标请求节点清单:

# iscsiadm --mode discovery --portal target_ip --type sendtargets

成功后,节点和目标的信息会保存到你的 initiator 中。

手动添加目标[编辑 | 编辑源代码]

# iscsiadm -m node --target targetname --portal target_ip -o new

可以在服务器不允许发现时使用该方法。

删除废旧目标[编辑 | 编辑源代码]

# iscsiadm -m discovery -p target_ip -o delete

登录到有效的目标[编辑 | 编辑源代码]

# iscsiadm -m node -L all

或者,登录到指定目标

# iscsiadm -m node --targetname=targetname --login

登出:

# iscsiadm -m node -U all

信息[编辑 | 编辑源代码]

对于运行中的会话

# iscsiadm -m session -P 3

上面命令输出的最后一行会显示连接到的设备名,比如

Attached scsi disk sdd State: running

对于已知节点

# iscsiadm -m node

在线修改卷大小[编辑 | 编辑源代码]

如果 iscsi 块设备包含一个分区表,则不能在线修改卷大小。这种情况下必须首先卸载文件系统,然后再调整相关分区的大小。

  1. 重新扫描当前会话中的活动节点。
    # iscsiadm -m node -R
  2. 在多路径环境中,也必须重新扫描多路径下的卷信息。
    # multipathd -k"resize map sdx"
  3. 完成后再调整文件系统大小。
    # resize2fs /dev/sdx

提示[编辑 | 编辑源代码]

检查已连接的 iSCSI 设备[编辑 | 编辑源代码]

可以用下列命令检查已连接的 iSCSI 设备在 /dev/ 设备树中的位置:

$ ls -l /dev/disk/by-path/ip-*

启动时登录到目标[编辑 | 编辑源代码]

要在启动时登录到目标,需启用 iscsi.service 服务,并确保节点的配置(/var/lib/iscsi/nodes/iqn.node-name/node-ip-address,port)中包含 node.startup = automatic 一项。

注意: systemd 单元名称为 iscsi.service,而不是 iscsid.service[2]

排障[编辑 | 编辑源代码]

客户端 IQN[编辑 | 编辑源代码]

你可能需要在服务端(target)的账户配置中添加客户端的 IQN(位于 /etc/iscsi/initiatorname.iscsi)。

调试 iSCSI daemon[编辑 | 编辑源代码]

可以使用如下命令以调试模式运行 iSCSI daemon(确保已停止 iscsid.service):

# iscsid -d 8 -c /etc/iscsi/iscsid.conf -i /etc/iscsi/initiatorname.iscsi -f