2012年12月29日 星期六

VirtualBox 調整 Linux 虛擬機器的磁碟(虛擬硬碟)空間大小

筆者最近遇到 Linux 硬碟空間不足的問題。

從以前開始只要遇到 Linux 空間不夠的解決方法就是買一顆新硬碟來加裝,
接著進行磁區切割(partition),建立檔案系統(file system)再掛載(mount)起來,
如果不是用於硬碟空間每天持續成長的情況,基本上這樣就能夠解決了大部份的問題。

另外,也能夠在安裝 Linux 時選擇用 LVM(Logical Volume Manager),
來達成動態調整硬碟磁區大小的功能,
但 LVM 最大的缺點就是一定要確保我們的 Linux 系統有良好的備份機制,
否則當 LVM 其中一個磁區或硬碟壞掉時,是很難救回資料的。

這兩種增加硬碟空間的方式就端看各位怎麼抉擇了。

不過,此次要增加硬碟空間的主角是虛擬機器,
我們將示範如何使用 LVM 幫虛擬機器達成動態調整硬碟磁區大小。(也適用一般的實體環境)



以下皆以 VirtualBox 搭配 Debian 虛擬機器的環境進行示範。
首先安裝一個全新的 Debian 系統,給定磁碟大小為 20 G 。


在安裝過程中選擇手動切割磁區並設定 LVM
由下圖可以看到藍線框的是筆者設定的 VG(Volume Group)名稱,
紅線框LV(Logical Volume)名稱。
此處筆者習慣設定 LV 時也順便標上預定給定的磁區,
例如 LVM_home 就是預定要給 /home 的磁區。


安裝好系統後,開機後輸入指令看一下各磁區大小:
df -h


此次目標是要將 /home 磁區多加上 10G。

讓我們先將 Debian 虛擬機器關機。
然後在 Debian 虛擬機器的設定檔中調整硬碟大小。

由於我們剛剛在安裝虛擬機器時將硬碟大小設定為固定大小,
因此必須在「存放裝置」再加入一個新的虛擬硬碟「NewHardDisk1.vdi」,
這個新的虛擬硬碟就是我們接下來要到虛擬機器的系統內設定加入到 VG 會用到的虛擬硬碟。


設定完成新增虛擬硬碟後,再將虛擬機器開機,
並輸入以下指令確認系統是否有偵測到新虛擬硬碟:
fdisk -l 
以上的指令可看到有兩顆硬碟:/dev/sda/dev/sdb !
其中 /dev/sdb 就是剛剛加入的新硬碟!


由於剛加入的虛擬硬碟並沒有磁碟分割表,所以無法被使用。
因此要先做切割磁碟動作,輸入以下指令進行磁碟切割:
fdisk /dev/sdb
接著照下圖紅線部份輸入,將整顆硬碟切割成一個磁區。


完成後,重開虛擬機器後,同樣用 fdisk -l 檢視,
就可以發現多了一個硬碟磁區 /dev/sdb1 可使用。


接下來要將新硬碟磁區 /dev/sdb1 加入到 LVM 中,
我們將會用到這些指令: pvcreate vgextend

pvcreate  是將一個新磁區變成 PV 。
vgextend 是將指定的 PV 加入到指定的 VG 中。

以下是將新硬碟磁區 /dev/sdb1 加入到名稱為 LVM 的 VG 中指令。
pvcreate /dev/sdb1
vgextend LVM /dev/sdb1


完成後可用 pvdisplay 進行檢視,可以發現 LVM VG 多了一個 PV(Physical Volume)。
此處要注意的是新加入硬碟磁區雖然空間有 10G ,
但約有 717 K是不能使用的。


確認新加入的硬碟有加入到 VG 之後,
就可以進行原本 LV 空間的擴充(建議先將要擴充的磁區umount)
umount /dev/LVM/LVM_home
接著讓我們將全部的可用空間(10G - 717KB 約 9.99 G)加入到 /home 吧!
lvextend -L +9.99G /dev/LVM/LVM_home
此處要注意的是被加入的磁區位置其實是在「/dev/[VG名稱]/[LV名稱]」,
所以如果想增加 /home 的磁區大小,就是要加到 /dev/LVM/LVM_home 才對喔


新增完成後,需要以 e2fsck -f 以及 resize2fs 做整個磁區的檔案系統的檢查跟重新調整磁區大小。

因為新增完磁區之後為了保險起見,
要進行一下檔案系統的檢查,
檢查是否有沒有磁區錯誤或是需要修復的磁區,
接著當然還要告訴我們的作業系統我們的 LVM 磁區大小有變動,
如此才能確保正常運作喔!
所以請分別輸入以下指令:
e2fsck -f /dev/LVM_home
resize2fs -p /dev/LVM_home


完成後,重開機,輸入以下指令看看成果:
df -h
可以看到 /home 磁區成功多了 10G 的空間!


以上就是如何在 VirtualBox 上操作 LVM 的小小經驗!

沒有留言: