中文 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. 选中需要扩容的磁盘(例如 scsi0 或 virtio0),点击上方的 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 提供了一个友好的文字界面,操作更直观。当然你也可以用 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

参数说明:

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

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

评论

使用 GitHub 登录后即可评论,中英文版本共用同一讨论。 在 GitHub 上参与讨论

本文阅读量 --