通过 iSCSI 修剪/取消映射 Zvol

Cod*_*use 6 open-iscsi zfsonlinux

我目前正在为无盘启动设置 SAN。我的后端由通过 iSCSI 共享的 ZFS-Vol 组成。到目前为止,除了 TRIM/UNMAP 之外,一切正常。为了测试目的,我在 VirtualBox 中设置了两个运行 Ubuntu20.04 的虚拟机,这些虚拟机通过具有静态 IPv4 地址的内部网络联网在一起。在目标 (tgt) 上有第二个用 ZFS 格式化的虚拟驱动器。在这个 zpool 上,我创建了一个 zVol 并使用 GPT 和 ext4 对其进行了格式化。

/etc/tgt/conf.d/iscsi.conf
<target example.com:lun1>
    <backing-store /dev/zvol/tank/iscsi_share>
        params thin_provisioning=1
    </backing-store>
    initiator-address 192.168.0.2
</target>
Run Code Online (Sandbox Code Playgroud)

在启动器 (open-iscsi) 上,我使用此命令来引发 TRIM 操作:

sudo mount /dev/sdb1 /iscsi-share
sudo dd if=/dev/zero of=/iscsi-share/zero bs=1M count=512
sudo rm /iscsi-share/zero
sudo fstrim /iscsi-share
Run Code Online (Sandbox Code Playgroud)

但外壳以“fstrim:/iscsi-share:不支持丢弃选项”作为响应。如果我在目标机器上发出这些命令,zVol 的“REFER”属性会按预期减少。

由于我在搜索网络时一无所获,因此我没有发现任何关于为什么这不起作用或者这是否可行的提示。


编辑:因为我得到了使用选项Thin_provisioning的建议。

在我重新分区驱动器并将其安装在启动器上后,我收到blk_update_request: critical target error, dev sdb, sector 23784 op 0x9:(WRITE_ZEROES) flags 0x800 phys_seg 0 prio class 0 了几个扇区的错误消息,在创建和删除我的测试文件后,fstrim发送消息

blk_update_request: I/O error, dev sdb, sector 68968 op 0x3:(DISCARD) flags 0x800 phys_seg 1 prio class 0
fstrim: iscsi-share: FITRIM ioctl failed: Input/output error
Run Code Online (Sandbox Code Playgroud)

编辑:由于有提到LIO 的答案,我现在也尝试了 targetcli。在那里,我在 /backstores/block/iscsi 和set attribute emultate_tpu=1. 将其导入我的启动器后,我重新分区、格式化并将其安装在启动器上。然后我创建了我的测试文件,删除它并发出fstrim命令并且它工作了。谢谢您的帮助。

Bar*_*958 6

您要问的是高度特定于 iSCSI 目标的实现。它们中的大多数不进行 1:1 SCSI 命令映射,因此如果 iSCSI 目标模拟硬盘 - 它不会绕过无法识别的命令(当然包括 UNMAP)到底层存储@后端,除非您明确询问 iSCSI这样做的目标。使用 TGT,您可以在配置文件中为虚拟 LUN 指定“thin_provisioning=1”。


bat*_*a09 5

默认情况下,TRIM 在 Ubuntu 20.04 中每周运行一次,因此即使您手动运行它也应该没有问题。您可以在 fstrim.service 和 fstrim.timer 中检查以防万一:https ://askubuntu.com/questions/1034169/is-trim-enabled-on-my-ubuntu-18-04-installation

但是,正如已经提到的,这确实看起来您需要在目标上启用 UNMAP。由于许多 SATA SSD 存在 UNMAP 问题,默认情况下它在 LIO 中被禁用:http : //www.linux-iscsi.org/Doc/LIO%20Admin%20Manual.pdf

顺便说一句,当然,当 iSCSI 目标本身支持 TRIM/UNMAP 而无需进一步修改时,事情会变得容易得多。这是一个例子:https : //forums.starwindsoftware.com/viewtopic.php?f=5&t=5343

  • 这里的问题是在 **iSCSI** 上没有启用修剪,因此是一个配置问题,因为 UNMAP 命令必须通过网络发送并定向到块设备。其次,如问题中所述,这不是 SATA SSD,而是 ZFS 模拟卷,我没有使用 **targetcli** 而是使用 **tgt**,因此 LIO 不适用。 (3认同)
  • 是的,不知何故我错过了您正在使用 TGT。到目前为止,我只能建议尝试其他目标,例如 LIO(当您设法解决授权问题时)或 SCST,以查看问题是否与 TGT TRIM 支持有关。 (3认同)

Mic*_*ton 2

LIO 默认禁用 UNMAP。如果您想启用它,您应该emulate_tpu在目标上设置该属性。