如何用 LVM 動態擴充磁碟空間 文章首圖

如何用 LVM 動態擴充磁碟空間

如何用 LVM 動態擴充磁碟空間

在伺服器維運或開發環境中,磁碟空間不足是常見的痛點。過去若使用傳統的分區方式(如 /dev/sda1),一旦空間耗盡,往往需要備份資料、刪除分區、重新建立並調整大小,過程繁複且風險極高。

Linux 的邏輯卷管理器(Logical Volume Manager, 簡稱 LVM)正是為了解決這個問題而生。LVM 的核心優勢在於其「抽象層」設計,允許系統管理員在不中斷服務的情況下,動態地擴充或縮減磁碟空間。本文將以 Ubuntu 22.04 / Debian 12 為例,帶你一步步掌握 LVM 的擴充技巧。

前置準備與環境確認

在開始操作前,我們必須釐清一個重要概念:LVM 的擴充分為兩個階段。第一階段是增加底層物理磁碟(Physical Volume, PV)的空間;第二階段才是讓 LVM 感知並使用這些新增的空間。

假設我們有一個現有的 LVM 結構,其中包含一個已佔用 80% 空間的邏輯卷 /dev/mapper/vg0-lv_home。請先使用以下指令確認目前的磁碟狀態:

# 查看邏輯卷與檔案系統的使用情況
df -h

# 查看 LVM 的詳細結構
lvdisplay
vgdisplay
pvdisplay

步驟一:增加底層磁碟空間

LVM 本身不直接管理硬體磁碟,而是依賴底層的物理卷。因此,擴充的第一步通常是在虛擬化環境(如 VMware, VirtualBox)或雲端平台(AWS, GCP, Azure)中,對對應的磁碟進行擴容。

例如,在雲端控制台將 /dev/sdb 磁碟從 50GB 擴充至 100GB。擴充完成後,重新啟動系統或熱插拔磁碟(視硬體支援情況而定),並使用 lsblk 確認磁碟容量是否已更新:

lsblk

若磁碟容量未更新,可嘗試執行 partprobe 或重啟系統。

步驟二:更新物理卷(PV)資訊

當作業系統偵測到磁碟容量變大後,LVM 並不會自動使用這些新空間。我們需要告訴 LVM,底層的物理卷已經變大了。

使用 pvresize 指令即可輕鬆完成此步驟。請替換 <your_pv_path> 為實際的裝置路徑(例如 /dev/sdb/dev/sdb1):

sudo pvresize /dev/sdb

執行後,LVM 會重新掃描磁碟,並將新增的空間標記為「可用(Free PE / PE)」狀態。再次使用 vgdisplay 查看,你會發現 Volume Group 的 Free PE 數量增加了。

步驟三:擴充邏輯卷(LV)

現在,我們擁有可用的磁碟空間,接下來要將其分配給特定的邏輯卷。這裡有兩種常見情境:

情境 A:擴充邏輯卷,但不立即擴充檔案系統

若你希望稍後再處理檔案系統,可以使用 lvextend 指令:

# 將邏輯卷擴大 10G(可指定具體大小或使用 100%FREE 佔用所有剩餘空間)
sudo lvextend -L +10G /dev/mapper/vg0-lv_home

情境 B:同時擴充邏輯卷與檔案系統(推薦)

為了減少重啟或手動操作檔案系統的風險,LVM 提供了 lvextend-r 參數,它可以同時更新邏輯卷和底層檔案系統(支援 ext4, xfs 等):

# 同時擴充邏輯卷與檔案系統,使用所有剩餘空間
sudo lvextend -l +100%FREE -r /dev/mapper/vg0-lv_home

執行過程中,你會看到系統自動呼叫 resize2fsxfs_growfs 的訊息。若一切順利,df -h 將顯示該分區的可用空間已顯著增加。

常見問題與注意事項

1. 擴充後空間仍未增加? 這通常發生在檔案系統類型不支援線上擴充,或是操作順序錯誤。請確認:

  • 你使用的是 ext4xfsext4 可使用 resize2fsxfs 僅支援擴充,不支援縮減,且必須使用 xfs_growfs
  • 若使用 lvextend 而未加 -r 參數,需手動執行對應的檔案系統擴充指令。例如對於 xfs:
    sudo lvextend -l +100%FREE /dev/mapper/vg0-lv_home
    sudo xfs_growfs /mount/point

2. 如何縮減磁碟空間? LVM 縮減磁碟的風險遠高於擴充,因為資料遺失機率極高。一般建議僅在緊急情況下,並確保有完整備份後進行。對於 ext4,需先縮減檔案系統 resize2fs,再縮減邏輯卷 lvreduce;對於 xfs,則完全無法縮減,只能刪除重建。因此,規劃初期應預留足夠空間。

小結

透過 LVM,我們成功將磁碟管理的複雜度從「分區級」抽象到「卷級」。本文示範了如何透過 pvresize 更新底層硬體資訊,並利用 lvextend 動態擴充邏輯卷與檔案系統。這種非破壞性的操作方式,讓系統維運更加靈活且安全。

建議在生產環境操作前,務必先於測試環境模擬,並養成定期備份的習慣。掌握 LVM 的動態擴充能力,將是你成為高效 Linux 管理員的重要一步。