Eu odeio, odeio, odeio mexer com o sistema de registro de mídia arcano do VirtualBox ... lançando discos e tentando anexar instantâneos e todo esse absurdo, então eu fiz isso da maneira mais simples que eu consegui pensar: copiar o disco da VM imagens para uma unidade maior, monte a unidade no caminho original da VM , execute novamente os comandos de exclusão da captura instantânea e, finalmente, copie a última imagem de disco menor de volta para a unidade original. Todos os detalhes incluem:
-
Como eu uso o LVM, eu primeiro crio um novo LV para armazenar os arquivos:
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
-
Em seguida, copio as imagens de disco da VM para o novo LV:
cd /var/vms sudo mkdir vm-resize sudo mount /dev/mapper/vm-resize vm-resize/ sudo cp -a somevm/* vm-resize/
-
Depois, montei o novo LV no mesmo caminho em que o meu SSD foi montado:
umount somevm/ vm-resize/ sudo mount /dev/mapper/vm-resize somevm/
-
Por fim, posso "excluir" todos os instantâneos (que os mesclam à imagem de disco atual):
snapshots=( $(VBoxManage snapshot somevm list | sed -E 's/.*(\w{8}-\w{4}-\w{4}-\w{4}-\w{12}).*//') ) for uuid in "${snapshots[@]}"; do VBoxManage snapshot somevm delete "$uuid" done
-
Mas ainda não terminamos: depois eu montei novamente os dois LVs no local original:
sudo umount somevm/ sudo mount somevm/ sudo mount /dev/mapper/vm-resize vm-resize/
-
Depois, precisamos mover a nova imagem de disco menor para a unidade original:
sudo rm somevm/Snapshots/*.vdi sudo cp -a vm-resize/somevm.vdi somevm/somevm.vdi
Neste ponto, você deseja testar a VM para garantir que ela funcione.
-
Então, finalmente (de verdade, desta vez), faça a limpeza:
sudo umount vm-resize sudo cryptsetup remove vm-resize sudo lvremove somevg/vm-resize
Tão fácil, né?