這個問題其實困擾了挺久的,一直沒閒情去解決,網上搜尋過很多壓縮方法感覺都太麻煩太複雜,因最近在windows上搞docker就一併解決了。
壓縮vmdk
首先下載DiskGenius,這工具很牛X,相信很多人都用過其硬碟分割槽、合併、資料恢復等功能,可謂相當強大,甚至虛擬硬碟檔案也不放過。。。
首先把要壓縮的虛擬硬碟vmdk開啟(選單:“硬碟 –> 開啟虛擬硬碟檔案”)。開啟後就可以在左邊的視窗中看到載入上的虛擬磁碟了。
新建一個容量不小於源虛擬硬碟的虛擬硬碟vmdk檔案
選擇(選單:“工具 –> 克隆硬碟”),彈出對話方塊後,在“選擇源硬碟”時選擇要壓縮的源vmdk虛擬硬碟,在“選擇目標硬碟”時選擇剛剛我們新建的vmdk虛擬硬碟,然後點“開始”等待壓縮完成即可。
vmdk掛載到VirtualBox
先把源vmdk備份,再把壓縮好的vmdk覆蓋源vmdk,之後啟動虛擬機器。。。
沒啥意外會報出如下錯誤
UUID {00000000-0000-0000-0000-000000000000} of the medium
'C:\Users\Neil\.docker\machine\machines\default\disk.vmdk' does not match the value
{131b2a66-a477-41dd-b920-1a0a460d3ec8} stored in the media registry
('C:\Users\Neil\.VirtualBox\VirtualBox.xml').
返回 程式碼:
E_FAIL (0x80004005)
元件:
MediumWrap
介面:
IMedium {4afe423b-43e0-e9d0-82e8-ceb307940dda}
複製程式碼
大概意思是壓縮後的vmdk檔案的UUID和原來登錄檔裡的UUID不匹配
so good,我們到VirtualBox安裝目錄C:\Program Files\Oracle\VirtualBox
在目錄空白處 shift+右建 –> 選擇“在此處開啟命令視窗”
輸入
VBoxManage internalcommands sethduuid C:\Users\Neil\.docker\machine\machines\default\disk.vmdk 131b2a66-a477-41dd-b920-1a0a460d3ec8
複製程式碼
返回要修改的UUID值就成功了
UUID changed to: 131b2a66-a477-41dd-b920-1a0a460d3ec8
複製程式碼
vmdk移動到其它盤
disk.vmdk從C盤移到其它盤,然後在VirtualBox中將虛擬硬碟指向新的disk.vmdk,這時會報錯
錯誤:開啟虛擬硬碟失敗,UUID already exists
複製程式碼
因為這個UUID在登錄檔裡已經存在,我們用命令修改一下vmdk的路徑
VBoxManage internalcommands sethduuid X:\yourDir\disk.vmdk
複製程式碼
然後VirtualBox中重新指向這個disk.vmdk就好了
參考: