Debian guest on Windows host using discard/TRIM.
Esta não é uma resposta directa em si, pois estou a abordar o problema, não a questão. Em vez de compactar periodicamente a imagem, esta solução utiliza o descarte para remover automaticamente os blocos não utilizados na imagem de disco VM do host.
Esta solução requer um sistema de ficheiros convidado que suporte TRIM contínuo. O Arch Linux wiki tem uma lista de sistemas de ficheiros que suportam operações TRIM .
FDE e cryptoroot não estão especificamente cobertos, pois existem preocupações de segurança e nenhuma das outras soluções para esta questão permitiria a compactação também. O Arch Linux wiki tem informação sobre TRIM e dispositivos dm-crypt .
Em teoria, isto funcionará para todos os convidados Linux em hosts VBox usando armazenamento VDI.
Configuração do host
Com a VBox encerrada e sem VMs em execução, adicione suporte de descarte aos seus discos configurando ambos discard
e nonrotational
para cada disco no ficheiro de configuração para a VM. Neste momento o discard
não está na GUI, mas o nonrotational
está exposto como a caixa de verificação “Solid-state Drive”. (ref: fóruns vbox, suporte de descarte )
<AttachedDevice discard="true" nonrotational="true" type="HardDisk" [..other options..] >
Inicialize a VM, e verifique se o suporte TRIM está activado:
sudo hdparm -I /dev/sda | grep TRIM
Guest Configuration
Se o LVM estiver a ser utilizado, altere a configuração de descarte em /etc/lvm/lvm.conf
. (ref: debian wiki, lvm.conf exemplo )
devices {
...
issue_discards = 1
}
Em fstab, adicione a opção discard
aos sistemas de arquivos que você deseja descartar automaticamente (ref: debian wiki, fstab exemplo )
UUID=8db6787f-1e82-42d8-b39f-8b7491a0523c / ext4 discard,errors=remount-ro 0 1
UUID=70bfca92-8454-4777-9d87-a7face32b7e7 /build ext4 discard,errors=remount-ro,noatime 0 1
Remonte os sistemas de arquivos para que eles peguem suas novas opções.
sudo mount -o remount /
sudo mount -o remount /build
Aparar manualmente blocos livres agora com fstrim
. fstrim
usa o sistema de arquivos montado, não o dispositivo de blocos que o suporta. Em vez de definir o descarte contínuo em fstab
, isto poderia ser feito num cron semanal. (O cron semanal é recomendado para SSDs físicos que podem ter suporte questionável para o TRIM, mas isto não é relevante aqui, uma vez que os SSDs subjacentes são tratados pelo sistema operativo anfitrião. ver:
fstrim /
fstrim /build
Neste ponto, o tamanho dos sistemas de ficheiros dentro da VM e o tamanho das imagens da VM devem estar bastante próximos do valor.
Testado com:
- Guest1: Debian 8.7, kernel: linux 4.8 grsec de backports, sistema de ficheiros: ext4
- Guest2: Debian 9 RC2, kernel: linux 4.9, sistema de ficheiros: ext4
- Host1: VBox 5.1.14, Win7, imagem fmt: VDI
- Host2: VBox 5.1.14, Win8.1, imagem fmt: VDI