当前位置: 首页 > news >正文

一招解决Proxmox VE虚拟机磁盘空间耗尽:LVM在线扩容实战 - 若

本文将记录一次完美的线上故障排除:在不重启服务、不停机的情况下,解决Proxmox VE中Ubuntu虚拟机根目录磁盘空间100%被占满的问题。

问题场景:空间告急,服务危在旦夕

在管理一台名为 tools1 的Proxmox虚拟机时,系统突然报警。登录后执行 df -h 检查,发现根目录使用率已达100%,可用空间为0:

bash
$ df -lh
Filesystem                         Size  Used Avail Use% Mounted on
/dev/mapper/ubuntu--vg-ubuntu--lv   48G   46G     0 100% /
...

然而,使用 fdisk -l 检查物理磁盘时,却发现底层硬盘 /dev/sda3 分区有足足98G的空间:

bash
$ 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的灵活性在虚拟机内部动态调整空间分配:

image

下面是详细的操作步骤:

第1步:检查卷组状态,确认可用空间

首先,我们需要确认LVM的卷组(VG)中是否有未分配的空间。

bash
sudo vgdisplay

关键输出解读:

text
  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

bash
sudo lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv

成功输出:

text
  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)并不知道这个变化。我们必须手动调整文件系统的大小以填满整个逻辑卷。

bash
sudo resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv

成功输出:

text
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 命令,检查最终的扩容结果。

bash
sudo df -lh

胜利的成果:

text
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文件系统也自动识别了底层空间的变化,无需任何额外操作。

总结与核心要点

本次操作成功的关键点:

  1. 无需Proxmox层面操作:问题出在虚拟机内部的LVM配置,无需在PVE后台调整虚拟磁盘大小。

  2. 真正意义上的在线扩容:整个过程中,虚拟机无需重启,所有服务持续运行,实现了零停机维护。

  3. 理解LVM结构:牢记“物理分区(PV) → 卷组(VG) → 逻辑卷(LV) → 文件系统(FS)”的层次关系,逐层扩展。

  4. 关键命令

    • vgdisplay:诊断问题,查看可用空间。

    • lvextend -l +100%FREE /dev/vg-name/lv-name:扩展逻辑卷。

    • resize2fs /dev/mapper/...(绝不能忘) 扩展文件系统。

希望这篇实战记录能帮助您下次遇到类似问题时从容应对。记住,在处理任何磁盘操作前,创建一个快照或备份是好习惯!

http://www.wxhsa.cn/company.asp?id=2126

相关文章:

  • jiaozi
  • 基于Linux系统的定制软件安装硬件设备选型指南
  • c++之is_trivially_default_constructible
  • python3协程学习-async,await
  • 猫树分治
  • Rust太难了。。。。。。。
  • AI导航生成寻路点-FindPathToLocationSynchronously
  • cache写策略
  • 个人微信开发
  • C++之std::is_trivially_copyable
  • PostgreSQL技术大讲堂 - 第104讲:PostgreSQL分区表应用实践
  • redis实现缓存1-添加商户缓存
  • qemu的外部快照实现原理
  • Springboot 集成 飞书群消息
  • 最新爆料:GitHub Copilot全面推出OpenAI GPT-5 和 GPT-5 mini!
  • netstat 命令查看端口状态详解
  • 智聘无界:AI 破解全球化招聘合规、成本与人才匹配难题的实践路径
  • Nature | 本周最新文献速递
  • Flink 与Flink可视化平台StreamPark教程(CDC功能)
  • GAS_Aura-Setting Up Auto Running
  • Ubuntu 24.04 LTS 登录用户和密码忘记找回方法
  • 错排问题
  • 源码调试-带你了解下车牌识别的深度学习模型-LPRNet
  • 仓储物流业务字段(一)
  • ubuntu 24.04部署mysql8.0.41(glibc2.28)
  • cmakelist文件中常见语句的含义
  • charles破解-在线生成激活码
  • 微信个人号开发
  • 内部排序-直接插入排序冒泡排序快速排序对比
  • STM32读写EEPROM