ISCSI/LIO
LIO (LinuxIO) 是内核中的 iSCSI 目标(自 Linux 2.6.38 起)。
安装
iSCSI 目标 fabric 自 Linux 3.1 起已包含在内。
重要的内核模块是 target_core_mod 和 iscsi_target_mod,它们应已包含在内核中并自动加载。
强烈建议使用软件包的 free branch 版本:targetcli-fbAUR、python-rtslib-fbAUR 和 python-configshell-fb。
启动/启用 target.service,该服务包含在 python-rtslib-fbAUR 中,用于加载必要的模块、挂载 configfs 并加载先前保存的 iSCSI 目标配置。
targetcli
以 root 用户身份运行 targetcli status,以查看有关正在运行的配置的一些信息。
您可以使用 targetcli 创建整个配置,请参阅 targetcli(8)。
配置 shell 会自动为您创建大多数名称和数字,但您也可以提供自己的设置。在 shell 的任何位置,您可以输入 help 来查看您可以执行的命令。
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
然后,您需要创建一个 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。
help create。在 targetcli 中,当一切正常工作时,您需要做的最后一件事就是保存配置:
...> cd / /> saveconfig
这将把配置保存在 /etc/target/saveconfig.json 中。您现在可以安全地启动和停止 target.service 而不会丢失配置。
saveconfig 一个文件名作为参数,也可以使用 clearconfig 清除配置。身份认证
默认情况下,您的目标会启用 CHAP 身份验证。您可以设置密码或禁用此身份验证。
禁用认证
将 targetcli 导航到您的目标(例如 /iscsi/iqn.../tpg1)并执行:
.../tpg1> set attribute authentication=0
设置凭据
导航到您目标中的特定 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,您可以列出当前打开的会话。