PVE系统小硬盘更换大硬盘无损扩容

通过将原小硬盘完整克隆到新大硬盘,再扩展分区和文件系统来实现 Proxmox VE(PVE)系统的扩容,是一种非常稳妥且常用的方法。这种方法保留了原有系统配置、引导信息和所有数据,只需在克隆后对未使用的空间进行扩展即可。


✅ 适用场景

  • PVE 安装在单块小容量硬盘上(如 128GB SSD)。

  • 已购入一块更大的新硬盘(如 1TB SSD)。

  • 希望完全保留现有系统和虚拟机,仅扩大存储空间。

  • 系统使用 默认 LVM 安装方式(最常见:/ 在 LVM 上,VM 存储在 local-lvm 的 thin pool 中)。


🔧 操作步骤概览

  1. 物理安装新硬盘

  2. 从 Live 系统启动(如 SystemRescue、Ubuntu Live)

  3. 使用 ddClonezilla 克隆小盘到大盘

  4. 扩展分区表(如有必要)

  5. 扩展 LVM 物理卷(PV)、卷组(VG)、逻辑卷(LV)

  6. 扩展文件系统(ext4/xfs)

  7. 重启进入 PVE,验证扩容


📌 详细操作流程(以默认 LVM 安装为例)

第一步:准备环境

  • 关机,将新大硬盘(如 /dev/sdb)接入主机。

  • 使用 SystemRescue CD/USBUbuntu Live USB 启动(避免挂载原系统盘)。

  • 打开终端,确认磁盘:

1
2
lsblk

假设:

  • 原小盘:/dev/sda(128GB)
  • 新大盘:/dev/sdb(1TB)

⚠️ 务必确认设备名,避免反向克隆导致数据丢失!


第二步:克隆小盘到大盘

方法 A:使用 dd(简单但慢,逐字节复制)

1
2
dd if=/dev/sda of=/dev/sdb bs=4M status=progress conv=noerror,sync

此命令会将 sda 的所有内容(包括 MBR/GPT、分区表、数据)完整复制到 sdb。

方法 B:使用 Clonezilla(推荐,支持智能复制、压缩、更快)

  • 选择 device-devicedisk_to_local_disk

  • 选择源盘(sda)和目标盘(sdb)

  • 勾选 -k1(自动重建目标盘的分区表以匹配实际大小)或手动后续调整

Clonezilla 默认不会自动扩展分区,但能更高效地只复制已用数据。


第三步:扩展分区(如果使用 MBR 或 GPT 分区表)

克隆后,新盘的分区大小仍与旧盘一致(例如 sdb1 只有 128GB),需扩展最后一个分区以占用全部空间。

查看当前分区:

1
2
parted /dev/sdb print

通常 PVE 默认分区结构为:

  • /dev/sdb1:EFI(如果有,约 512MB)

  • /dev/sdb2/boot(约 1GB)

  • /dev/sdb3:LVM PV(剩余空间)

我们需要扩展 sdb3 到整盘末尾。

使用 growpart(推荐):

1
2
3
4
5
6
7
8
9

# 安装 cloud-guest-utils(若未安装)

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

# 扩展第3个分区

growpart /dev/sdb 3

growpart 能安全扩展分区而不破坏数据。

验证:

1
2
3
4
lsblk

# 应看到 /dev/sdb3 大小接近 1TB


第四步:扩展 LVM

现在 /dev/sdb3 已变大,但 LVM 还不知道新空间。

1. 通知内核重新读取分区大小(如果需要):

1
2
pvscan

通常 growpart 后系统会自动识别,若未识别,可重启或运行:

1
2
partprobe /dev/sdb

2. 扩展物理卷(PV)到分区最大:

1
2
pvresize /dev/sdb3

这一步是关键!它让 LVM 知道 PV 现在有更多可用空间。

3. 查看卷组(VG)空闲空间:

1
2
3
4
vgs

# 应看到 Free PE / Size 增加了

4. 扩展逻辑卷(LV)

情况 A:扩容根分区(/
1
2
3
4
5
lvextend -l +100%FREE /dev/pve/root
resize2fs /dev/pve/root # 如果是 ext4

# 或 xfs_growfs / # 如果是 xfs(但 PVE 默认是 ext4)

情况 B:扩容 local-lvm(即 thin pool data,用于 VM 存储)

这是更常见的需求——让虚拟机有更多空间。

1
2
3
4
5

# 扩展 thin pool(使用所有 VG 空闲空间)

lvextend -l +100%FREE /dev/pve/data

注意:/dev/pve/data 是 thin pool,不是普通 LV。扩容后,PVE Web UI 中 “local-lvm” 的可用空间会立即增加。


第五步:关机并更换启动盘

  • 关机

  • 移除原小硬盘(/dev/sda)

  • 将新大硬盘接到原小盘的位置(确保 BIOS 从它启动)

  • 开机进入 PVE


第六步:验证

1
2
3
4
5
6
df -h /
pvesm status
lsblk
vgs
lvs

你应该看到:

  • 根分区或 thin pool 空间显著增大

  • 所有 VM 正常运行

  • Web UI 中 local-lvm 存储容量变大


⚠️ 注意事项

  1. 不要在运行中的 PVE 系统上直接克隆系统盘!必须从 Live 环境操作。

  2. UEFI vs Legacy:如果原系统是 UEFI 启动,确保新盘的 EFI 分区(/dev/sdb1)也被正确克隆,并且 BIOS 设置为 UEFI 启动。

  3. ZFS 用户不适用此方法:ZFS 池不能简单克隆后扩容,需用 zpool replacezpool attach

  4. 双盘临时共存时注意设备名变化:建议在 Live 系统中通过 /dev/disk/by-id/ 识别磁盘,避免 sda/sdb 互换。


✅ 总结

| 步骤 | 操作 |

|——|——|
| 1 | Live 系统启动 |

| 2 | dd 或 Clonezilla 克隆小盘 → 大盘 |
| 3 | growpart /dev/sdb 3 扩展 LVM 分区 |

| 4 | pvresize /dev/sdb3 通知 LVM |
| 5 | lvextend + resize2fs 扩容 LV 和文件系统 |

| 6 | 更换硬盘,重启验证 |