ISCSI/LIO

出自 ArchWiki
(重定向自 ISCSI Target)

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

安装

iSCSI 目标结构已包含在 Linux 3.1 及更高版本中。

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

强烈建议使用软件包的 free 分支版本: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
注意: 通过在 create 后附加您选择的 IQN,您可以阻止 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。

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

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

使用启动器的 IQN 而不是 iqn.2005-03.org.open-iscsi:SERIAL。通常可以在 /etc/iscsi/initiatorname.iscsi 中找到它。您必须为每个需要连接的启动器执行此操作。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
警告: 使用此设置,任何知道您的客户端(启动器)之一的 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)

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

技巧与诀窍

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

参见