一次从 48G 扩到 200G 的 Proxmox 虚拟机根盘扩容记录

本文记录了一次在 Proxmox 中将虚拟机磁盘从 48G 扩容到 200G,并在 Linux(GPT + LVM + ext4) 体系下,完整、安全地让根分区 / 吃到新增空间。


一、问题背景:为什么要扩容根分区?

在虚拟化环境(如 Proxmox)中,根分区空间往往在系统初始化时被设置得比较保守,例如 40G 或 50G。随着时间推移,以下情况很容易出现:

  • 系统组件、依赖库逐渐增多
  • 日志、缓存、临时文件持续累积
  • Docker / 容器运行时占用根分区空间
  • 后期发现根分区空间不足,但数据盘空间仍然充足

此时,如果继续维持一个过小的根分区,会带来一系列运维问题:

  • 日志或临时文件写满根分区,影响系统稳定性
  • 包管理器、系统升级失败
  • 容器或服务异常退出

二、先理解结构:从物理盘到文件系统的四层模型

在开始敲命令之前,必须先统一认知:

Linux 下的存储至少分为四层:

磁盘设备(/dev/sda)
  ↓
分区(/dev/sda3)
  ↓
LVM(PV → VG → LV)
  ↓
文件系统(ext4 → 挂载为 /)

你在 Proxmox 里“把磁盘扩到 200G”,只影响了最底层的磁盘设备

如果后面的层级没有同步扩容:

  • 分区还是 48G
  • LVM 还是 48G
  • ext4 还是 48G

那么 df -h 的结果一定不会变


三、为什么会看到 GPT 的“磁盘末尾”警告?

扩容后执行 fdisk -lparted print,通常会看到类似提示:

GPT PMBR size mismatch
The backup GPT table is not on the end of the device

这是一个非常正常、且可预期的现象

原因在于:

  • GPT 分区表有两份:

    • 主分区表在磁盘前部
    • 备份分区表在磁盘末尾
  • 扩容磁盘后,“末尾位置”发生了变化

  • GPT 备份表还停留在旧的末尾

parted 中选择 Fix,本质上就是:

把 GPT 备份表移动到新的磁盘末尾,并更新磁盘总扇区信息。

这不是错误,而是扩盘后的必经步骤。


四、正确的扩容顺序(非常重要)

整个扩容过程顺序不能乱,必须是:

扩分区 → 扩 PV → 扩 LV → 扩文件系统

下面是每一步“为什么必须做”的解释。

1. 扩分区:让 /dev/sda3 吃到磁盘末尾

LVM 的 PV 建立在 /dev/sda3 上。

如果分区不变大,后面所有操作都没有意义。

2. pvresize:让 LVM 识别新增空间

分区变大 ≠ LVM 自动变大。

LVM 的 PV 内部维护着自己的元数据(PE 表),
只有执行 pvresize,LVM 才会把新增的扇区纳入可分配的 Physical Extent。

3. lvextend:把 VG 的空闲空间分配给 root LV

PV 变大之后,VG 里会出现 PFree

但这些空间默认是“闲置资源”,
必须通过 lvextend 才能真正分配给某个 LV。

4. resize2fs:扩展 ext4 文件系统

这是最后、也是最容易被遗漏的一步

  • LV 变大只是“容器变大”
  • ext4 仍然认为自己只有原来的 block 数

只有 resize2fs 执行完成后,df -h 才会真正反映新容量。


五、完整实战步骤(可直接照做)

1️. 确认磁盘已在 Proxmox 中扩容

fdisk -l /dev/sda

确认 /dev/sda 已经是 200G。


2️. 使用 parted 修复 GPT 并扩展分区

parted /dev/sda

在交互界面中:

print
Fix
resizepart 3 100%
quit

说明:

  • Fix:修复 GPT 备份表位置
  • resizepart 3 100%:把第 3 个分区扩到磁盘末尾

随后执行:

partprobe
lsblk

确认 /dev/sda3 已接近 200G。


3️. 扩展 LVM 的 Physical Volume

pvresize /dev/sda3

验证:

pvs

应看到 PSize 增大,且 PFree > 0


4️. 扩展 root 逻辑卷(LV)

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

验证:

lvs

5️. 扩展 ext4 文件系统(在线)

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

6️. 最终确认

df -h /

此时你应该能看到:

  • / 总容量 ≈ 180G+
  • 可用空间大幅增加

六、可复用的排查与扩容心法

以后只要遇到“扩盘后空间没变”,按这条链路检查:

  1. 磁盘是否变大(fdisk -l
  2. 分区是否变大(lsblk
  3. PV / VG / LV 是否变大(pvs / vgs / lvs
  4. 文件系统是否扩容(df -h

哪一层没变,就补哪一层。

参考链接

在这里插入图片描述

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐