在PVE中迁移虚拟机的完整流程

在 PVE 中迁移虚拟机的完整流程

本文介绍通过备份与恢复的方式,在两台未加入集群的 PVE 服务器之间迁移虚拟机的完整流程。

参考原文https://www.xiaokw.cn/archives/zai-proxmox-ve-pve-zhong-qian-yi-xu-ni-ji-de-wan-zheng-liu-cheng
本文使用AI自动生成

1. 准备工作

1.1 检查源服务器和目标服务器

  • 确保目标服务器有足够的存储空间(至少等于虚拟机备份后的大小)
  • 确认两台服务器间网络互通(通过 ping 测试)
  • 开放防火墙端口(默认 SSH 端口 22

1.2 备份目录权限

确认目标服务器的 /var/lib/vz/dump/ 目录存在且有写入权限:

1
ssh root@目标服务器 "mkdir -p /var/lib/vz/dump/ && chmod 700 /var/lib/vz/dump/"

2. 在源 PVE 创建虚拟机备份

2.1 关闭虚拟机(可选)

1
2
3
4
# 停止虚拟机(确保数据一致性)
pm stop <VMID>
# 示例:关闭 VMID 为 101 的虚拟机
qm stop 101

2.2 执行备份

1
2
3
4
# 使用 vzdump 创建备份(压缩格式为 zstd,备份模式为 stop)
vzdump <VMID> --compress zstd --mode stop --storage <存储名称>
# 示例:备份 VMID 101 到默认存储(通常为 local)
vzdump 101 --compress zstd --mode stop

关键参数说明

  • --compress zstd:压缩备份文件,节省空间和传输时间
  • --mode stop:关闭虚拟机后备份(数据一致性最高)
  • --storage:指定备份存储位置(默认为 local

2.3 确认备份文件

备份完成后,文件会保存在 /var/lib/vz/dump/ 目录,命名格式为:

1
vzdump-qemu-<VMID>-YYYY_MM_DD-XX_XX_XX.vma.zst

通过以下命令确认:

1
ls -lh /var/lib/vz/dump/vzdump-qemu-<VMID>-*

3. 传输备份文件到目标服务器

3.1 方法一:使用 scp 传输

1
2
3
4
# 传输单个备份文件(默认 SSH 端口)
scp /var/lib/vz/dump/vzdump-qemu-<VMID>-* root@目标服务器IP:/var/lib/vz/dump/
# 示例(指定自定义 SSH 端口 2222):
scp -P 2222 /var/lib/vz/dump/vzdump-qemu-101-2024_01_01-12_00_00.vma.zst root@x.x.x.x:/var/lib/vz/dump/

3.2 方法二:使用 rsync 传输(推荐)

1
2
3
4
5
6
# 启用压缩、断点续传和进度显示(适用于大文件)
rsync -avzP --partial /var/lib/vz/dump/vzdump-qemu-<VMID>-* root@目标服务器IP:/var/lib/vz/dump/
# 示例:
rsync -avzP --partial \
/var/lib/vz/dump/vzdump-qemu-101-2024_01_01-12_00_00.vma.zst \
root@x.x.x.x:/var/lib/vz/dump/

参数说明

  • -a:归档模式(保留文件属性)
  • -v:显示详细输出
  • -z:启用压缩传输
  • -P:显示进度并支持断点续传
  • --partial:保留部分传输的文件,便于中断后继续

3.3 验证传输完整性

在目标服务器检查文件大小和校验和:

1
2
3
4
# 检查文件大小
ls -lh /var/lib/vz/dump/vzdump-qemu-<VMID>-*
# 计算 MD5 校验和(与源服务器比对)
md5sum /var/lib/vz/dump/vzdump-qemu-<VMID>-*

4. 在目标 PVE 恢复虚拟机

4.1 确认备份文件存在

1
ssh root@目标服务器 "ls -lh /var/lib/vz/dump/vzdump-qemu-<VMID>-*"

4.2 执行恢复操作

1
2
3
4
# 恢复备份到目标存储(存储名称需与源服务器一致)
pmrestore /var/lib/vz/dump/vzdump-qemu-<VMID>-*.vma.zst <VMID> --storage <目标存储名称>
# 示例:将备份恢复到 VMID 101,存储到 local-lvm
qmrestore /var/lib/vz/dump/vzdump-qemu-101-2024_01_01-12_00_00.vma.zst 101 --storage local-lvm

关键参数说明

  • <VMID>:恢复后的虚拟机 ID(若目标服务器已有相同 ID,需先删除或指定新 ID)
  • --storage:指定目标存储(必须存在且类型兼容)

4.3 修改虚拟机配置(可选)

如果目标服务器网络或硬件配置不同,需调整虚拟机设置:

1
2
# 示例:修改网络桥接接口为 vmbr1
qm set 101 --net0 virtio,bridge=vmbr1

5. 验证迁移结果

5.1 启动虚拟机

1
2
3
qm start <VMID>
# 示例
qm start 101

5.2 检查虚拟机状态

  • 通过 PVE Web 界面查看虚拟机控制台
  • 或通过命令行检查运行状态:qm status 101

5.3 测试网络和服务

  • 通过 SSH 或远程桌面登录虚拟机
  • 验证关键服务(如 Web、数据库)是否正常运行

6. 补充说明

6.1 传输大文件的优化技巧

使用 rsync 断点续传

1
2
3
rsync -avzP --partial --rsh="ssh -p 2222" \
/var/lib/vz/dump/vzdump-qemu-101-*.vma.zst \
root@x.x.x.x:/var/lib/vz/dump/

后台传输(避免 SSH 超时)

1
nohup rsync -avzP ... > rsync.log 2>&1 &

6.2 存储名称不一致的解决方案

如果目标服务器的存储名称与源服务器不同(如源用 local,目标用 local-lvm),恢复时需指定目标存储:

1
qm restore vzdump-qemu-101-*.vma.zst 101 --storage local-lvm

6.3 清理备份文件

迁移完成后删除临时文件:

1
2
3
4
# 源服务器
rm /var/lib/vz/dump/vzdump-qemu-<VMID>-*
# 目标服务器
ssh root@目标服务器 "rm /var/lib/vz/dump/vzdump-qemu-<VMID>-*"

7. 注意事项

  • 虚拟机停机时间--mode stop 会关闭虚拟机,若需最小化停机,可改用 --mode suspend(需短暂暂停)
  • 存储兼容性:目标服务器的存储类型(如 LVM、ZFS、NFS)需支持恢复的磁盘格式
  • 网络带宽:传输大文件时建议使用千兆或万兆网络,避免长时间占用带宽
  • 权限问题:确保目标服务器的 /var/lib/vz/dump/ 目录对 root 用户可写

通过以上步骤,您可以安全、完整地将虚拟机迁移到另一台 PVE 服务器。如有报错,可检查日志 /var/log/pve/tasks/active 或使用 qm config <VMID> 验证配置。

以上。完结撒花 🎉!


在PVE中迁移虚拟机的完整流程
https://blog.wenxin.site/2025/11/26/在PVE中迁移虚拟机的完整流程/
作者
HarryMa
发布于
2025年11月26日
许可协议