VirtualBox擴大CentOS的LVM硬碟筆記
前言
VirtualBox使用虛擬動態映像檔(vdi),VDI的好處在於你能夠保留最大到2TB的擴增空間,但卻又只會佔用實際儲存的資料。具體來說,vdi可以讓GuestOS(在此指虛擬機器)當中讀取起來有到2TB(大概2024GB)的硬碟,但在HostOS(在此指實際安裝虛擬機器的本機端)中只會佔用vdi中實際儲存的檔案,可能只需要23GB。當你發現VDI的大小超過HostOS所能允許的空間的話,就直接更換VDI儲存位置,放在更大的硬碟空間裡面就行了,非常方便。
問題敘述
之前在建立VDI時的錯誤決定,讓他的實體空間只有8GB,這對於我系統的要求是不夠的。所以得想辦法讓他擴大才行。
HostOS是Windows XP,GuestOS則是Linux CentOS 5 final。
GuestOS的硬碟在一開始安裝CentOS時都被切割成LVM(Logical Volume Manager)格式——而我後來才知道,這真是個麻煩的格式。因此調整大小的步驟就會多了很多繁雜的步驟。
那麼,接下來我就一步一步地去記錄我是怎麼調整VDI大小的吧。
擴大VDI虛擬大小空間
一、取得Clonezilla
VirtualBox並沒有直接擴大VDI的功能,網路上大部分的教學都是使用GPart Live CD來複製硬碟分割。但很遺憾的,GPart沒辦法讀取LVM (是的,真的很煩人),所以我採用國人自製的自由軟體Clonezilla Live。
在VirtualBox當中利用掛載光碟映像檔的方式將Clonezilla掛載上去之後,就可以利用Clonezilla開機來複製硬碟資料。
二、建立新的VDI硬碟
我建立一顆新的VDI硬碟,這次把大小提昇到極限值2TB。然後把舊的8GB VDI硬碟跟2TB VDI硬碟都掛到同一台虛擬機器上。
三、使用Clonezilla複製硬碟
我利用Clonezilla將舊硬碟複製到新硬碟去,細節我沒有特別記錄。但是必須讓它保持原本的分割區,不要放大分割區。因為對LVM來說,放大分割區並沒有意義。整個複製作業大概花了我30分鐘。
複製完成之後關掉虛擬機器,卸載就VDI硬碟跟Clonezilla,再以新硬碟開啟,可以成功啟動。而且利用「fdisk -l」的指令查詢,會發現到除了原本的分割區之外,還有很多空間可以利用。
四、擴大LVM的空間
鳥哥的fdisk跟LVM教學中還蠻詳細的,在此我僅節錄指令步驟:(我的LVM主要空間是「/dev/VolGroup00/LogVol00」,VDI硬碟代號是「/dev/hdb」)
- 進入fdisk,用「n」新增分割,選擇「p」主分割,編號為「3」(因為我原本系統中1為boot,2為其他空間),然後指令「w」建立分割並離開。
- 使用「partprobe」讓核心重新抓取一次硬碟分割表,成功建立第三個分割,代號是「/dev/hdb3」。
- 用「pvcreate /dev/hdb3」建立新的PV,然後用「pvscan」檢查。
- 用「vgextend /dev/VolGroup00/LogVol00」來加大VG。
- 用「vgdisplay」檢查,注意訊息中會有類似「Free PE / Size 16486 / 2 TB」(正確數字我有點忘了),那個「16486」就是待會可以新增的空間。
- 用「lvresize –l + 16486 /dev/VolGroup00/LogVol00」加大空間。
- 用「resize2fs /dev/VolGroup00/LogVol00」把LV的容量擴大到整個檔案系統可以允許的上限。需要耗費一段時間,此時VDI實際大小也會逐漸加大。
- 完成後可以用「df -h」來檢查是否有真的擴大了。
到目前為止,儘管VDI的虛擬大小總算擴大到2TB了,但實體大小卻也從7GB增大到23GB。進去虛擬機器中查詢使用量,卻也只有5GB多的用量而已。我猜可能是2TB所需要得區塊量(blocks)比較多,所以也佔去了不少空間。這就跟「買了80G硬碟,實際上可用只有75G」的道理一樣。詳細的原理請回去查查「作業系統」的課本吧。
即使如此,現在VDI的實際大小還是太大了,我們下一節就來談談如何減少VDI的實體大小。
縮小VDI實際檔案大小
VirtualBox的VDI的實際大小似乎是取決於虛擬機器當中動到的區塊量。也就是說,即使你在虛擬機器當中刪除了檔案,但VDI的實際大小並不會因此減少。因此VDI只會越用越多,並不會縮小。
在此有兩種方法可以使用:VirtualBox的VBoxManage提供了「modifyhd」來清除被設為0的區塊以壓縮VDI的實際大小;或用檔案壓縮工具7-zip來減少檔案大小。以下一一介紹作法。
VBoxManage的modifyhd
自由流浪的心靈世界中介紹縮小VirtualBox VDI檔案的作法十分詳細,我參考其他資料之後整理的大致上步驟如下
- 先刪除虛擬機器裡面不需要的檔案。
- 安裝「zerofree」這個工具,RPM Search裡面可以找到給Red Hat/CentOS的版本。RPM安裝方法可以參考鳥哥,指令是「rpm –ivh [*.rpm]」。
安裝完畢之後,可以用「/usr/sbin/zerofree」來使用他 - 重新啟動虛擬機器,進入CentOS的單機模式(single user mode)。具體作法是開機時按esc進入選單,按e編輯選單內容,再選擇有「kernal」那一項按e編輯開機參數。進入指令列之後再原有指令最後加上「singel」,然後按b開機即可。
- 執行init 1 (還沒去查這到底是什麼功能)
- 將硬碟以ro模式掛載:mount -n -o remount,ro -t ext3 /dev/VolGroup00/LogVol00 /
- 執行zerofree:/usr/sbin/zerofree /dev/VolGroup00/LogVol00。他需要花上好長一段時間來作這個動作,請慢慢等待。
- 完成zerofree之後關閉虛擬機器。
- 在HostOS底下執行壓縮指令:VBoxManage modifyhd 你的VDI位置.vdi compact。當然,VBoxManage的執行位置你也要修改成你安裝VirtualBox的位置才行。
整個壓縮過程大概耗費2小時完成。
完成之後,原本在虛擬機器中刪除檔案所減少的空間,也讓VDI實際大小減少了。
7-zip壓縮
使用modifyhd之後讓VDI的實體大小從23GB減到22GB,但這大小對我來說仍然是過大的負荷。當我架設完虛擬機器而不需要執行時,可以考慮採用7-zip之類的壓縮軟體來壓縮檔案。我選擇使用7-zip Portable,一來這是開放原始碼的自由軟體;二來7-zip可以壓縮超過2GB大小的檔案,而且壓縮比例又很高,儘管比較需要花時間;最後Portable則是不需要安裝即可執行的版本,下載下來馬上就可以使用。
利用7-zip壓縮了22GB的VDI檔案之後,我取得了2GB的壓縮檔,成果讓我非常滿意。
一邊找尋資料、一邊實際操作,然後又來不斷修改這篇Blog。這一篇是我大概一天多的成果,又是一篇用時間跟精力換來的筆記記錄,還好最後有達到我想要的成效,真是可喜可賀。