![VirtualBox: オンライン メディア マージの実行に失敗しました (VERR_DISK_FULL)](https://rvso.com/image/1402591/VirtualBox%3A%20%E3%82%AA%E3%83%B3%E3%83%A9%E3%82%A4%E3%83%B3%20%E3%83%A1%E3%83%87%E3%82%A3%E3%82%A2%20%E3%83%9E%E3%83%BC%E3%82%B8%E3%81%AE%E5%AE%9F%E8%A1%8C%E3%81%AB%E5%A4%B1%E6%95%97%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F%20(VERR_DISK_FULL).png)
私は 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の元のパススナップショット削除コマンドを再実行し、最後に、最終的な小さなディスク イメージを元のドライブにコピーします。詳細は次のとおりです。
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
次に、VM ディスク イメージを新しい LV にコピーします。
cd /var/vms sudo mkdir vm-resize sudo mount /dev/mapper/vm-resize vm-resize/ sudo cp -a somevm/* vm-resize/
次に、SSD がマウントされていたのと同じパスに新しい LV をマウントします。
umount somevm/ vm-resize/ sudo mount /dev/mapper/vm-resize somevm/
最後に、すべてのスナップショットを「削除」できます (これにより、スナップショットが現在のディスク イメージにマージされます)。
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
しかし、まだ終わりではありません。次に、2 つの LV を元の場所に再マウントします。
sudo umount somevm/ sudo mount somevm/ sudo mount /dev/mapper/vm-resize vm-resize/
次に、新しい、より小さなディスク イメージを元のドライブに戻す必要があります。
sudo rm somevm/Snapshots/*.vdi sudo cp -a vm-resize/somevm.vdi somevm/somevm.vdi
この時点で、VM が動作するかどうかをテストする必要があります。
そして最後に(今回は本当に)、クリーンアップを実行します。
sudo umount vm-resize sudo cryptsetup remove vm-resize sudo lvremove somevg/vm-resize
とても簡単ですよね?