ISCSI (简体中文)/LIO (简体中文)
使用 iSCSI 可以通过 IP 网络访问磁盘。
接受来访的实体称为 目标(target),发起访问的实体称为 发起者(initiator)。有多种设置目标的方式:
- SCSI Target Framework (STGT/TGT) 是 Linux 2.6.38 之前的标准。
- LIO target 是现在的标准。
- iSCSI Enterprise Target (IET) 是旧版本的实现,SCSI Target Subsystem (SCST) 是 IET 的升级版本,曾是 LIO 最终入选内核之前的候选方案之一。
启用 LIO Target
LIO target 包含在2.6.38及以后版本的内核中。但从3.1版才开始包含 iSCSI target fabric。
关键的内核模块是 target_core_mod 和 iscsi_target_mod,它们应该已内置并自动加载。
强烈建议使用 LIO 的免费分支版本:targetcli-fbAUR,python-rtslib-fbAUR 和 python-configshell-fbAUR。原生包 targetcliAUR[损坏的链接:package not found] 虽也有效,但其使用另外的方法保存配置,该方法使用不再推荐的 lio-utils 及依赖 epydoc。
如果使用免费分支版本,则 python-rtslib-fbAUR 中包含一个 systemd target.service
文件。如果直接使用原生的 targetcli 或 lio-utils,则在 lio-utilsAUR[损坏的链接:package not found] 中包含一个 /etc/rc.d/target
文件。
用下列命令启动 LIO target:
# systemctl start target
这样会加载必要的模块,挂载 configfs 并加载之前保存的 iscsi target 配置。
用下列命令可以显示运行中的配置信息(仅免费分支版有效):
# targetcli status
若要 lio target 随系统引导时启动,可用下列命令:
# systemctl enable target
可以用 targetcli 创建全部配置。不推荐直接使用 lio utils 中的 tcm_* 和 lio_* 。
使用 targetcli
外部使用手册仅对免费分支版有效。targetd 尚未进入 AUR ,这取决于该免费分支。
用命令行式的配置工具可以自动生成绝大部分的名称和数值,但也支持自定义。
在配置工具中随时可以输入 help
命令查看当前状态可用的命令。
cd
命令查看和选择路径target 启动以后,用下列命令进入配置工具:
# targetcli
在配置工具中,用下列命令启用一个块设备(此例为:/dev/disk/by-id/md-name-nas:iscsi
)作为 target:
/> cd backstores/block
/backstores/block> create md_block0 /dev/disk/by-id/md-name-nas:iscsi
然后,用下列命令创建一个“iSCSI 合格名称“(iSCSI Qualified Name,即 iqn)和一个 target 入口组(target portal group,tpg)
...> cd /iscsi
/iscsi> create
In order to tell LIO that your block device should get used as backstore for the target you issue
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 。
为了让客户端/发起者能够连接,需要把发起者的 iqn 写入 target 的配置中:
...> cd ../../acls
.../acls> create iqn.2005-03.org.open-iscsi:SERIAL
将上面命令中的 iqn.2005-03.org.open-iscsi:SERIAL
换成所用的发起者的 iqn ,通常位于 /etc/iscsi/initiatorname.iscsi
。
每个将要接入的发起者都必须如此配置一遍。
Targetcli 将自动把最新创建的 acl 映射到已创建的 lun 。
help create
命令查阅说明。所有配置工作完成后的最后一步是保存配置:
...> cd / /> saveconfig
配置数据将保存在 /etc/target/saveconfig.json
文件中。
现在就可以安全地启动或停止 target.service
而不会丢失做好的配置数据了。
saveconfig
命令的参数,也可以用 clearconfig
命令清除配置认证
Authentication per CHAP is enabled per default for your targets. 也可以设置口令或禁用认证。
禁用认证
在配置工具中进入所创建的 target 路径(例如 /iscsi/iqn.../tpg1),输入下列命令:
.../tpg1> set attribute authentication=0
设置证书
在配置工具中进入某个选定 target 的 acl 路径 (例如 /iscsi/iqn.../tpg1/acls/iqn.../) 。下列命令将显示当前的认证证书:
...> get auth
下列命令将以 foo:bar 启用认证:
...> set auth userid=foo ...> set auth password=bar
使用原生 LIO 工具
You have to install lio-utilsAUR[损坏的链接:package not found] from AUR and the dependencies (python2).
提示与技巧
- 使用
targetcli sessions
命令可以列出当前已打开的会话。这个命令包含在 targetcli-fbAUR 软件包中,但没有包含在 lio-utils 或原生的 targetcli 中。
上游文档
- targetcli
- LIO utils
- You can also use
man targetcli
when you installed the free branch version targetcli-fbAUR.
使用 SCSI Target Framework (STGT/TGT)
You will need the Package tgtAUR from AUR.
See: TGT iSCSI Target
使用 iSCSI Enterprise Target (IET)
You will need iscsitarget-kernelAUR[损坏的链接:package not found] and iscsitarget-usrAUR[损坏的链接:package not found] from AUR.
创建 Target
Modify /etc/iet/ietd.conf accordingly
基于硬盘的 Target
Target iqn.2010-06.ServerName:desc Lun 0 Path=/dev/sdX,Type=blockio
基于文件的 Target
Use "dd" to create a file of the required size, this example is 10GB.
dd if=/dev/zero of=/root/os.img bs=1G count=10
Target iqn.2010-06.ServerName:desc Lun 0 Path=/root/os.img,Type=fileio
启动服务
rc.d start iscsi-target
Also you can "iscsi-target" to DAEMONS in /etc/rc.conf so that it starts up during boot.
参阅
- iSCSI Boot Booting Arch Linux with / on an iSCSI target.
- Persistent block device naming (简体中文) 给 target 赋予正确的块设备名称