libera espaço não usado em um arquivo qcow2-image em kvm / qemu

18

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

qcow2 tem esse recurso interessante em que o arquivo de imagem aloca apenas o espaço realmente necessário pela máquina virtual. mas como faço para reduzir o arquivo de imagem, se o espaço alocado da máquina virtual ficar menor?

exemplo:

1.) eu crio uma nova imagem com 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 de inesperado até agora.

3.) Eu preencho 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 apago todos os dados de 40GB na imagem, mas o tamanho da imagem ainda consome 50GB.

pergunta: como liberar esses 40 GB de dados e reduzir a imagem para os únicos 10 GB necessários?

obrigado antecipadamente, berni

    
por bmaeser 09.11.2011 / 14:31

3 respostas

23

A imagem não será reduzida automaticamente, pois quando você exclui arquivos, na verdade, não é possível excluir dados (é por isso que undelete funciona). O Qemu tem um recurso para encolher imagens qcow2, mas o que o utilitário faz é realmente desduplicar os zeros do disco, deixando todas as outras informações intactas. Então a ideia seria:

  1. Preencha a unidade com zero ( dd if=/dev/zero of=/some/file até ficar sem espaço)
  2. delete / some / file
  3. desligue 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 a VM está funcionando e remova a imagem antiga

Isso, afaik, só funcionará com imagens qcow2, eu não testei outros formatos.

    
por 10.11.2011 / 11:18
14

virt-sparsify pode fazer tudo isso com menos problemas de sua parte: link

    
por 21.08.2014 / 17:13
0

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

    
por 07.01.2016 / 06:36