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 -l
não muda, mas a quantidade de espaço livre no disco, conforme relatado por, df
muda.
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