PVE 中给 Ubuntu 虚拟机扩容磁盘——从 Web 界面到系统内部的完整操作
写在前面 在使用 Proxmox VE 管理虚拟化环境时,磁盘空间不足是迟早会遇到的问题。也许是一台跑 Docker 的 Ubuntu 镜像越拉越多,也许是数据库日志把根分区撑满了——总之,扩容是 PVE 运维的必修课。本文从 PVE Web 界面的磁盘 Resize 开始,到 Ubuntu 虚拟机内部 LVM 扩容的每一步命令,手把手带你完成整个流程。
1 为什么需要扩容?
PVE 创建虚拟机时通常会分配一个固定大小的虚拟磁盘(比如 32GB)。随着业务发展,这个空间可能不够用了。好在 PVE 支持在线扩容虚拟磁盘,而 Ubuntu 默认安装使用的 LVM 也天然支持动态扩展逻辑卷,两者配合非常方便。
整个扩容流程分为两个阶段:
- PVE 侧:在 Web 界面上给虚拟机的磁盘增加容量(相当于给虚拟机"换了一块更大的硬盘")
- Ubuntu 侧:在虚拟机内部识别新增空间,扩展分区、物理卷、逻辑卷和文件系统
2 前置条件
| 项目 | 要求 |
|---|---|
| PVE 版本 | 6.x / 7.x / 8.x 均可 |
| 虚拟机系统 | Ubuntu 20.04 / 22.04 / 24.04(使用 LVM 分区方案安装) |
| 磁盘控制器 | VirtIO SCSI 或 IDE(推荐 VirtIO SCSI) |
| 权限 | PVE Web 界面管理员 + 虚拟机内 root 权限 |
提示:Ubuntu Server 默认安装时会使用 LVM 方案,根分区一般在
/dev/mapper/ubuntu--vg-ubuntu--lv。如果你安装时选择了手动分区且没有使用 LVM,则需要使用growpart等工具来扩展分区,流程会略有不同。
3 第一阶段:PVE 侧扩容
3.1 在 Web 界面操作
- 登录 PVE 管理界面(
https://<PVE_IP>:8006) - 在左侧选中目标虚拟机,点击 Hardware(硬件) 标签
- 选中需要扩容的磁盘(例如
scsi0或virtio0),点击上方的 Resize disk(调整磁盘大小) 按钮 - 在弹出的对话框中输入要增加的大小(注意:是增量,不是目标大小)。例如输入
50表示增加 50GB - 点击 Resize disk 确认

3.2 使用命令行操作(可选)
如果你更习惯命令行,也可以 SSH 到 PVE 宿主机执行:
# 语法:qm resize <vmid> <disk> <size>
# 例如给 VM 100 的 scsi0 磁盘增加 50G
qm resize 100 scsi0 +50G
执行完成后,PVE 已经把虚拟磁盘的总容量增大了。但此时 Ubuntu 虚拟机内部还不知道磁盘变大了——就像你给电脑换了一块更大的硬盘,但操作系统还没有识别新增空间。
4 第二阶段:Ubuntu 虚拟机内部扩容
接下来 SSH 进入 Ubuntu 虚拟机,执行以下步骤。
4.1 确认当前磁盘状态
首先查看当前的磁盘和分区信息:
# 查看分区表信息
parted -l
# 查看磁盘设备列表
fdisk -l
你应该能看到 /dev/sda(或 /dev/vda,取决于磁盘控制器类型)的总容量已经变大了,但现有分区还没有占满整块磁盘。
典型的分区布局如下:
Device Start End Sectors Size Type
/dev/sda1 2048 4095 2048 1M BIOS boot
/dev/sda2 4096 3674111 3670016 1.8G Linux filesystem
/dev/sda3 3674112 67108830 63434719 30.2G Linux filesystem ← 这是 LVM 物理卷所在分区
可以看到 sda3 还是原来的大小,而磁盘总容量已经增大了。
4.2 扩展分区
使用 cfdisk 交互式工具来扩展 sda3 分区:
cfdisk /dev/sda
操作步骤:
- 用方向键选中
/dev/sda3分区 - 选择 Resize 选项
- 默认会显示可用的最大空间,直接回车确认
- 选择 Write 写入分区表
- 输入
yes确认 - 选择 Quit 退出

为什么用 cfdisk 而不是 fdisk?
cfdisk提供了一个友好的文字界面,操作更直观。当然你也可以用fdisk或parted来完成同样的操作,但cfdisk对于这种简单的分区调整最为便捷。
4.3 扩展物理卷(PV)
分区扩展后,需要通知 LVM 物理卷也扩展到新的分区大小:
# 查看扩展前的状态
lsblk
# 扩展物理卷
pvresize /dev/sda3
# 确认扩展结果
lsblk
执行 pvresize 后,lsblk 应该能看到 sda3 的大小已经增长到新的容量。
4.4 扩展逻辑卷(LV)
物理卷扩展后,卷组(VG)的可用空间也随之增大。现在把所有新增空间分配给根文件系统的逻辑卷:
# 将卷组中全部空闲空间分配给逻辑卷
lvextend -l +100%FREE /dev/mapper/ubuntu--vg-ubuntu--lv
参数说明:
-l +100%FREE:使用卷组中 100% 的剩余空间/dev/mapper/ubuntu--vg-ubuntu--lv:Ubuntu 默认的根逻辑卷路径
不确定逻辑卷路径? 可以用
lvs或lvdisplay命令查看。
4.5 扩展文件系统
逻辑卷扩展后,文件系统还需要手动 resize 才能使用新空间:
# 扩展 ext4 文件系统(Ubuntu 默认)
resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv
注意:如果你的文件系统是 XFS 而非 ext4,应使用
xfs_growfs /代替resize2fs。

4.6 验证结果
df -h
此时应该能看到根分区的大小已经增长到扩容后的大小,可用空间也大幅增加。

5 完整命令速查
如果你已经熟悉了上述流程,以下是可以直接执行的命令汇总(PVE 侧操作已在 Web 界面完成的前提下):
# ① 查看磁盘状态
parted -l
fdisk -l
# ② 扩展分区(交互式)
cfdisk /dev/sda
# ③ 扩展物理卷
pvresize /dev/sda3
# ④ 扩展逻辑卷
lvextend -l +100%FREE /dev/mapper/ubuntu--vg-ubuntu--lv
# ⑤ 扩展文件系统
resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv
# ⑥ 验证
df -h
6 常见问题
Q1:扩容后 df -h 没变化?
检查是否漏掉了 resize2fs 步骤。lvextend 只是扩展了逻辑卷的块设备大小,文件系统并不会自动跟进。
Q2:pvresize 报错 “Device not found”?
确认你的磁盘设备名是否正确。如果虚拟机使用的是 VirtIO 控制器,设备名可能是 /dev/vda3 而不是 /dev/sda3。用 lsblk 确认即可。
Q3:可以在虚拟机运行时扩容吗?
可以。PVE 侧的 Resize 和 Ubuntu 内部的 LVM 扩容都支持在线操作(无需关机或重启)。这也是 LVM + VirtIO 方案的一大优势。
Q4:能不能缩小磁盘?
PVE 不支持在线缩小虚拟磁盘。如果确实需要缩容,通常只能新建一个更小的磁盘,然后迁移数据。因此在初始分配时无需过于保守——扩容容易,缩容困难。
7 总结
PVE Web 界面 Resize → cfdisk 扩展分区 → pvresize 扩展 PV → lvextend 扩展 LV → resize2fs 扩展文件系统
整个流程五步走,全程在线操作,无需停机。PVE + Ubuntu LVM 的组合让磁盘扩容变得非常简单:PVE 负责虚拟层面的"硬件升级",Ubuntu 内部的 LVM 负责"软件适配"。掌握这个流程后,以后再遇到磁盘告警就不用慌了——几分钟搞定,业务零中断。