PVE 虚拟机扩容磁盘(无LVM,GPT分区 + ext4文件系统,你的场景)

适用:PVE里把原有磁盘扩大容量(不是新增独立硬盘),虚拟机内是普通GPT分区、ext4,不使用LVM
示例:磁盘/dev/sda,分区/dev/sda2(以你机器为例)
⚠️ 重要前提:不是新增第二块硬盘!是放大现有这块硬盘;无LVM无法跨盘合并到根分区。

前置准备(强烈建议)

  1. PVE网页,对这台虚拟机创建快照,操作出错可以回滚。
  2. 确认虚拟机磁盘是GPT分区、ext4,无LVM。
    lsblk
    df -T

步骤1:PVE网页端扩大磁盘容量

  1. 进入虚拟机【硬件】
  2. 选中要扩容的磁盘(你的是SCSI磁盘 sda),点击【Resize disk】
  3. 填入增加的容量(例如原有100G,加到300G,就填200G),确认。

步骤2:虚拟机内刷新内核识别磁盘新大小(不用重启)

# scsi磁盘 /dev/sda
echo 1 > /sys/block/sda/device/rescan
lsblk

看到磁盘总容量变成300G,但是分区sda2依旧是100G,正常现象。

步骤3:安装growpart工具(Ubuntu/Debian)

sudo apt update
sudo apt install cloud-guest-utils -y

步骤4:扩展分区边界(修改GPT分区表,把sda2拉到磁盘末尾)

语法:growpart 磁盘名 分区编号

sudo growpart /dev/sda 2

执行成功后,用下面命令校验分区大小

lsblk /dev/sda

此时 /dev/sda2 分区容量已经变成接近300G(分区墙已经扩大)
你之前看到的GPT PMBR size mismatch警告,growpart写入分区表时会自动修复。

步骤5:扩展ext4文件系统,填满扩大后的分区

sudo resize2fs /dev/sda2

步骤6:验证扩容结果

df -h /dev/sda2

输出里可以看到分区容量已经更新为300G,扩容完成。

常见报错&坑点

  1. resize2fs: Nothing to do!
    👉 原因:分区还没扩大,只执行resize2fs。必须先growpart,再resize2fs。

  2. growpart报错:no space left
    👉 确认磁盘名称、分区号是否写对,不要把sda写成sdb。

  3. 如果是virtio磁盘(设备名是vda而不是sda)

    echo 1 > /sys/block/vda/device/rescan
    sudo growpart /dev/vda 2
    sudo resize2fs /dev/vda2

备选方案(growpart不可用时,手动fdisk,风险更高,仅兜底)

原理:删除分区,用完全相同的起始扇区重建分区,不损坏数据

sudo fdisk /dev/sda
  1. p:打印分区,记录sda2的Start起始扇区(你的机器是4096)
  2. d,输入2,删除sda2分区
  3. n,新建分区:
    • 分区号:2
    • Start扇区:务必填写刚才记下的数字(4096,不能错!)
    • End扇区:直接回车,占用磁盘全部剩余空间
  4. 分区类型默认Linux filesystem,回车
  5. w,写入分区表,保存退出
  6. 内核重新加载分区表后,执行
    sudo resize2fs /dev/sda2

重要重申

✅ 本教程:同一块磁盘扩容,无LVM,ext4
❌ 如果是新增一块独立硬盘,无LVM不能合并到原有根分区,只能单独挂载到/data等目录。

作者:月影鹏鹏  创建时间:2026-10-15 15:41
最后编辑:月影鹏鹏  更新时间:2026-10-15 15:42