Linux iSCSI 目标 (tgt)
Linux 目标框架 (tgt) 是一个用户空间 SCSI 目标框架,它支持 iSCSI 和 iSER 传输协议,并且支持多种访问块存储的方法。 tgt 由用户空间守护进程和工具组成。作为一个用户空间服务器,它不需要内核模块来运行。在 Alpine Linux 中,该软件包名为 scsi-tgt
安装
在 Alpine 中,scsi-tgt
分为几个软件包
- scsi-tgt - tgtd 守护进程。
- scsi-tgt-scripts - tgt-admin 助手实用程序。使其更容易通过配置文件配置目标。
- scsi-tgt-doc - 文档、man 页面和示例配置。
- scsi-tgt-openrc - 用于将 runnit tgt 作为服务运行的 init 脚本。
只需要 scsi-tgt 即可运行 tgt 目标守护进程。运行中的守护进程可以使用 tgtadm
命令行工具进行配置。但是,如果您想使用配置文件,则需要 tgt-admin
助手工具,该工具读取配置并发出相应的 tgtadm
命令。 tgt-admin 工具是用 perl 编写的,因此依赖于 perl 的安装,这就是为什么我们将其作为一个单独的软件包提供。
本指南假设您想通过配置文件配置 iSCSI 目标,并使其在启动期间自动启动。
要安装 scsi-tgt 和用于配置 tgt 的实用程序
# apk add scsi-tgt scsi-tgt-scripts
tgtd
守护进程将以空配置运行一旦您编辑了配置文件,您可以使用以下命令激活该服务
# rc-update add tgt-admin # service tgt-admin start
示例配置
这是一个将本地镜像文件导出为 iSCSI 目标(虚拟 SCSI 磁盘)的示例配置
/etc/tgt/conf.d/iscsi.conf 的内容

tgt-admin
tgt-admin
是一个方便的脚本,用于配置正在运行的 tgtd
守护进程。如果您想使用 tgtadm
工具手动配置 tgtd
,则不需要它。
文档可以在 scsi-tgt-doc
软件包(man tgt-admin)中找到,也可以在 上游的 GitHub 页面 上找到
常用的 tgt-admin
命令有
tgt-admin --execute
从 /etc/tgt/targets.conf 加载新目标。现有目标不会被更新。
tgt-admin --update <value>
更新选定的目标。正在被发起程序使用的目标将不会被更新。
tgt-admin --show
查询 tgtd
以获取运行配置。
tgt-admin --pretend
仅打印将要执行的操作,而不进行任何更改。
tgt-admin 示例
要查看运行配置的状态,请使用 tgt-admin -s
命令
# tgt-admin -s Target 1: iqn.2023-07.net.tnonline.wiki:server.target1 System information: Driver: iscsi State: ready I_T nexus information: LUN information: LUN: 0 Type: controller SCSI ID: IET 00010000 SCSI SN: beaf10 Size: 0 MB, Block size: 1 Online: Yes Removable media: No Prevent removal: No Readonly: No SWP: No Thin-provisioning: No Backing store type: null Backing store path: None Backing store flags: LUN: 1 Type: disk SCSI ID: IET 00010001 SCSI SN: 1001 Size: 107374 MB, Block size: 4096 Online: Yes Removable media: No Prevent removal: No Readonly: No SWP: No Thin-provisioning: Yes Backing store type: rdwr Backing store path: /media/target/diskimage_1.img Backing store flags: Account information: user1 ACL information: 192.168.0.10
如果您想查看所需的本机命令,可以使用 --verbose
选项。
在这里您可以看到发出 tgt-admin --update ALL --verbose
时使用的实际命令
移除目标: iqn.2023-07.net.tnonline.wiki:server.target1
tgtadm -C 0 --mode target --op delete --tid=1
添加目标: iqn.2023-07.net.tnonline.wiki:server.target1
tgtadm -C 0 --lld iscsi --op new --mode target --tid 1 -T iqn.2023-07.net.tnonline.wiki:server.target1 tgtadm -C 0 --lld iscsi --mode target --op update --tid 1 --name DataDigest --value None tgtadm -C 0 --lld iscsi --mode target --op update --tid 1 --name ErrorRecoveryLevel --value 2 tgtadm -C 0 --lld iscsi --mode target --op update --tid 1 --name HeaderDigest --value None tgtadm -C 0 --lld iscsi --op new --mode logicalunit --tid 1 --lun 1 -b "/media/target/diskimage_1.img" --blocksize 4096 tgtadm -C 0 --lld iscsi --op update --mode logicalunit --tid 1 --lun 1 --params product_id="MediaFiles" tgtadm -C 0 --lld iscsi --op update --mode logicalunit --tid 1 --lun 1 --params "thin_provisioning=1 rotation_rate=0 sense_format=1" tgtadm -C 0 --lld iscsi --op update --mode logicalunit --tid 1 --lun 1 --params scsi_sn="1001"
lun 1 启用了写入缓存(默认)。
tgtadm -C 0 --lld iscsi --op update --mode logicalunit --tid 1 --lun 1 --params vendor_id="Forza" tgtadm -C 0 --lld iscsi --mode account --op bind --tid 1 --user=user1 tgtadm -C 0 --lld iscsi --op bind --mode target --tid 1 -I 192.168.0.10