В настоящее время я настраиваю SAN для бездисковой загрузки. Мой бэкэнд состоит из ZFS-Vol, общего доступа через iSCSI. Пока все работает отлично, за исключением TRIM/UNMAP. Для тестовых целей я настроил две виртуальные машины под управлением Ubuntu20.04 в VirtualBox, объединенные в сеть через внутреннюю сеть со статическими адресами 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
но оболочка отвечает "fstrim: /iscsi-share: опция discard не поддерживается". Если я выполню эти команды на целевой машине, свойство "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
Редактировать: Поскольку были ответы, ссылающиеся наЛИОТеперь я также попробовал targetcli. Там я настроил цель с моим zVol в /backstores/block/iscsi и set attribute emultate_tpu=1
. После импорта этого в мой инициатор я переразметил, отформатировал и смонтировал его на инициаторе. Затем я создал свой тестовый файл, удалил его и выполнил команду, fstrim
и это сработало. Спасибо за помощь.
решение1
LIO отключает UNMAP по умолчанию. Если вы хотите включить его, вам следует установить emulate_tpu
атрибут на цели.
решение2
То, о чем вы спрашиваете, очень специфично для реализации цели iSCSI. Большинство из них не выполняют сопоставление команд SCSI 1:1, поэтому если цель iSCSI эмулирует жесткий диск, она не будет обходить нераспознанные команды (включая UNMAP, конечно) для базового хранилища @ back-end, ЕСЛИ вы явно не попросите цель iSCSI сделать это. С TGT вы упомянули, что указали "thin_provisioning=1" для вашего виртуального LUN в файле конфигурации.
решение3
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 target изначально поддерживает TRIM/UNMAP без дополнительных манипуляций. Вот пример:https://forums.starwindsoftware.com/viewtopic.php?f=5&t=5343