Como posso recuperar o espaço em um arquivo qcow2 após excluir os instantâneos, mantendo os instantâneos restantes?

Como posso recuperar o espaço em um arquivo qcow2 após excluir os instantâneos, mantendo os instantâneos restantes?

Eu tenho uma máquina virtual que começou com 5 snapshots 1,2,3,4,5.

eu useiqemu-imgpara excluir instantâneos 1,2,3. Os instantâneos 4 e 5 ainda são necessários e não foram excluídos.

Como posso liberar o espaço usado pelos snapshots 1,2,3 e reter os snapshots 4 e 5?

Passei muito tempo procurando uma solução, e as soluções que encontrei se enquadram em um de dois padrões:

Use a conversão qemu-img(Snapshots necessários excluídos)

qemu-img convert -O qcow2 Linux.qcow2 Linux_s.qcow2

Isso reduz o espaço usado pelo Linux.qcow2, mas exclui os instantâneos 4 e 5.

Copie a VM e use virt-sparsify(Não recupera nenhum espaço)

cp Linux.qcow2 TEST.qcow2

sudo virt-sparsify --in-place TEST.qcow2

Ele retém os dois instantâneos não excluídos, mas não recupera o espaço originalmente ocupado pelos instantâneos 1,2,3.

Como posso recuperar o espaço em um arquivo qcow2 após excluir os instantâneos, mantendo os instantâneos restantes?

Responder1

Arquivos qcow2 são arquivos esparsos. Em sistemas de arquivos que suportam arquivos esparsos, eles podem ocupar muito menos espaço em disco do que o tamanho do arquivo.

Se você excluir um instantâneo, o tamanho relatado por ls -lnão muda, mas a quantidade de espaço livre no disco, conforme relatado por, dfmuda.

Quase todos os sistemas de arquivos suportam arquivos esparsos. FAT e NFSv3 são provavelmente os únicos sistemas de arquivos comuns que não o fazem.

Responder2

Quando você exclui os snapshots 1,2,3, os arquivos são excluídos, mas isso não indica nenhum espaço liberado porque não é uma exclusão real. Os arquivos são apenas marcados para que a exclusão seja concluída rapidamente.

Se desejar liberar o espaço dos instantâneos excluídos, você pode converter o arquivo qcow2, mas deve preencher o arquivo qcow2 com 0 por meio do comando dd antes disso:

$dd if=/dev/zero of=~/junk
dd: writing to `/home/***/junk': No space left on device
$rm junk

então converta o arquivo qcow2

qemu-img convert -O qcow2  Linux.qcow2 Linux_s.qcow2

informação relacionada