跳转至内容

ISCSI/LIO

来自 ArchWiki

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

iqn.2005-03.org.open-iscsi:SERIAL 替换为 initiator 的 IQN。它通常可以在 /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,您可以列出当前打开的会话。

参见