LVM : 擴充套件檔案系統的容量

sparkdev發表於2018-12-20

如果發現檔案系統的容量不足了,可以通過 LVM 輕鬆的進行擴充套件(當然也可以進行縮減操作)。本文將緊接前文中的 demo 詳細的介紹擴充套件檔案系統的操作過程。說明:本文的演示環境為 ubuntu 16.04。

警報:可用磁碟空間不足

當我們收到可用磁碟空間不足的警報時,就需要去診斷磁碟空間相關的問題了。一般的結果是:增加磁碟容量(簡單有效,清理掉一些看似沒用的檔案是件風險極大的事情)!
df 命令可以幫助我們檢視檔案系統的容量:

上圖中的 LV nicklv00 的總容量為 15G,此時可用容量已經不足 1G了,我們接下來擴充套件這個 LV。

檢視當前系統中磁碟的概況

在動手擴充套件檔案系統的容量前,我們需要先搞清楚當前系統中磁碟的基本情況。lsblk 命令可以幫助我們檢視系統上的所有塊裝置列表(下面命令中筆者通過 -e 選項排除了 loop 裝置和光碟機):

$ lsblk -e 7,11

我們比較關注掛載點 /home/doc 對應的檔案系統的情況:它的磁碟型別為 LVM,對應的 LV 名稱為 nicklv00,LV 在名稱為 nickvg 的 VG 中。其中磁碟的整個容量為 20G,而 LV 的容量只有 15G。我們先用 lvdisplay 命令來觀察下 LV 的詳細資訊:

$ sudo lvdisplay nickvg/nicklv00

這裡比較重要的兩點是 LV 的容量為 15G,它所屬的 VG 名稱為 nickvg。接下來用  vgdisplay 命令檢視名稱為 nickvg 的 VG 的詳細資訊:

$ sudo vgdisplay nickvg

上圖顯示 VG 的容量為 19.97G,已經分配了 15G,還有 4.97G 是空閒的。如果我們的要求不高,可以直接把 VG 中空閒的 4.97G 分配給 LV nicklv00,但是我們希望給 nicklv00 多分些空間,比如 50G。所以我們需要繼續檢視 VG 的底層構成。
通過 pvs 可以檢視 pv 與 vg 的組成關係:

$ sudo pvs

VG nickvg 是由 PV /dev/sdd1 構成的,/dev/sdd1 的容量為 19.97G。要檢視 PV 的詳細資訊,可以使用 pvdisplay 命令:

$ sudo pvdisplay /dev/sdd1

至此我們已經搞清楚了系統當前的儲存系統(忽略了我們不太關心的磁碟),總結一下:硬碟裝置 /dev/sdd 的容量為 20G,其上建立了一個 20G 的硬碟分割槽 /dev/sdd1,硬碟分割槽 /dev/sdd1 被建立為 LVM 的物理卷(PV,PV 的名稱依然是 /dev/sdd1),大小仍然為 20G。在物理卷 /dev/sdd1 上建立了容量為 20G 的卷組(VG) nickvg,在 nickvg 中有一個 15G大小的邏輯卷(LV) nickvg/nicklv00。檔案系統就建立在 LV 上,掛載點為 /home/doc。

擴充套件方案

我們打算為 /home/doc 下掛載的檔案系統增加 50G 的容量,因此僅僅利用 VG 中剩餘的 4.97G 空間時不夠的。簡單起見,我們直接新增一塊容量為 50G 的硬碟(此處為虛擬磁碟),通過 LVM 新增到 VG 中,然後擴充套件 LV,並最終完成擴充套件檔案系統的任務。

新增磁碟並建立物理卷(PV)

在虛擬機器中新增虛擬磁碟並非難事,這裡不再細說,筆者新增的磁碟裝置檔案為 /dev/sde:

接下來請參照前文《LVM : 簡介》中的介紹建立磁碟分割槽,並用磁碟分割槽建立 LVM 物理卷(PV)。
筆者建立的磁碟分割槽為 /dev/sde1:

建立的物理卷如下所示:

擴充套件卷組(VG)

接下來我們需要通過 vgextend 命令擴充套件卷組。vgextend 命令可以把一個或多個物理卷(LV)加入到 VG 中:

$ sudo vgextend nickvg /dev/sde1

檢查 VG nickvg 的詳細資訊:

此時 VG 的容量已經變成了 69.94G,可用的容量有 54.94G,擴充套件 VG 成功了!再看看 VG 與 PV 的關係:

VG nickvg 由 /dev/sdd1 和 /dev/sde1 兩個 PV 組成,當前總的可用空間為 4.97G + 49.97G。

擴充套件邏輯卷(LV)

LVM 最主要的功能就是能動態地調整分割槽的大小,其實也就是修改邏輯(LV)的容量。修改 LV 容量的命令有 lvextend(擴充套件邏輯卷)和 lvreduce(縮減邏輯卷),這兩個命令的用法差不多,這裡我們只介紹 lvextend 命令。lvextend 命令的格式如下:
lvextend [-L (+size) -l (+PE 數)] 邏輯卷名稱
-L 選項表示為 LV 增加指定 size 的容量。
-l 選項表示為 LV 增加指定數目的 PE。
我們通過下面的命令來擴充套件 LV:

$ sudo lvextend -L 65G nickvg/nicklv00
或者:$ sudo lvextend -L 65G /dev/nickvg/nicklv00

然後檢查下 LV 的詳細資訊:

nickvg/nicklv00 邏輯卷的大小已經變成了 65G。再看看 PV 的資訊:

哈哈,居然不是直接用光 /dev/sde1 上的空間,而是先用光 /dev/sdd1 上的空間,然後從 /dev/sde1 上分配剩餘的空間。

縮減邏輯卷的方式和擴充套件邏輯卷的方式差不多,只不過使用的是 lvreduce 命令。

擴充套件檔案系統

resize2fs 命令用來擴充套件或收縮檔案系統的容量,但是這個命令只支援 ext2、ext3、ext4 格式的檔案系統。筆者的檔案系統為 ext4,所以可以使用 resize2fs 命令進行擴充套件。這個命令還有一個特點,如果是擴充套件檔案系統的容量,那麼不管目標檔案系統是否處於掛載狀態都可以執行。如果是縮減檔案系統的容量,則只能先解除安裝檔案系統,縮減容量後再重新掛載檔案系統。下面的命令把檔案系統的容量擴充套件至 LV 的總容量:

$ sudo resize2fs /dev/nickvg/nicklv00

再去檢視下檔案系統的資訊:

目標檔案系統已經顯示被擴充套件到了 64G(各種開銷),至此我們完成了檔案系統的擴容任務。

總結

使用 LVM 管理磁碟讓檔案系統的擴充套件/縮減變得非常容易,特別是可以自由的組合硬體磁碟為更大的容量單位(VG),使系統維護者的工作變得輕鬆不少。除此之外,LVM 還支援快照等特色功能,筆者將在接下來的文章中介紹如何使用 LVM 的快照。

參考:
在Linux中擴充套件/縮減LVM(第二部分)
vgextend man page
resize2fs man page

相關文章