TRIM/UNMAP Zvol sobre iSCSI

TRIM/UNMAP Zvol sobre iSCSI

Atualmente estou configurando uma SAN para inicialização sem disco. Meu back-end consiste em ZFS-Vol compartilhado via iSCSI. Até agora tudo está funcionando bem, exceto TRIM/UNMAP. Para fins de teste, configurei duas VMs executando o Ubuntu20.04 no VirtualBox, conectadas em rede por meio de uma rede interna com endereços IPv4 estáticos. No destino (tgt) tenho um segundo drive virtual formatado com ZFS. Neste zpool criei um zVol e formatei-o com GPT e 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>

No iniciador (open-iscsi) eu uso este comando para provocar uma operação 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

mas o shell responde com "fstrim: /iscsi-share: a opção de descarte não é suportada". Se eu emitir esses comandos na máquina de destino, a propriedade "REFER" do zVol diminuirá conforme o esperado.

Como não encontrei nada enquanto pesquisava na web, não encontrei nenhuma dica de por que isso não está funcionando ou se isso é possível.


Editar: como recebi o conselho para usar a opçãothin_provisioning.

Depois de reparticionar o drive e montá-lo no inicializador recebi mensagem de erro blk_update_request: critical target error, dev sdb, sector 23784 op 0x9:(WRITE_ZEROES) flags 0x800 phys_seg 0 prio class 0 para vários setores e após criar e deletar meu testfile, fstrimenviei a mensagem

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

Editar: como havia respostas referentes aLIOAgora também tentei o targetcli. Lá eu configurei um alvo com meu zVol em /backstores/block/iscsi e set attribute emultate_tpu=1. Depois de importar isso para o meu iniciador, reparticionei, formatei e montei no iniciador. Então criei meu arquivo de teste, deletei-o e emiti o fstrimcomando e funcionou. Obrigado pela ajuda.

Responder1

LIO desativa UNMAP por padrão. Se você quiser habilitá-lo, você deve definir o emulate_tpuatributo no destino.

Responder2

O que você está perguntando é altamente específico para implementação de alvo iSCSI. A maioria deles não faz mapeamento de comandos SCSI 1: 1, portanto, se o destino iSCSI emular o disco rígido - ele não ignorará comandos não reconhecidos (incluindo UNMAP, é claro) para o armazenamento subjacente no back-end, A MENOS que você pergunte explicitamente ao iSCSI alvo para fazê-lo. Com o TGT você mencionou que especificou "thin_provisioning = 1" para seu LUN virtual no arquivo de configuração.

Responder3

O TRIM está habilitado por padrão para ser executado semanalmente no Ubuntu 20.04, portanto não deverá haver problemas mesmo se você executá-lo manualmente. Você pode verificar isso em fstrim.service e fstrim.timer apenas para garantir:https://askubuntu.com/questions/1034169/is-trim-enabled-on-my-ubuntu-18-04-installation

No entanto, parece que você precisa ativar o UNMAP no alvo, conforme já mencionado. Como muitos SSDs SATA tiveram problemas com o UNMAP, ele foi desabilitado no LIO por padrão:http://www.linux-iscsi.org/Doc/LIO%20Admin%20Manual.pdf.

Por outro lado, é claro, as coisas ficam muito mais fáceis quando um destino iSCSI suporta nativamente TRIM/UNMAP sem mais ajustes. Aqui está um exemplo:https://forums.starwindsoftware.com/viewtopic.php?f=5&t=5343

informação relacionada