Zfsonlinux

通過 iSCSI 修剪/取消映射 Zvol

  • August 28, 2020

我目前正在為無盤啟動設置 SAN。我的後端由通過 iSCSI 共享的 ZFS-Vol 組成。到目前為止,除了 TRIM/UNMAP 之外,一切都執行良好。為了測試目的,我在 VirtualBox 中設置了兩個執行 Ubuntu20.04 的 VM,它們通過具有靜態 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>

在啟動器 (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

但 shell 以“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

編輯:由於有提到LIO的答案,我現在也嘗試了 targetcli。在那裡,我在 /backstores/block/iscsi 和set attribute emultate_tpu=1. 在將它導入我的啟動器後,我重新分區、格式化並將其安裝在啟動器上。然後我創建了我的測試文件,刪除了它並發出了fstrim命令,它工作了。謝謝您的幫助。

LIO 預設禁用 UNMAP。如果你想啟用它,你應該emulate_tpu在目標上設置屬性。

您要問的是高度 iSCSI 目標實現特定的。他們中的大多數不執行 1:1 SCSI 命令映射,因此如果 iSCSI 目標模擬硬碟 - 它不會繞過無法辨識的命令(當然包括 UNMAP)到底層儲存@後端除非您明確詢問 iSCSI這樣做的目標。使用 TGT,您可以在配置文件中為您的虛擬 LUN 指定“thin_provisioning=1”。

引用自:https://serverfault.com/questions/1031580