[VirtualBox] 降低 VM 中 .vdi 硬碟檔案的大小

[VirtualBox] 降低 VM 中 .vdi 硬碟檔案的大小

今天用 VirtualBox 建立好一個建置專案程式的 Windows VM,

想說最近硬碟空間吃緊,還是來將 VM 檔案瘦身一下~

 

1. 清理 VM 中不必要的檔案

先進到 Windows VM 裡面,把不必要的檔案都清除乾淨,

例如可以先用 dism 清理 Win7 上的 WinSxS 目錄

接著對硬碟按右鍵 > Properties > Disk Cleanup,來執行系統的清理工作:

20160716_105646

 

這邊有不同類型的檔案可以清除,預設並沒有全選,

這邊可以看自己的需求,像我檢查了一下,應該全選是沒有問題的,就全勾了:

20160716_110059

 

切換到 More Options 頁面,這邊有兩個 Clean up 按鈕,先按下上面那個:

20160716_110143

 

這個其實就是把新增/移除程式的控制台叫出來,在這邊把不需要的軟體移除掉吧:

20160716_110136

 

另一個按鈕是清除掉系統還原點的檔案,基本上我都是使用 VirtualBox 本身的快照 (snapshot),

所以還原點對我來說沒什麼用,可以全刪 (其實它會保留最新的一個還原點啦):

20160716_110150  

 

最後按下 OK 後,就會開始清理工作了:

20160716_110205

 

2. 執行磁碟重組 (defragment)

要讓 VM 檔案變小,除了釋放出不必要的檔案空間外,

還得讓檔案在磁碟中的分布集中,這樣才有機會把沒有儲存檔案的磁區移掉~

對硬碟按右鍵 > Properties > Tools 頁面,選擇 Defragment now:

20160716_113709

 

對所有的硬碟都按下 Analyze disk 看看分散的程度:

20160716_113720

 

雖然只有 6% 的零碎部分,不過還是可以按 Defragment disk 來整理一下:

20160716_11394620160716_115619  

 

3. 將未用到的磁區清除為零

這個動作是 VirtualBox 執行 compact 瘦身指令的必要條件,

只有全都為零的磁區,VirtualBox 才有機會把它從 VM 的 VDI 磁碟檔案中移除~

這邊我們可以利用 SysInternals 提供的 SDelete 工具來做~

 

如果有用 Chocolatey 的話,可以先用 choco install sysinternals 安裝,

接著進到 C:ProgramDatachocolateylibsysinternalstools 目錄,

就可以看到 sdelete.exe,用 cmd.exe 來執行下面的指令將 C: 未用到的磁區清為零:

sdelete.exe -z c:

 

所有的磁碟都要執行上面的指令,把 C: 換成對應的槽就行了~

下面是我執行的結果 (這個動作很花時間,可能要好幾個小時,看硬碟大小):

C:ProgramDatachocolateylibsysinternalstools>sdelete.exe -z c:
SDelete v2.0 - Secure file delete
Copyright (C) 1999-2016 Mark Russinovich
Sysinternals - www.sysinternals.com
SDelete is set for 1 pass.
Free space cleaned on C:
1 drive cleaned.

 

4. 執行 VirtualBox 的 modifymedium 指令將 VDI 檔案瘦身

進到 VM 的目錄裡,執行 modifymedium (或 modifyhd) 指令,加上 –compact 參數,

就可以將 VDI 硬碟檔中的零磁區移除掉:

VBoxManage modifymedium disk disk1.vdi --compact

 

這個動作也挺花時間的,要耐心等一下…

要注意的是,目前 VirtualBox 只支援對 .vdi 檔案執行 –compact 瘦身動作,

其他的檔案格式 (如 .vmdk) 是還不支援的喔 (只能透過 clonemedium 的方式來達到)~

 

執行前後,可以看到 disk1.vdi 大約減少了 1.9 GB 的大小:

testuser@localhost ~/VirtualBox VMs/Win7 $ ll *.vdi
-rw-------  1 testuser  staff  20640169984 Jul 16 15:06 disk1.vdi
testuser@localhost ~/VirtualBox VMs/Win7 $ ll *.vdi
-rw-------  1 testuser  staff  18559795200 Jul 16 15:22 disk1.vdi

 

雖然看起來只減少了 1.9 GB 的大小,不過對於用網路傳輸 VM 檔案 (或是做成 OVA) 來說,

這個做法也是可以降低不少傳輸的時間,可以參考看看囉~

 

參考資料:How to compact VirtualBox’s VDI file size?

 

(本頁面已被瀏覽過 6,775 次)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料