擴增Ubuntu的硬碟容量(LVM)
在Linux環境下擴增磁碟容量,跟Partition based的Windows比較起來還真的不是普通的複雜,不過這些觀念與設定都是為了日後擴增應用上的彈性。這個範例將步驟記錄在此以利日後查詢,指令預設先一律sudo -i
開始。
LVM觀念
LVM(Logical Volume Manager)中文為邏輯捲軸管理員,透過下圖複雜的邏輯層切割,來讓大型伺服系統可以用更彈性的方式來調整磁碟空間。首先看一下下面這張圖:
Linux透過下面這三個邏輯架構將系統與實體裝置切開,日後硬體的資源將可以透過邏輯的方式被直接使用,不用再經過備份、搬移、還原等步驟。
- LV(Logical Volume)邏輯卷:邏輯層的Partition,某個檔案系統目錄可以指向要用哪個LV。
- VG(Volume Group)卷組:邏輯層的硬碟,一個VG可以由數個PV聯合組立。當VG建立後,內部會有名為PE(Physical Extent)的無數小區塊出現,這個我們可以視為傳統硬碟的Block。
- PV(Physical Volume)實體卷:某個實體硬碟中切出的Partition就是一個PV。
硬碟環境檢視
首先檢試一下當前的磁碟機以及磁碟分割區:
fdisk -l
我們可以發現有一顆名為/dev/sda
的20GB硬碟,並且被分割成三個Partition(sda1、sda2、sda3),另外也可以瞥見名為/dev/mapper/ubuntu--vg-ubuntu--lv
的LV出現。
接著馬上輸入指令來檢視LV的相關狀態:
lvdisplay
我們發現了事實是,/dev/mapper/ubuntu--vg-ubuntu--lv
這個LV是由ubuntu-vg
這個VG切出,且不知道為何只有給10GB?這代表屬於LV
整理一下目前的發現,輸入下列指令列出關係圖:
lsblk
接著透過下列指令來查詢VG的相關狀態:
vgdisplay
我們可以看出這個VG採用的是lvm2
格式,SIZE為18.22GB
,其中已經分配了10GB出去了(Alloc PE / Size),還有8.22GB的PE尚未分配(Free PE / Size)。
擴增硬碟容量
因為我是VM環境所以可以針對虛擬硬碟進行邏輯上的擴增,我這邊打算把20GB擴增到40GB,首先把作業系統關機後,到VMware裡面針對硬碟進行Expand
擴增。
開機後為了要方便的擴增容量,可以請parted
程式來幫忙,若無可先下載:
apt-get install parted
執行parted
後可輸入print
指令查看狀態,可以看到/dev/sda
磁碟機已經變成42.9GB
,但是分割區編號3
的容量仍然是19.6GB
:
接著按照下列指令輸入來延伸磁區:
(parted) resizepart
Partition number? 3
End? [21.5GB]? 100%
最後再print確認一次狀態確定已經擴充到40GB
完成了(41.0GB),可以輸入quit
離開並reboot
。
擴增LVM容量
重開機後開心地輸入pvdisplay
看看容量有沒有擴增,結果發現並沒有,依然維持在18GB
。
輸入下列指令更新PV容量大小:
pvresize /dev/sda3
完成後馬上pvdisplay
確認,發現PV的容量改變為38.23GB
了:
接著輸入lvdisplay
確認依然停留在10GB
:
接下來就是準備將VG剩餘的PE空間,全部100%
都讓給LV的時刻了。請輸入下列指令:
lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
系統會返回下列訊息,代表LV已經由原本占用2560PE,提升變成佔用了9785PE:
Size of logical volume ubuntu-vg/ubuntu-lv changed from 10.00 GiB (2560 extents) to 38.22 GiB (9785 extents).
Logical volume ubuntu-vg/ubuntu-lv successfully resized.
再來一次lvdisplay
確認已經LV Size升級到38.22GB
:
將LV的空間更新到檔案系統
做到這邊還別高興,你還要輸入指令將LV的空間釋放給檔案系統(File System),我們先輸入磁碟檢查指令看看:
df -h
可以看到/dev/mapper/ubuntu--vg-ubuntu--lv
這個LV依然是10GB
...
輸入指令讓LV的新容量釋放給檔案系統
resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv
在檢查一次磁碟容量,透過檔案系統來確定LV的可用空間為38GB
。
至此,硬碟容量擴充總算大功告成。