跳转至内容

ISCSI/LIO

来自 ArchWiki
(重定向自 ISCSI Target)

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

安装

iSCSI 目标 fabric 自 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) 和一个目标 portal group (TPG):

...> cd /iscsi
/iscsi> create
注意 通过在 create 后面追加您选择的 IQN,可以阻止 targetcli 自动创建 IQN。

为了告知 LIO 您的块设备应该作为目标的 backstore,请执行以下命令:

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

然后,您需要创建一个 portal,让一个守护进程监听传入连接:

.../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,您可以列出当前打开的会话。

参见