Tengo una máquina virtual que comenzó con 5 instantáneas 1,2,3,4,5.
solíaqemu-imgpara eliminar instantáneas 1,2,3. Las instantáneas 4 y 5 aún son necesarias y no se eliminaron.
¿Cómo puedo liberar el espacio utilizado por las instantáneas 1,2,3 y conservar las instantáneas 4 y 5?
He pasado mucho tiempo buscando una solución y las soluciones que encontré encajan en uno de dos patrones:
Utilice la conversión qemu-img(Se eliminaron instantáneas necesarias)
qemu-img convert -O qcow2 Linux.qcow2 Linux_s.qcow2
Esto reduce el espacio utilizado por Linux.qcow2, pero elimina las instantáneas 4 y 5.
Copie la VM y use virt-sparsify(No recupera ningún espacio)
cp Linux.qcow2 TEST.qcow2
sudo virt-sparsify --in-place TEST.qcow2
Conserva las dos instantáneas no eliminadas, pero no recupera el espacio que ocupaban originalmente las instantáneas 1,2,3.
¿Cómo puedo recuperar el espacio en un archivo qcow2 después de eliminar instantáneas y conservar las instantáneas restantes?
Respuesta1
Los archivos qcow2 son archivos dispersos. En los sistemas de archivos que admiten archivos dispersos, pueden ocupar mucho menos espacio en el disco que el tamaño del archivo.
Si elimina una instantánea, el tamaño informado por ls -l
no cambia, pero la cantidad de espacio libre en el disco según lo informado df
sí cambia.
Casi todos los sistemas de archivos admiten archivos dispersos. FAT y NFSv3 son probablemente los únicos sistemas de archivos comunes que no lo hacen.
Respuesta2
Cuando elimina las instantáneas 1,2,3, los archivos se eliminan, pero no indica ningún espacio liberado porque no es una eliminación real. Los archivos simplemente están marcados para que la eliminación finalice rápidamente.
Si desea liberar el espacio de las instantáneas eliminadas, puede convertir el archivo qcow2, pero antes debe completar el archivo qcow2 con 0 mediante el comando dd:
$dd if=/dev/zero of=~/junk
dd: writing to `/home/***/junk': No space left on device
$rm junk
luego convierta el archivo qcow2
qemu-img convert -O qcow2 Linux.qcow2 Linux_s.qcow2