中文 English

PVE 中给 Ubuntu 虚拟机扩容磁盘——从 Web 界面到系统内部的完整操作

发布时间: 2026-03-23
Proxmox VE Ubuntu LVM 磁盘扩容 运维

写在前面 在使用 Proxmox VE 管理虚拟化环境时,磁盘空间不足是迟早会遇到的问题。也许是一台跑 Docker 的 Ubuntu 镜像越拉越多,也许是数据库日志把根分区撑满了——总之,扩容是 PVE 运维的必修课。本文从 PVE Web 界面的磁盘 Resize 开始,到 Ubuntu 虚拟机内部 LVM 扩容的每一步命令,手把手带你完成整个流程。


1 为什么需要扩容?

PVE 创建虚拟机时通常会分配一个固定大小的虚拟磁盘(比如 32GB)。随着业务发展,这个空间可能不够用了。好在 PVE 支持在线扩容虚拟磁盘,而 Ubuntu 默认安装使用的 LVM 也天然支持动态扩展逻辑卷,两者配合非常方便。

整个扩容流程分为两个阶段

  1. PVE 侧:在 Web 界面上给虚拟机的磁盘增加容量(相当于给虚拟机"换了一块更大的硬盘")
  2. 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 界面操作

  1. 登录 PVE 管理界面(https://<PVE_IP>:8006
  2. 在左侧选中目标虚拟机,点击 Hardware(硬件) 标签
  3. 选中需要扩容的磁盘(例如 scsi0virtio0),点击上方的 Resize disk(调整磁盘大小) 按钮
  4. 在弹出的对话框中输入要增加的大小(注意:是增量,不是目标大小)。例如输入 50 表示增加 50GB
  5. 点击 Resize disk 确认

PVE Web 界面 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

操作步骤:

  1. 用方向键选中 /dev/sda3 分区
  2. 选择 Resize 选项
  3. 默认会显示可用的最大空间,直接回车确认
  4. 选择 Write 写入分区表
  5. 输入 yes 确认
  6. 选择 Quit 退出

cfdisk 分区编辑器界面

为什么用 cfdisk 而不是 fdisk? cfdisk 提供了一个友好的文字界面,操作更直观。当然你也可以用 fdiskparted 来完成同样的操作,但 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

参数说明:

不确定逻辑卷路径? 可以用 lvslvdisplay 命令查看。

4.5 扩展文件系统

逻辑卷扩展后,文件系统还需要手动 resize 才能使用新空间:

# 扩展 ext4 文件系统(Ubuntu 默认)
resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv

注意:如果你的文件系统是 XFS 而非 ext4,应使用 xfs_growfs / 代替 resize2fs

LVM 扩容命令执行过程

4.6 验证结果

df -h

此时应该能看到根分区的大小已经增长到扩容后的大小,可用空间也大幅增加。

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 负责"软件适配"。掌握这个流程后,以后再遇到磁盘告警就不用慌了——几分钟搞定,业务零中断。