VirtualBox: Falha ao executar uma mesclagem de mídias online (VERR_DISK_FULL)

0

Estou executando uma VM do Windows em um SSD de 128 GB. Aloquei um disco virtual de 127 GB para a VM, pensando que poderia ocupar todo o espaço na unidade. O que eu esqueci de levar em conta é o espaço em disco requerido pelos 3 snapshots de VMs que foram armazenados na mesma unidade física. Agora resta 0 espaço na unidade e a VM não será executada.

O que eu gostaria de fazer é liberar espaço na unidade física excluindo todas as capturas instantâneas. Infelizmente, quando tento excluir o instantâneo, recebo um erro:

Failed to perform an online medium merge (VERR_DISK_FULL)

É quando a VM está ativada, mas pausada. Se eu forçar a desligar a VM e tentar a mesclagem, obtenho:

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).

Qual é a maneira mais fácil de sair dessa bagunça? O sistema operacional host está executando o Linux Mint.

    
por Michael Kropat 24.03.2014 / 19:43

1 resposta

0

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:

  1. 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
    
  2. 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/
    
  3. 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/
    
  4. 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
    
  5. 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/
    
  6. 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.

  7. 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é?

    
por 24.03.2014 / 22:17