liberar espaço não usado em um arquivo de imagem qcow2 no kvm / qemu

23

estamos usando o kvm / qemu com qcow2-images para nossas máquinas virtuais.

O qcow2 possui esse recurso interessante, onde o arquivo de imagem aloca apenas o espaço realmente necessário pela máquina virtual. mas como reduzo o arquivo de imagem, se o espaço alocado da máquina virtual ficar menor?

exemplo:

1.) eu crio uma nova imagem com o formato qcow2, tamanho 100GB

2.) eu uso esta imagem para instalar o ubuntu. instalação precisa de cerca de 10 GB, o arquivo de imagem cresce até cerca de 10 GB. nada inesperado até agora.

3.) preencha a imagem com cerca de 40 GB de dados adicionais. o arquivo de imagem cresce até 50 GB. Eu estou bem com isso :-)

4.) é aqui que fica estranho: eu excluo todos os dados de 40 GB da imagem, mas o tamanho da imagem ainda consome 50 GB.

pergunta: como libero esses 40 GB de dados e reduzo a imagem aos 10 GB necessários?

Agradecemos antecipadamente, Berni

bmaeser
fonte

Respostas:

26

A imagem não diminui automaticamente, pois quando você exclui arquivos, na verdade, você não exclui dados (é por isso que a exclusão funciona). O Qemu possui um recurso para reduzir as imagens do qcow2, mas o que o utilitário faz é realmente deduplicar os zeros do disco, deixando todas as outras informações intactas. Portanto, a ideia seria:

  1. Encha com zero a unidade ( dd if=/dev/zero of=/some/fileaté ficar sem espaço)
  2. delete / some / file
  3. desligar a VM
  4. cd para onde as imagens da VM são mantidas e executadas qemu-img convert -O qcow2 original_image.qcow2 deduplicated_image.qcow2
  5. altere as configurações da VM para usar o novo deduplicated_image.qcow2, teste se a VM está funcionando e remova a imagem antiga

Afaik, isso funcionará apenas com imagens qcow2, não testei outros formatos.

dyasny
fonte
3
Se você tem um convidado janelas prazo SDelete -z a zero todo o espaço livre (passos 1,2 acima)
ndemou
17

O virt-sparsify pode fazer tudo isso com menos problemas de sua parte: http://libguestfs.org/virt-sparsify.1.html

Eric Blake
fonte
Não tão certo que estava lá em 2011
dyasny
2
@dyasny Se as respostas existentes para perguntas antigas se tornarem obsoletas ao longo do tempo, vale a pena escrever uma nova resposta. No entanto, essa nova resposta específica pode não estar de acordo com os padrões deste site.
precisa saber é o seguinte
4
@dyasny Se alguém quiser se esforçar para escrever uma nova resposta de qualidade, cada vez que a antiga é obsoleta, ela deve ser incentivada a fazê-lo. Uma discussão mais aprofundada sobre como lidar com respostas desatualizadas é mais adequada para a meta.
precisa saber é o seguinte
1

virt-sparsify fileA fileBfará tudo isso, mas na verdade não reduzirá o tamanho da imagem. Para isso, você precisa adicionar --compress.

cmyster
fonte