ISCSI/LIO

出自 ArchWiki

LIO (LinuxIO) 是内核中的 iSCSI 目标 (自 Linux 2.6.38 起)。

安装

iSCSI 目标架构自 Linux 3.1 起包含在内核中。

重要的内核模块是 target_core_modiscsi_target_mod,它们应该在内核中并自动加载。

强烈建议使用软件包的 free branch 版本:targetcli-fbAURpython-rtslib-fbAURpython-configshell-fb

启动/启用 target.service,包含在 python-rtslib-fbAUR 中,以加载必要的模块,挂载 configfs 并加载之前保存的 iSCSI 目标配置。

targetcli

root 身份运行 targetcli status 以查看有关正在运行的配置的一些信息。

您可以使用 targetcli 创建完整的配置,请参阅 targetcli(8)

配置 shell 会自动为您创建大多数名称和编号,但您也可以提供自己的设置。在 shell 中的任何时候,您都可以键入 help 以查看您可以在此处发出的命令。

提示: 在此 shell 中,您可以使用 Tab 补全,并键入 cd 以查看和选择路径。

启动目标 (见上文) 后,您可以使用以下命令进入配置 shell:

# targetcli

在此 shell 中,您包含一个块设备 (此处: /dev/disk/by-id/md-name-nas:iscsi) 以用于:

/> cd backstores/block
/backstores/block> create md_block0 /dev/disk/by-id/md-name-nas:iscsi
注意: 您可以使用任何块设备,包括 RAID 和 LVM 设备。当您使用 fileio 而不是 block 时,也可以使用文件。

然后,您可以使用以下命令创建 iSCSI Qualified Name (IQN) 和目标门户组 (TPG):

...> cd /iscsi
/iscsi> create
注意: 通过将您选择的 IQN 附加到 create,您可以阻止 targetcli 自动创建 IQN。

为了告诉 LIO 您的块设备应该用作目标的后端存储,您发出:

注意: 请记住,您可以键入 cd 以选择您的 <iqn>/tpg1 的路径
.../tpg1> cd luns
.../tpg1/luns> create /backstores/block/md_block0

然后,您需要创建一个门户,使守护程序监听传入连接

.../luns/lun0> cd ../../portals
.../portals> create

Targetcli 将告诉您 LIO 正在监听传入连接的 IP 和端口 (默认为 0.0.0.0 (全部))。您至少需要客户端的 IP。端口应该是标准端口 3260。

为了使客户端/initiator 连接,您需要在目标配置中包含 initiator 的 IQN

...> cd ../../acls
.../acls> create iqn.2005-03.org.open-iscsi:SERIAL

您使用 initiator 的 IQN 而不是 iqn.2005-03.org.open-iscsi:SERIAL。它通常可以在 /etc/iscsi/initiatorname.iscsi 中找到。您必须为每个需要连接的 initiator 执行此操作。Targetcli 将自动将创建的 LUN 映射到新创建的 ACL。

注意: 您可以更改映射的 LUN 以及访问应该是 rw 还是 ro。请参阅 targetcli shell 中此处的 help create

当一切正常工作时,您在 targetcli 中要做的最后一件事是使用以下命令保存配置:

...> cd /
/> saveconfig

这会将配置保存在 /etc/target/saveconfig.json 中。现在您可以安全地启动和停止 target.service 而不会丢失您的配置。

提示: 您可以将文件名作为参数传递给 saveconfig,也可以使用 clearconfig 清除配置。

身份验证

默认情况下,为您的目标启用基于 CHAP 的身份验证。您可以设置密码或禁用此身份验证。

禁用身份验证

在 targetcli 中导航到您的目标 (即 /iscsi/iqn.../tpg1) 并

.../tpg1> set attribute authentication=0
警告: 使用此设置,任何知道您的客户端 (initiator) 之一的 iqn 的人都可以访问目标。这仅适用于测试或家庭用途。

设置凭据

导航到目标的特定 ACL (即 /iscsi/iqn.../tpg1/acls/iqn.../) 并

...> get auth

将显示您当前的身份验证凭据。

...> set auth userid=<username in target>
...> set auth password=<password in target>
...> set auth mutual_userid=<username in initiator>  (optional)
...> set auth mutual_password=<password in initiator>  (optional)

前两个字段是目标的用户名和密码。Initiator 将使用它登录到目标。最后两个字段 (以 "mutual_" 为前缀) 是 initiator 的用户名和密码 (请注意,所有 initiator 将具有相同的用户名和密码)。这两个是可选参数,它确保 initiator 只接受来自允许目标的连接。

技巧与窍门

  • 使用 targetcli sessions,您可以列出当前打开的会话。

参见