VirtualBox:無法執行線上媒體合併(VERR_DISK_FULL)

VirtualBox:無法執行線上媒體合併(VERR_DISK_FULL)

我在 128GB SSD 上執行 Windows VM。我為虛擬機器分配了一個 127GB 的虛擬磁碟,認為它可以佔用磁碟機上的所有空間。我忘記考慮的是我拍攝的 3 個虛擬機器快照儲存在同一實體磁碟機上所需的磁碟空間。現在磁碟機上剩餘空間為 0,虛擬機器將無法運作。

我想做的是透過刪除所有快照來釋放實體磁碟機上的空間。不幸的是,當我嘗試刪除快照時出現錯誤:

Failed to perform an online medium merge (VERR_DISK_FULL)

此時虛擬機器已開啟但已暫停。如果我強制關閉虛擬機器並嘗試合併,我會得到:

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。

答案1

我討厭、討厭、討厭搞亂 VirtualBox 的神秘媒體註冊表系統...釋放磁碟並嘗試重新附加快照和所有這些廢話,所以我用我能想到的最簡單的方式做到了:將 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
    

    此時,您想要測試虛擬機器以確保其正常運作。

  7. 最後(這次是真正的)執行清​​理:

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

這麼簡單,對吧?

相關內容