VirtualBox: オンライン メディア マージの実行に失敗しました (VERR_DISK_FULL)

VirtualBox: オンライン メディア マージの実行に失敗しました (VERR_DISK_FULL)

私は 128GB SSD で Windows VM を実行しています。ドライブの容量をすべて占有できると考え、VM に 127GB の仮想ディスクを割り当てました。私が考慮し忘れていたのは、同じ物理ドライブに保存されている 3 つの VM スナップショットに必要なディスク容量です。現在、ドライブの空き容量は 0 で、VM は実行されません。

私がやりたいのは、すべてのスナップショットを削除して物理ドライブのスペースを解放することです。残念ながら、スナップショットを削除しようとすると、エラーが発生します。

Failed to perform an online medium merge (VERR_DISK_FULL)

これは、VM がオンになっているが一時停止しているときです。VM を強制的に電源オフにしてマージを試みると、次のようになります。

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

この混乱から抜け出す最も簡単な方法は何でしょうか? ホスト OS は Linux Mint を実行しています。

答え1

VirtualBoxの難解なメディアレジストリシステムをいじるのは大嫌いです...ディスクを解放してスナップショットを再接続しようとするなど、そんなナンセンスなことをするのは大嫌いです。そこで、思いつく限りの最も簡単な方法でそれを実行しました。VMディスクイメージをより大きなドライブにコピーし、ドライブをマウントします。VMの元のパススナップショット削除コマンドを再実行し、最後に、最終的な小さなディスク イメージを元のドライブにコピーします。詳細は次のとおりです。

  1. LVM を使用するため、まずファイルを保持するための新しい LV を作成します。

    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. 次に、VM ディスク イメージを新しい LV にコピーします。

    cd /var/vms
    sudo mkdir vm-resize
    sudo mount /dev/mapper/vm-resize vm-resize/
    sudo cp -a somevm/* vm-resize/
    
  3. 次に、SSD がマウントされていたのと同じパスに新しい LV をマウントします。

    umount somevm/ vm-resize/
    sudo mount /dev/mapper/vm-resize somevm/
    
  4. 最後に、すべてのスナップショットを「削除」できます (これにより、スナップショットが現在のディスク イメージにマージされます)。

    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. しかし、まだ終わりではありません。次に、2 つの LV を元の場所に再マウントします。

    sudo umount somevm/
    sudo mount somevm/
    sudo mount /dev/mapper/vm-resize vm-resize/
    
  6. 次に、新しい、より小さなディスク イメージを元のドライブに戻す必要があります。

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

    この時点で、VM が動作するかどうかをテストする必要があります。

  7. そして最後に(今回は本当に)、クリーンアップを実行します。

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

とても簡単ですよね?

関連情報