在管理 Linux 磁盤時,你是否遇到過這樣的困惑:正常擴容之后,發現GParted 顯示某個分區還有幾十 GiB 可用,但 df -h
卻提示該分區已接近滿額?這種 “空間幻覺” 背后是系統存儲管理的分層設計,本文將從原理到實踐,帶你徹底解決這個問題。
閱讀說明
一、背景與擴容步驟 這部分是關于虛擬機如何擴容步驟及相關背景
二、解決不一致問題(未正常擴容) 這一部分是說明按照擴容步驟正常擴容之后,但是使用df -h查看磁盤卻未發生任何改變。(可能是因為LVM2的原因)
后續其余部分是關于LVM2為什么會出現相關情況,及LVM相關操作的相關說明
根據實際情況選擇需要的部分閱讀。
一、背景與擴容步驟
環境:VMware 安裝的Ubuntu24.04 .1 server版本
事件起因:當我發現虛擬機磁盤空間被占滿時,進行了相關的擴容操作。如下圖所示:
1、發現磁盤告警
2、擴容
關閉虛擬機–>點擊硬盤–>擴展–>根據需要設置磁盤總大小 (我在截圖之前是60g,后來改成了70g,但是不影響具體步驟)
改好之后啟動虛擬機。
3、使用gparted工具調整大小(使用可視化工具,最簡單)
由于我安裝的Ubuntu server版本(如果使用的是其它桌面版,就不會存在這個問題,直接運行命令sudo gparted 即可),在命令行無法支持ui界面。所以我采用一個遠程工具(MobaXterm)進行ssh遠程連接到服務器(Ubuntu server)。
執行命令:
sudo gparted
可能遇到的問題:
1、未安裝gparted工具
sudo install gparted //安裝gparted工具
2、MobeXterm 可能會遇到的問題。如下圖:
打開圖上所示網頁,可以找到解決辦法:
執行命令,成功之后會看見gparted的ui界面,如下圖:
sudo xauth add $(xauth -f ~ml/.Xauthority list|tail -l) //命令中的ml改為自己的用戶名
sudo gparted //再執行這個命令即可正常打開
打開gparted工具界面之后,選擇想要更改大小的分區,鼠標右鍵–>Resize/Move
更改文件系統大小,可以直接拖動。也可以直接改數字,如圖(說明:截圖中是已經改過了的,未改之前會發現是有顏色區分的):
改好之后點擊Resize -> 再點擊上面勾按鈕
最后點擊應用(Apply)
說明:正常情況下,從開始步驟到這個地方,已經完成了虛擬機的擴容操作。,但是我裝虛擬機默認使用的LVM2 全稱是 Logical Volume Manager,即邏輯卷管理器。 就會出現擴容不成功(其實是擴容步驟還未完成,即df -h 與gparted不一致問題)。 最后我會說明為什么會出現這個問題。
4、發現不一致問題截圖對比
現象:GParted 顯示物理卷(如 /dev/sda3
)有未分配空間,但 df -h 顯示邏輯卷(如 /dev/mapper/ubuntu--vg-ubuntu--lv
)已接近滿額。
二、解決不一致問題(未正常擴容)
解決步驟:擴展邏輯卷 + 擴展文件系統
1、檢查卷組剩余空間
sudo vgdisplay # 查看卷組(如 ubuntu-vg)的剩余空間
輸出中 Free PE
有數值(圖中為 39.00 GiB),說明卷組有未分配空間。如圖:
2 、擴展邏輯卷
將邏輯卷(如 ubuntu-vg/ubuntu-lv
)擴展到卷組剩余空間的 100%:
sudo lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
(或指定具體大小:lvextend -L +39G /dev/...
)
3、擴展文件系統
根據文件系統類型選擇命令(ext4 用 resize2fs
,xfs 用 xfs_growfs
):
# ext4 示例
sudo resize2fs /dev/ubuntu-vg/ubuntu-lv
# xfs 示例
sudo xfs_growfs /dev/ubuntu-vg/ubuntu-lv
4 、驗證結果
再次執行 df -h
,確認邏輯卷的 “Size” 和 “Avail” 已更新。
三 、詳細解釋不一致的原因:
1. 顯示的對象不同
gparted
:顯示的是物理卷(PV) 的大小。即:硬盤上劃分出來的那個類型為lvm2 pv
的分區有多大。這是“分配給LVM的總空間”。df -h
:顯示的是邏輯卷(LV) 上的文件系統的使用情況。即:從LVM池子里劃出來的那個“邏輯分區”(如根目錄/
對應的那個卷)有多大以及用了多少。這是“你實際可用的空間”。
2. 層級關系
空間分配的流程是:物理磁盤 → 分區(PV) → 卷組(VG) → 邏輯卷(LV) → 文件系統 → 存儲文件。
gparted
在第二層,df -h
在第五層。中間的任何變化都會導致兩者顯示的數字不同。
四、為什么會出現這種情況?常見場景:
場景一:LVM卷組有剩余空間(最常見)
這是最普遍的情況。安裝系統時,你可能把整個磁盤都作為一個物理卷(PV)給了LVM的卷組(VG),但只從卷組中劃出了一部分空間來創建根文件系統(LV)。
gparted
顯示:整個PV的大小(例如:100GB)。df -h
顯示:根邏輯卷(LV)的大小(例如:90GB)。- 差異:剩下的 10GB 空間仍在卷組(VG)中,是未分配的“空閑空間”,可以被用來擴展現有的邏輯卷或創建新的邏輯卷。這部分空間
df -h
是看不到的。
如何驗證?
使用 sudo vgdisplay
命令查看卷組信息,你會看到:
- VG Size:應該接近
gparted
顯示的大小。 - Free PE / Size:這里會顯示卷組中尚未分配出去的剩余空間。這個數字大致就是
gparted
大小減去df -h
大小的差值。
場景二:文件系統沒有占滿整個邏輯卷(LV)
即使邏輯卷(LV)本身有100GB,你在上面創建的文件系統(如ext4)也可能只用了90GB。
gparted
顯示:PV大小 = 100GBlsblk
顯示:LV大小 = 100GBdf -h
顯示:文件系統大小 = 90GB
如何驗證?
使用 sudo lvdisplay
和 lsblk
命令。lsblk
會同時顯示LV的大小和其上層文件系統的大小,非常適合用來排查這種差異。
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 238.5G 0 disk
├─sda1 8:1 0 512M 0 part /boot/efi
├─sda2 8:2 0 732M 0 part /boot
└─sda3 8:3 0 237.3G 0 part└─ubuntu--vg-ubuntu--lv 253:0 0 100G 0 lvm / # 邏輯卷(LV)大小
# df -h 顯示的是掛載到 / 的這個文件系統的使用情況,可能只有90G
場景三:保留了啟動分區或交換空間
你的磁盤上可能不僅有LVM分區,還有獨立的 /boot/efi
、/boot
分區或交換分區。gparted
會顯示所有分區,而 df -h
只顯示已掛載的文件系統。
五、如何全面了解你的磁盤空間?
要弄清所有空間去哪了,建議按順序使用以下命令:
sudo fdisk -l
或sudo parted -l
:查看物理磁盤和最底層的分區布局。sudo pvdisplay
:查看物理卷(PV)信息,確認LVM管理的物理空間。sudo vgdisplay
:查看卷組(VG)信息,重點關注Free PE / Size
,這是謎題的關鍵。sudo lvdisplay
:查看邏輯卷(LV)信息。lsblk
:這是最直觀的工具,它以樹形結構一次性顯示磁盤、分區、物理卷、邏輯卷和掛載點之間的關系和大小。df -h
:最后看文件系統的具體使用情況。
常用的LVM管理命令:
如果您想查看系統的LVM結構,可以在終端中使用以下命令:
命令 | 功能描述 |
---|---|
sudo pvdisplay | 顯示物理卷的詳細信息 |
sudo vgdisplay | 顯示卷組的詳細信息 |
sudo lvdisplay | 顯示邏輯卷的詳細信息 |
lsblk | 以樹形結構清晰顯示磁盤、分區和邏輯卷的關系 |
df -h | 查看已掛載的文件系統及其大小(會顯示邏輯卷的掛載點) |
總結:gparted
和 df -h
的大小不一致是正常的,這恰恰體現了LVM將物理存儲和邏輯存儲分離的核心優勢——卷組(VG)中的空閑空間為你提供了極大的靈活性,你可以隨時將其添加到需要擴容的邏輯卷中,而無需重新分區。