本文将记录一次完美的线上故障排除:在不重启服务、不停机的情况下,解决Proxmox VE中Ubuntu虚拟机根目录磁盘空间100%被占满的问题。
问题场景:空间告急,服务危在旦夕
在管理一台名为 tools1
的Proxmox虚拟机时,系统突然报警。登录后执行 df -h
检查,发现根目录使用率已达100%,可用空间为0:
$ df -lh
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/ubuntu--vg-ubuntu--lv 48G 46G 0 100% /
...
然而,使用 fdisk -l
检查物理磁盘时,却发现底层硬盘 /dev/sda3
分区有足足98G的空间:
$ sudo fdisk -l
Disk /dev/sda: 100 GiB
...
Device Size Type
/dev/sda3 98G Linux filesystemDisk /dev/mapper/ubuntu--vg-ubuntu--lv: 49 GiB # 逻辑卷只有49G!
问题根源一目了然:物理分区(/dev/sda3
)有98G,但建立在它之上的LVM逻辑卷(LV)只使用了约49G,导致文件系统无法使用剩余空间。就像一栋98G的大楼,只给系统分配了48G的房间,房间塞满了,大楼却还空着一半。
我们的目标:将逻辑卷扩展到占满整个98G的物理分区,并且全程在线操作,不影响任何运行中的服务。
解决方案:LVM在线扩容四步曲
整个扩容过程的原理如下图所示,其核心在于利用LVM的灵活性在虚拟机内部动态调整空间分配:

下面是详细的操作步骤:
第1步:检查卷组状态,确认可用空间
首先,我们需要确认LVM的卷组(VG)中是否有未分配的空间。
sudo vgdisplay
关键输出解读:
VG Name ubuntu-vgVG Size <98.00 GiB # 卷组总大小98GAlloc PE / Size 12543 / <49.00 GiB # 已分配49G给逻辑卷Free PE / Size 12544 / 49.00 GiB # 还有49G空闲空间可用!
输出明确显示:有整整 49.00 GiB 的 Free
空间等待分配。这就是我们解决问题的钥匙。
第2步:扩展逻辑卷(LV),吞并空闲空间
使用 lvextend
命令将所有的空闲空间(+100%FREE
)分配给逻辑卷 ubuntu-lv
。
sudo lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
成功输出:
Size of logical volume ubuntu-vg/ubuntu-lv changed from <49.00 GiB (12543 extents) to <98.00 GiB (25087 extents).Logical volume ubuntu-vg/ubuntu-lv successfully resized.
这时,逻辑卷的大小已经变成了98G。可以再次运行 sudo vgdisplay
验证,会发现 Free PE / Size
变成了 0 / 0
。
第3步:扩展文件系统(EXT4),使用新空间
这是最关键也是最容易遗漏的一步! 逻辑卷扩大了,但里面的文件系统(EXT4)并不知道这个变化。我们必须手动调整文件系统的大小以填满整个逻辑卷。
sudo resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv
成功输出:
resize2fs 1.47.0 (5-Feb-2023)
Filesystem at /dev/mapper/ubuntu--vg-ubuntu--lv is mounted on /; on-line resizing required
old_desc_blocks = 7, new_desc_blocks = 13
The filesystem on /dev/mapper/ubuntu--vg-ubuntu--lv is now 25689088 (4k) blocks long.
注意输出中的 on-line resizing required
,这表示文件系统是在挂载状态(在线)下完成扩容的,无需卸载(umount)或重启。
第4步:验收成果,空间危机解除
最后,再次运行 df -h
命令,检查最终的扩容结果。
sudo df -lh
胜利的成果:
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/ubuntu--vg-ubuntu--lv 97G 46G 47G 50% /
🎉 恭喜!问题已解决! 🎉
-
总容量 (Size): 从
48G
→97G
-
可用空间 (Avail): 从
0
→47G
-
使用率 (Use%): 从
100%
→50%
额外惊喜:所有Docker容器的Overlay文件系统也自动识别了底层空间的变化,无需任何额外操作。
总结与核心要点
本次操作成功的关键点:
-
无需Proxmox层面操作:问题出在虚拟机内部的LVM配置,无需在PVE后台调整虚拟磁盘大小。
-
真正意义上的在线扩容:整个过程中,虚拟机无需重启,所有服务持续运行,实现了零停机维护。
-
理解LVM结构:牢记“物理分区(PV) → 卷组(VG) → 逻辑卷(LV) → 文件系统(FS)”的层次关系,逐层扩展。
-
关键命令:
-
vgdisplay
:诊断问题,查看可用空间。 -
lvextend -l +100%FREE /dev/vg-name/lv-name
:扩展逻辑卷。 -
resize2fs /dev/mapper/...
:(绝不能忘) 扩展文件系统。
-
希望这篇实战记录能帮助您下次遇到类似问题时从容应对。记住,在处理任何磁盘操作前,创建一个快照或备份是好习惯!