Limpar automaticamente o espaço não utilizado nos discos na VM

2

Eu executo o servidor de virtualização baseado em KVM (ou seja, Proxmox), onde algumas máquinas baseadas no Debian são executadas em VMs do KVM. O Proxmox pode criar backups de VMs, mas também compactar as imagens dos discos da VM.

Como sabemos, os tamanhos de backup estão aumentando ao longo do tempo, pois mais dados armazenados em cada disco da VM e mais blocos 'limpos' de disco da VM se tornam 'sujos' (ou seja, contêm arquivos antigos). Assim, mesmo se eu excluir todos os arquivos em um disco virtual por rm -rf , na verdade, o backup será do mesmo tamanho, pois isso não limpará todos os blocos do disco da VM.

Eu posso 'limpar' o disco da VM fazendo algo como dd if=/dev/zero of=/BIG.txt e, em seguida, rm -f /BIG.txt - dessa forma eu crio um arquivo grande cheio de zeros que usam todo o espaço em disco e depois eu apago seus ex-blocos conterá zeros. A desvantagem é que por um momento o disco fica cheio, o que afeta todos os programas que querem escrever alguma coisa.

Mas talvez haja alguma outra maneira de limpar os blocos de disco não utilizados com zeros, de modo que o backup comprimirá esse disco com melhor taxa? Alguns programas baseados no Windows oferecem opções para "limpar espaço em disco não utilizado" (por exemplo, CCleaner), mas eu preciso disso para o Linux.

    
por Alexander 30.06.2016 / 12:23

1 resposta

2

As versões recentes do libvirt / kvm suportam a opção discard vdisc (somente para o tipo SCSI vdisk). Com esta opção ativada, você pode emitir fstrim / no painel de arquivos convidado e os blocos não utilizados serão imediatamente descartados pela imagem de host vm, compactando / reduzindo-a através de perfuração.

Veja aqui (seção de drivers, procure por 'descarte') e aqui para mais informações.

Se você não puder usar o método de aparar / descartar, poderá continuar usando seu método de zeragem atual ( dd de /dev/zero ), com uma diferença: emita dois dd passes , cada um com pouco mais de metade do espaço livre em disco, espaçado por um comando fsync; rm BIG.txt . Isso deve ser suficiente para recuperar quase todo o espaço livre, sem preencher tudo de uma vez.

    
por 30.06.2016 / 14:10