liberar espacio no utilizado en un archivo de imagen qcow2 en kvm / qemu

23

Estamos usando kvm / qemu con qcow2-images para nuestras máquinas virtuales.

qcow2 tiene esta característica agradable donde el archivo de imagen solo asigna el espacio realmente necesario por la máquina virtual. pero, ¿cómo reduzco el archivo de imagen si el espacio asignado de la máquina virtual se reduce?

ejemplo:

1.) creo una nueva imagen con formato qcow2, tamaño 100GB

2.) uso esta imagen para instalar ubuntu. la instalación necesita aproximadamente 10 gb, el archivo de imagen crece hasta aproximadamente 10 GB. nada inesperado hasta ahora.

3.) Rellene la imagen con aproximadamente 40 GB de datos adicionales. el archivo de imagen crece hasta 50 GB. Estoy bien con eso :-)

4.) Aquí es donde se pone extraño: elimino todos los datos de 40 GB en la imagen, pero el tamaño de la imagen todavía consume 50 GB.

pregunta: ¿cómo libero esos 40 GB de datos y reduzco la imagen a los 10 GB necesarios?

gracias de antemano, berni

bmaeser
fuente

Respuestas:

26

La imagen no se reducirá automáticamente, ya que cuando eliminas archivos, en realidad no eliminas datos (es por eso que funciona recuperar). Qemu tiene la facilidad de reducir las imágenes qcow2, pero lo que hace la utilidad es realmente deduplicar los ceros del disco, dejando intacta toda la otra información. Entonces la idea sería:

  1. Llene el disco a cero ( dd if=/dev/zero of=/some/filehasta que se quede sin espacio)
  2. eliminar / algunos / archivo
  3. apague la VM
  4. cd donde se guardan y ejecutan las imágenes para la VM qemu-img convert -O qcow2 original_image.qcow2 deduplicated_image.qcow2
  5. cambie la configuración de la VM para usar la nueva deduplicated_image.qcow2, pruebe que la VM funciona y elimine la imagen anterior

Esto, afaik, solo funcionará con imágenes qcow2, no he probado otros formatos.

dyasny
fuente
3
Si tiene un invitado de Windows, ejecute SDelete -z para poner a cero todo el espacio libre (pasos 1,2 anteriores)
ndemou
17

virt-sparsify puede hacer todo esto con menos problemas de su parte: http://libguestfs.org/virt-sparsify.1.html

Eric Blake
fuente
No estoy tan seguro de que estuviera allí en 2011
dyasny
2
@dyasny Si las respuestas existentes a viejas preguntas se han vuelto obsoletas con el tiempo, vale la pena escribir una nueva respuesta. Sin embargo, esta nueva respuesta en particular podría no estar a la altura de los estándares de este sitio.
kasperd
44
@dyasny Si alguien quiere gastar el esfuerzo en escribir una nueva respuesta de calidad, cada vez que la anterior sea obsoleta, debe alentarse a hacerlo. Una discusión más exhaustiva sobre cómo lidiar con respuestas obsoletas es más adecuada para meta.
kasperd
1

virt-sparsify fileA fileBhará todo eso, pero en realidad no reducirá el tamaño de la imagen. Para esto necesitas agregar --compress.

cmyster
fuente