在一个 PVE 上把虚拟机 导出为文件,然后 离线导入 到另一个 PVE(可能不在同一个集群里)。
这是非常常见的场景,比如迁移到新服务器、备份后恢复、或者跨地区运送机器。
下面是最稳妥、通用的离线迁移方法👇
🧩 一、导出虚拟机(在源 PVE 上)
1️⃣ 关闭虚拟机
为了保证数据一致性:
qm shutdown <VMID>
等关机后再执行下一步。
2️⃣ 备份导出虚拟机
使用 vzdump 命令导出 VM:
vzdump <VMID> --dumpdir /var/lib/vz/dump/ --mode stop
参数解释:
--dumpdir:指定导出路径(也可以是挂载的外部硬盘或 NFS)。--mode stop:导出前自动关机,备份后再启动(可选)。- 默认输出文件类似:
vzdump-qemu-101-2025_10_31-12_00_00.vma.zst
⚠️ 注意: 备份文件一般在
/var/lib/vz/dump/目录下。
📦 二、传输备份文件到目标 PVE
使用 scp、rsync 或外部硬盘都可以:
scp /var/lib/vz/dump/vzdump-qemu-101-2025_10_31-12_00_00.vma.zst root@目标PVE:/var/lib/vz/dump/
或者(如果文件很大):
rsync -avP /var/lib/vz/dump/vzdump-qemu-101-2025_10_31-12_00_00.vma.zst root@目标PVE:/var/lib/vz/dump/
💾 三、在目标 PVE 上导入恢复虚拟机
1️⃣ 确认备份文件存在
ls /var/lib/vz/dump/
2️⃣ 恢复虚拟机
qmrestore /var/lib/vz/dump/vzdump-qemu-101-2025_10_31-12_00_00.vma.zst <新VMID> --storage local-lvm
参数说明:
<新VMID>:目标节点上新的虚拟机 ID(可自定义)。--storage:指定要恢复到哪个存储池(用pvesm status查看可用存储)。
🔧 四、验证与启动
恢复完成后,你可以:
qm list
qm start <新VMID>
然后在 Web 界面中检查配置、网络接口、磁盘、启动状态等。
💡 可选优化
| 目标 | 建议 |
|---|---|
| 文件太大 | 使用 --compress zstd(默认)或 lzo |
| 导出目录空间不足 | 改为挂载外部磁盘或 NFS |
| 保留原 VM 配置 | vzdump 已自动包含配置文件(.conf) |
| 只迁移磁盘 | 可用 qm exportdisk / qm importdisk |
vzdump 101 –dumpdir /var/lib/vz/dump/ –compress zstd
得到 /var/lib/vz/dump/vzdump-qemu-101-2025_10_31-14_20_00.vma.zst 200
qmrestore /var/lib/vz/dump/vzdump-qemu-101-2025_10_31-14_20_00.vma.zst 200 –storage local-lvm
参数
说明
/var/lib/vz/dump/...vma.zst备份文件路径
200目标虚拟机 ID(新的 VMID,可以自己定义)
--storage local-lvm指定恢复到哪个存储池(用
pvesm status查看可用存储)--unique 1(可选)防止冲突时自动修改 MAC 地址
--cores、--memory(可选)在恢复时直接调整配置