pve虚拟机磁盘缩小

Proxmox VE(PVE)虚拟磁盘缩容实战指南

PVE 默认仅支持虚拟磁盘扩容,不提供图形化或命令行的缩容功能。但通过 Live CD 修复模式 + LVM + 分区表修复,我们可以安全实现磁盘缩容。本文将完整记录操作步骤,并标注关键注意事项。


⚠️ 重要前置提醒

  • 务必备份虚拟机数据(克隆或导出)——缩容有风险,操作不当可能导致数据损坏。
  • 本文以 Ubuntu/Debian 类虚拟机为例,文件系统为 ext4,LVM 逻辑卷名为 ubuntu--vg-ubuntu--lv,请根据你的实际情况替换。
  • 操作全程需在 PVE 宿主机 Shell虚拟机 Live CD 环境 中执行。
  • 如果是windows虚拟机就进入pe使用DiskGenius工具先缩小分区,然后执行第四、五步,最后进入pe使用DiskGenius工具 搜索已丢失分区(重建分区表)功能修复分区表

一、准备 Live CD 环境

  1. 在 PVE Web 界面,为虚拟机挂载 Ubuntu/Debian (最好和虚拟机内部系统一样)安装 ISO,并设置从 ISO 启动。
  2. 启动虚拟机,选择 “Try Ubuntu” 进入 Live 桌面环境。
  3. 打开终端(Ctrl+Alt+T),执行以下步骤。

二、在 Live 环境中缩小 LVM 及文件系统

1. 激活 LVM 卷组

Live 系统默认不激活 LVM,必须手动激活才能识别虚拟机的逻辑卷。

sudo lvm vgchange -ay

2. 检查文件系统健康

缩容前务必执行强制检查,避免数据不一致。

sudo e2fsck -f /dev/mapper/ubuntu--vg-ubuntu--lv

3. 缩小文件系统(留余量)

先缩小文件系统到 149 GiB(为逻辑卷留出 1 GiB 余量)。

sudo resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv 149G

4. 缩小 LVM 逻辑卷

将逻辑卷缩小到 150 GiB(必须 ≥ 文件系统大小)。

sudo lvreduce -L 150G /dev/mapper/ubuntu--vg-ubuntu--lv

5. 调整物理卷(PV)大小

告知 LVM 底层物理卷(PV)容量已变化。

sudo pvresize /dev/sda3

注意/dev/sda3 是虚拟磁盘的第三个分区(通常为 LVM 分区),请根据你的实际分区情况调整。


三、使用 GParted 修复分区表

LVM 缩小后,分区表仍认为分区占据原大空间,需用图形化工具调整。

1. 启动 GParted

sudo gparted

(也可在应用菜单中找到)

2. 停用 LVM

  • 在 GParted 右上角选择磁盘 /dev/sda
  • 找到 /dev/sda3 行,若上方有 小钥匙图标,右键 → Deactivate(停用 LVM)。

3. 调整分区大小

  • 右键 /dev/sda2(通常为 ext4 或 LVM 所在分区,视情况,实际应为 /dev/sda3?请核对) → Resize/Move
    (注:根据原文描述应为调整 /dev/sda3,但原文写的是 /dev/sda2,请根据你的实际分区布局选择。)
  • 手动输入新大小(例如 146000 MiB 或拖动滑块至合适位置)。
  • 点击 Apply 应用更改。

4. 完成分区调整

等待 GParted 完成操作,提示成功后关闭窗口。


四、处理 RAW → QCOW2 格式转换(如已经是qcow2就跳过此步骤)

若你的虚拟磁盘为 raw 格式,需要先转换为 qcow2(PVE 常用格式),因为 qemu-img 的缩容功能更友好。

方法一:PVE 后台“移动磁盘”

在 Web 界面中选择磁盘 → 移动,并选择目标格式为 qcow2。

方法二:命令行转换

qemu-img convert -f raw -O qcow2 -p \
  /var/lib/vz/images/100/vm-100-disk-0.raw \
  /var/lib/vz/images/100/vm-100-disk-0.qcow2

注意:路径中的 100 为虚拟机 ID,请替换为实际值。


五、宿主机层面缩小 QCOW2 文件(仅限 qcow2)

PVE 宿主机 Shell 中执行(不要通过 qm 命令):

qemu-img resize --shrink /var/lib/vz/images/100/vm-100-disk-0.qcow2 150G
  • --shrink 参数必须添加,否则默认只能扩容。
  • 执行完成后,宿主机上对应的磁盘文件物理大小会立即释放。

六、修复虚拟机内备份 GPT 表(重要)

缩容后分区表变更,GPT 备份表仍位于旧位置,可能导致引导或识别问题。

1. 再次进入 Live CD 救援模式(如果已退出)

同样挂载 ISO,进入“Try”环境,打开终端。

2. 激活 LVM

lvm vgchange -ay

3. 修复备份 GPT 表

使用 sgdisk 重建备份表(在磁盘末尾):

sgdisk -e /dev/sda

若提示命令未找到,可使用 gdisk 交互方式:

gdisk /dev/sda
# 进入后直接输入 w 并回车,保存即可

4. 验证修复结果

gdisk -l /dev/sda

确保输出中 没有 warning: backup GPT table is invalid 等错误信息。


七、清理与正常启动

  1. 在 Live 终端执行 shutdown -h now 关机。
  2. 在 PVE Web 界面移除 ISO 挂载,并将硬盘设置为第一启动项。
  3. 正常启动虚拟机,检查磁盘容量和系统功能。

八、最后一步(仅当虚拟机无法识别新容量)

如果启动后系统仍显示旧容量,可尝试在虚拟机内执行:

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

(若之前已缩小过,此步通常无需再做)


📌 总结

整个流程可归纳为:

  1. Live CD 内:缩小文件系统 → 缩小 LVM → 调整 PV → GParted 调分区。
  2. 宿主机:raw→qcow2(如需)→ qemu-img resize --shrink
  3. 再次 Live CD:修复 GPT 备份表。
  4. 正常启动,收工。

每一步请谨慎核对设备名和大小,切勿盲目复制粘贴。祝操作顺利!


如有疑问或操作中遇到错误,欢迎在评论区交流讨论。
(本文基于 PVE 7.x / 8.x /9.x测试,Live 环境使用 Ubuntu 24.04 桌面版)

上一篇 windows11添加rsat功能组件报错的问题
下一篇 麒麟系统虚拟机ESXi迁PVE后识别不到磁盘(其它linux类似)