Open-iSCSI
本文讲述如何通过 Open-iSCSI initiator 访问 iSCSI 目标。
安装[编辑 | 编辑源代码]
安装 open-iscsi包 包。
概览[编辑 | 编辑源代码]
下图显示各组件是如何协同工作的。更详细的版本参见: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:
配置持久化由一套文件及目录树实现,一共包括在两个目录中:
/etc/iscsi/
变更为 /var/lib/iscsi/
。这一迁移过程不是自动的,需要先断开所有目标并停止服务,手动迁移后再重新连接。另外,需检查文件系统权限。
/etc/iscsi/
应只包含 initiatorname.iscsi
和 iscsid.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 块设备包含一个分区表,则不能在线修改卷大小。这种情况下必须首先卸载文件系统,然后再调整相关分区的大小。
- 重新扫描当前会话中的活动节点。
# iscsiadm -m node -R
- 在多路径环境中,也必须重新扫描多路径下的卷信息。
# multipathd -k"resize map sdx"
- 完成后再调整文件系统大小。
# 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
一项。
排障[编辑 | 编辑源代码]
客户端 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