В настоящее время я настраиваю 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
команда, и это сработало. Спасибо за помощь.
То, что вы спрашиваете, сильно зависит от целевой реализации 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
атрибут на цели.