Open-iSCSI

出自 ArchWiki

本文介绍如何使用 iSCSI 目标以及 Open-iSCSI 发起程序。

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

安装

安装 open-iscsi 软件包。

注意: 较旧的发起程序 Linux-iSCSI 已于 2005 年 4 月与 Open-iSCSI 合并。这不应与 LIO 目标 的网站 linux-iscsi.org 混淆。

概述

下图显示了组件如何协同工作。更详细的版本可以在这里找到: 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,其中包含以特定设备的 IQN (ISCSI Unique Name) 命名的目录。

配置

启动服务

iscsid 由 systemd 单元管理。

启动 iscsid.serviceiscsid.socket

ISCSI Qualified Name (IQN)

IQN 用于标识每个设备。

Open-ISCSI 将其发起程序 IQN 存储在 /etc/iscsi/initiatorname.iscsi 文件中,格式为 InitiatorName=iqn

在安装期间将生成初始 IQN。如果您希望生成新的 IQN,可以使用 iscsi-iname 实用程序,它会打印出新的 IQN。

认证

如果 ISCSI 目标需要发起程序进行身份验证,则可能需要更新配置文件 /etc/iscsi/iscsid.conf

以下参数用于验证发起程序到目标的登录会话

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

成功后,有关节点和目标的信息将保存在您的发起程序上。

手动添加目标

# 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. 如果您使用 multipath,您还必须重新扫描 multipath 卷信息。
    # multipathd -k"resize map sdx"
  3. 最后调整文件系统大小。
    # resize2fs /dev/sdx

技巧与窍门

检查已连接的 iSCSI 设备

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

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

在启动时登录到目标

要在启动期间登录到目标,启用 iscsi.service 并确保节点在其配置中具有 node.startup = automatic (/var/lib/iscsi/nodes/iqn.node-name/node-ip-address,port)。

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

故障排除

客户端 IQN

在服务器(目标)上,您可能需要在帐户配置中包含来自 /etc/iscsi/initiatorname.iscsi 的客户端 IQN。

调试 iSCSI 守护进程

要在调试模式下运行 iSCSI 守护进程(确保您之前已停止 iscsid.service

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