天天看點

虛拟機硬碟vmdk壓縮瘦身并挂載到VirtualBox壓縮vmdkvmdk挂載到VirtualBoxvmdk移動到其它盤

這個問題其實困擾了挺久的,一直沒閑情去解決,網上搜尋過很多壓縮方法感覺都太麻煩太複雜,因最近在windows上搞docker就一并解決了。

壓縮vmdk

首先下載下傳DiskGenius,這工具很牛X,相信很多人都用過其硬碟分區、合并、資料恢複等功能,可謂相當強大,甚至虛拟硬碟檔案也不放過。。。

首先把要壓縮的虛拟硬碟vmdk打開(菜單:“硬碟 –> 打開虛拟硬碟檔案”)。打開後就可以在左邊的視窗中看到加載上的虛拟磁盤了。

虛拟機硬碟vmdk壓縮瘦身并挂載到VirtualBox壓縮vmdkvmdk挂載到VirtualBoxvmdk移動到其它盤

建立一個容量不小于源虛拟硬碟的虛拟硬碟vmdk檔案

虛拟機硬碟vmdk壓縮瘦身并挂載到VirtualBox壓縮vmdkvmdk挂載到VirtualBoxvmdk移動到其它盤
虛拟機硬碟vmdk壓縮瘦身并挂載到VirtualBox壓縮vmdkvmdk挂載到VirtualBoxvmdk移動到其它盤

選擇(菜單:“工具 –> 克隆硬碟”),彈出對話框後,在“選擇源硬碟”時選擇要壓縮的源vmdk虛拟硬碟,在“選擇目标硬碟”時選擇剛剛我們建立的vmdk虛拟硬碟,然後點“開始”等待壓縮完成即可。

虛拟機硬碟vmdk壓縮瘦身并挂載到VirtualBox壓縮vmdkvmdk挂載到VirtualBoxvmdk移動到其它盤

vmdk挂載到VirtualBox

先把源vmdk備份,再把壓縮好的vmdk涵蓋源vmdk,之後啟動虛拟機。。。

沒啥意外會報出如下錯誤

虛拟機硬碟vmdk壓縮瘦身并挂載到VirtualBox壓縮vmdkvmdk挂載到VirtualBoxvmdk移動到其它盤
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壓縮瘦身并挂載到VirtualBox壓縮vmdkvmdk挂載到VirtualBoxvmdk移動到其它盤

vmdk移動到其它盤

disk.vmdk從C槽移到其它盤,然後在VirtualBox中将虛拟硬碟指向新的disk.vmdk,這時會報錯

錯誤:打開虛拟硬碟失敗,UUID already exists           

因為這個UUID在系統資料庫裡已經存在,我們用指令修改一下vmdk的路徑

VBoxManage internalcommands sethduuid X:\yourDir\disk.vmdk           

然後VirtualBox中重新指向這個disk.vmdk就好了

參考: