Linux iSCSI 目标 (tgt)

来自 Alpine Linux

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

注意: 请注意,在未首先设置配置文件 /etc/tgt/targets.conf 的情况下,tgtd 守护进程将以空配置运行

一旦您编辑了配置文件,您可以使用以下命令激活该服务

# rc-update add tgt-admin # service tgt-admin start

示例配置

这是一个将本地镜像文件导出为 iSCSI 目标(虚拟 SCSI 磁盘)的示例配置

/etc/tgt/conf.d/iscsi.conf 的内容

# tgt-admin 配置文件 ## 默认情况下,tgt-admin 在 /etc/tgt/targets.conf 中查找其配置文件 # 设置驱动程序。如果未指定,则默认为 "iscsi"。 default-driver iscsi ## 定义一个目标 # iSCSI 命名约定 iqn 格式: # https://www.rfc-editor.org/rfc/rfc3721#section-1.1 <target iqn.2023-07.net.tnonline.wiki:server.target1> ## 常规设置 controller_tid 1 vendor_id Forza ## iSCSI 功能 HeaderDigest None DataDigest None ErrorRecoveryLevel 2 ## 访问控制 initiator-address 192.168.0.10 incominguser user1 secretpass12 ## iSCSI 目标(导出) <backing-store "/media/target/diskimage_1.img"> lun 1 block-size 4096 params thin_provisioning=1 rotation_rate=0 sense_format=1 allow-in-use yes write-cache on scsi_sn 1001 product_id MediaFiles </backing-store> </target>
连接到 Alpine Linux iSCSI 目标的 Windows 发起程序。虚拟磁盘看起来像本地连接的 HDD。

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