TRIM/UNMAP Zvol по iSCSI

В настоящее время я настраиваю SAN для бездисковой загрузки. Мой бэкэнд состоит из ZFS-Vol, совместно используемого через iSCSI. Пока все работает нормально, кроме TRIM/UNMAP. Для тестовых целей я настраиваю две виртуальные машины под управлением Ubuntu20.04 в VirtualBox, объединенных в сеть через внутреннюю сеть со статическими IPv4-адресами. На target (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

но оболочка отвечает "fstrim: /iscsi-share: опция сброса не поддерживается". Если я введу эти команды на целевой машине, свойство "REFER" zVol уменьшится, как ожидалось.

Поскольку я ничего не нашел при поиске в Интернете, я не нашел намеков на то, почему это не работает, и возможно ли это вообще.


Изменить: как я получил совет использовать опцию 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. Там я настраиваю цель с моим zVol в /backstores/block/iscsi и set attribute emultate_tpu=1. После импорта этого в свой инициатор я переразбил, отформатировал и смонтировал его на инициаторе. Затем я создал свой тестовый файл, удалил его и выпустил fstrimкоманда, и это сработало. Спасибо за помощь.

3 ответа

То, что вы спрашиваете, сильно зависит от целевой реализации iSCSI. Большинство из них не выполняет сопоставление команд SCSI 1:1, поэтому, если цель iSCSI эмулирует жесткий диск - она ​​не будет обходить нераспознанные команды (включая UNMAP, конечно) в базовое хранилище @ back-end, ЕСЛИ вы явно не спросите iSCSI цель сделать это. Используя TGT, вы должны указать "thin_provisioning=1" для своего виртуального LUN в файле конфигурации.

TRIM по умолчанию включен для еженедельного запуска в Ubuntu 20.04, поэтому проблем возникнуть не должно, даже если вы запустите его вручную. Вы можете проверить это в fstrim.service и fstrim.timer на всякий случай: https://askubuntu.com/questions/1034169/is-trim-enabled-on-my-ubuntu-18-04-installation

Однако это действительно похоже на то, что вам нужно включить UNMAP на цели, как уже упоминалось. Поскольку многие твердотельные накопители SATA имели проблемы с 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

LIO по умолчанию отключает UNMAP. Если вы хотите включить его, вы должны установить emulate_tpu атрибут на цели.

Другие вопросы по тегам