說道尺寸,每個人的喜好都不太一樣,有人喜歡粗一點,有人喜歡長一點,也有人喜歡瘦一點,當然也有人喜歡大一點,但如果是虛擬機器的硬碟映像檔(Virtual Disk Image),我想大概沒有人喜歡它無限制大下去,特別是要傳送映像檔給另外一個人的時候,不管用網路傳,還是用隨身碟傳,都要傳上好一陣子,小一點3、4 GB,大一點1x GB,有時候隨身碟不夠大還塞不下去。

VirtualHDImage.png
圖1 肥胖的映像檔(4.43 GB)

  但真的映像檔都需要這麼大嗎?其實不盡然,有時候那個檔案只是虛胖或水腫而已,只要稍微用點方法還是榨得出油來。在Guest系統內,實際使用的硬碟大小其實都比映像檔小,比較圖1和圖2可以發現(這裡以VMWare為例),有部分空間被吃掉了。

RealUsed.png
圖2 Guest OS實際使用大小(3.6 GB)

  有人可能知道VMWare有提供一個Defragment的選項(圖3),類似硬碟重組工具,也有一個Compact選項,但奇怪的是有時候不管你做幾次,看著Progress bar跑上好幾十分鐘,映像檔就是沒變小,為什麼呢?前幾天,在製作資策會課程要用的虛擬機器,裝完Ubuntu 11.10 (這裡小小抱怨一下,Ubuntu 11.10的桌面系統超級超級超級超級難用,跟11.01比,根本是退步)、JDK 7和Eclipse 3.7後映像檔也不過2.6 GB,想說裝完Android SDK最多3.x GB,應該可以燒進一張DVD吧!沒想到一裝完Android SDK後,啥米!映像檔變成5.6 GB,怎麼突然暴肥了,難不成是在演《復胖男女》,尤其是Guest OS真的如圖2顯示只使用了3.6 GB,那多出來的2 GB到底是誰吃掉了?

Defragment.png
圖3 Defragment工具

   為了幫映像檔瘦身,我找了許多網站,連官方的文件都挖來看,一下子要掛載映像檔,一下子要對掛載的映像檔做Shrink preparation,但就是不work,就在快凌晨一點時,看到一絲絲曙光,在某論壇上看到一個神奇的指令 sudo vmware-toolbox ,本來已經不抱希望了,但還是試試看,一個對話框跑出來,然後選Shrink分頁,真的如論壇上的神人說的,找到root磁區,於是馬上把『Shrink』按鈕給它按下去,然後在確認對話框按下『Yes』按鈕(圖4),接著又是漫長的等待。

ShrinkPrepare.png
圖4 在Guest OS中使用Shrink preparation

  跑了許久的Preparation後,後跳出另外一個對話框確認你是否真的要進行Shrink?不然咧,我犧牲睡眠時間做了這麼久的preparation,不做Shrink要幹嘛?當然是按『Yes』,於是VMWare將虛擬機器凍結,又是一個Progress bar (圖5)跑出來,然後又是漫長的等待(剛剛的對話框應該改成:Shrink will take 20+ minutes, do you really want to continue?)。

Shrink.png
圖5 進行Shrink

  經過漫長的等待,進行完Shrink後將Guest OS關機(VMWare有些資料不會立即寫入映像檔,需要關閉Guest OS才會得到真的映像檔大小),從圖6可以看到瘦身的成果,又回到4 GB以內了。文章中的瘦身幅度好像不大,其實這是Shrink後,使用一陣子後再次Shrink,所以是從4.43 GB減到3.92 GB,只小小的瘦400 MB左右,但之前熬夜完成的瘦身比例就很大了,5.6 GB減到 3.6GB,整整減了2 GB。

AfterShrink.png
圖6 瘦身完成

  至於為什麼要這麼複雜,瘦身還要分成兩步驟(Shrink preparation --> Shrink),據VMWare官方文件的說法是,有時候Guest OS的檔案系統(ext 4似乎就是這類),並不會將刪除的檔案其配置的block標示為未使用(以這次的例子來說,下載Android SDK的暫存檔大約有1.x GB,刪除後還是佔用VMWare的blocks),所以VMWare無法回收已配置的硬碟空間。Shrink preparation的動作就是比對Guest OS的檔案配置表和VMWare的block使用情況,然後標示未使用的block,接著Shrink對仍然在使用的blocks進行整粒,讓blocks連續排列,然後未使用的blocks就可以歸還給了。至於為什麼有的檔案系統沒標示未使用的block呢?可能是為了效率吧?但實際原因恐怕要問那些開發者了。Well,資策會課程的虛擬機器已經完成,事情也告一段落了,希望以後這件事能夠在不進入Guest OS的前提下一個步驟就完成...

創作者介紹

Spirit的異想世界

dbi1463 發表在 痞客邦 PIXNET 留言(0) 人氣()