VirtualBox: Online-Medienzusammenführung konnte nicht durchgeführt werden (VERR_DISK_FULL)

VirtualBox: Online-Medienzusammenführung konnte nicht durchgeführt werden (VERR_DISK_FULL)

Ich führe eine Windows-VM auf einer 128 GB SSD aus. Ich habe der VM eine 127 GB große virtuelle Festplatte zugewiesen, weil ich dachte, sie könnte den gesamten Speicherplatz auf der Festplatte beanspruchen. Was ich vergessen habe, ist der Speicherplatz, den die 3 VM-Snapshots benötigen, die ich erstellt habe und die auf derselben physischen Festplatte gespeichert sind. Jetzt ist auf der Festplatte kein Speicherplatz mehr frei und die VM läuft nicht.

Ich möchte Speicherplatz auf dem physischen Laufwerk freigeben, indem ich alle Snapshots lösche. Leider erhalte ich beim Versuch, den Snapshot zu löschen, eine Fehlermeldung:

Failed to perform an online medium merge (VERR_DISK_FULL)

Das ist der Fall, wenn die VM zwar eingeschaltet, aber angehalten ist. Wenn ich die VM zwangsweise ausschalte und die Zusammenführung versuche, erhalte ich:

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

Was ist der einfachste Weg, aus diesem Schlamassel herauszukommen? Auf dem Host-Betriebssystem läuft Linux Mint.

Antwort1

Ich hasse es, mich mit dem geheimnisvollen Medienregistrierungssystem von VirtualBox herumzuschlagen ... Disks freizugeben und zu versuchen, Snapshots erneut anzuhängen und diesen ganzen Unsinn, also habe ich es auf die einfachste Art und Weise gemacht, die mir eingefallen ist: die VM-Disk-Images auf ein größeres Laufwerk kopieren, das Laufwerk mountenam ursprünglichen Pfad der VM, führen Sie die Befehle zum Löschen des Snapshots erneut aus und kopieren Sie dann das endgültige, kleinere Disk-Image zurück auf das Originallaufwerk. Alle grausamen Details folgen:

  1. Da ich LVM verwende, erstelle ich zuerst ein neues LV zur Speicherung der Dateien:

    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. Als nächstes kopiere ich die VM-Disk-Images auf das neue LV:

    cd /var/vms
    sudo mkdir vm-resize
    sudo mount /dev/mapper/vm-resize vm-resize/
    sudo cp -a somevm/* vm-resize/
    
  3. Dann mounte ich das neue LV im selben Pfad, in dem meine SSD gemountet war:

    umount somevm/ vm-resize/
    sudo mount /dev/mapper/vm-resize somevm/
    
  4. Schließlich kann ich alle Snapshots „löschen“ (wodurch sie in das aktuelle Disk-Image eingefügt werden):

    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
    
  5. Aber wir sind noch nicht fertig: Als nächstes montiere ich meine beiden LVs wieder an ihrem ursprünglichen Standort:

    sudo umount somevm/
    sudo mount somevm/
    sudo mount /dev/mapper/vm-resize vm-resize/
    
  6. Dann müssen wir das neue, kleinere Disk-Image zurück auf das Originallaufwerk verschieben:

    sudo rm somevm/Snapshots/*.vdi
    sudo cp -a vm-resize/somevm.vdi somevm/somevm.vdi
    

    An diesem Punkt möchten Sie die VM testen, um sicherzustellen, dass sie funktioniert.

  7. Führen Sie dann abschließend (diesmal wirklich) die Bereinigung durch:

    sudo umount vm-resize
    sudo cryptsetup remove vm-resize
    sudo lvremove somevg/vm-resize
    

So einfach, oder?

verwandte Informationen