VirtualBox:无法执行在线媒体合并(VERR_DISK_FULL)


0

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

走出这个烂摊子的最简单方法是什么?主机操作系统正在运行Linux Mint。

Answers:


0

我讨厌,讨厌,讨厌搞乱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. 然后我将新LV安装在我安装SSD的相同路径上:

    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. 但是我们还没有完成:接下来我将我的两个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
    

这么简单吧?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.