Estoy ejecutando una máquina virtual Windows en un SSD de 128 GB. Asigné un disco virtual de 127 GB a la VM, pensando que podría ocupar todo el espacio del disco. Lo que olvidé tener en cuenta es el espacio en disco requerido por las 3 instantáneas de VM que tomé y que están almacenadas en la misma unidad física. Ahora queda 0 espacio en la unidad y la VM no se ejecutará.
Lo que me gustaría hacer es liberar espacio en el disco físico eliminando todas las instantáneas. Desafortunadamente, cuando intento eliminar la instantánea aparece un error:
Failed to perform an online medium merge (VERR_DISK_FULL)
Ahí es cuando la VM está encendida pero en pausa. Si fuerzo el apagado de la VM e intento la fusión, obtengo:
Failed to delete the snapshot SomeSnapshot of the virtual machine somevm.
Could not merge the medium '/var/vms/somevm/Snapshots/{58220add-b745-4d38-874b-c788f0e31560}.vdi' to '/var/vms/somevm/Snapshots/{181dd674-a65a-44af-afa4-d7ee00cf6c21}.vdi' (VERR_DISK_FULL).
¿Cuál es la forma más fácil de salir de este lío? El sistema operativo host ejecuta Linux Mint.
Respuesta1
Odio, odio, odio jugar con el arcano sistema de registro de medios de VirtualBox... liberar discos e intentar volver a adjuntar instantáneas y todas esas tonterías, así que lo hice de la forma más sencilla que se me ocurrió: copiar las imágenes del disco de la VM a una unidad más grande, monte la unidaden la ruta original de la VM, vuelva a ejecutar los comandos de eliminación de instantáneas y finalmente copie la imagen final del disco más pequeña a la unidad original. Todos los detalles sangrientos siguen:
Como uso LVM, primero creo un nuevo LV para guardar los archivos:
sudo lvcreate -l 100%FREE -n vm-resize somevg sudo cryptsetup create vm-resize /dev/mapper/somevg-vm--resize --key-file /dev/urandom sudo mkfs.ext4 -m 1 /dev/mapper/vm-resize
Luego copio las imágenes del disco VM al nuevo LV:
cd /var/vms sudo mkdir vm-resize sudo mount /dev/mapper/vm-resize vm-resize/ sudo cp -a somevm/* vm-resize/
Luego monto el nuevo LV en la misma ruta en la que se montó mi SSD:
umount somevm/ vm-resize/ sudo mount /dev/mapper/vm-resize somevm/
Finalmente puedo "eliminar" todas las instantáneas (lo que las fusiona en la imagen del disco actual):
snapshots=( $(VBoxManage snapshot somevm list | sed -E 's/.*(\w{8}-\w{4}-\w{4}-\w{4}-\w{12}).*/\1/') ) for uuid in "${snapshots[@]}"; do VBoxManage snapshot somevm delete "$uuid" done
Pero aún no hemos terminado: a continuación vuelvo a montar mis dos LV en su ubicación original:
sudo umount somevm/ sudo mount somevm/ sudo mount /dev/mapper/vm-resize vm-resize/
Luego debemos mover la nueva imagen de disco más pequeña a la unidad original:
sudo rm somevm/Snapshots/*.vdi sudo cp -a vm-resize/somevm.vdi somevm/somevm.vdi
En este punto, desea probar la máquina virtual para asegurarse de que funciona.
Luego, finalmente (esta vez de verdad), realice la limpieza:
sudo umount vm-resize sudo cryptsetup remove vm-resize sudo lvremove somevg/vm-resize
Así de fácil, ¿verdad?