Featured image of post Proxmox VE 虚拟机迁移指南 🔄

Proxmox VE 虚拟机迁移指南 🔄

Proxmox VE 虚拟机迁移指南 🔄 🚀 将虚拟机从A节点迁移到B节点的完整流程,包含多种迁移方式和

Proxmox VE 虚拟机迁移指南 🔄

🚀 将虚拟机从A节点迁移到B节点的完整流程,包含多种迁移方式和详细操作步骤


📖 目录导航


🎯 迁移前准备

📊 环境信息

项目 A节点 B节点
IP地址 10.10.10.254 10.10.10.1
虚拟机ID 100 105
存储类型 LVM LVM

✅ 前置检查

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
# 在A节点检查虚拟机状态
qm status 100

# 在B节点检查目标ID是否可用
qm list | grep 105

# 检查网络连通性
ping -c 4 10.10.10.1

# 检查存储空间
pvesm status

# 检查CPU兼容性(重要!)
qm config 100 | grep cpu
qm config 105 | grep cpu  # 确保B节点有相同或兼容的CPU类型

# 检查PVE版本兼容性
pveversion -v

📦 A节点操作

1. 📁 传输虚拟机配置文件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 备份原配置文件
cp /etc/pve/qemu-server/100.conf /etc/pve/qemu-server/100.conf.backup

# 传输配置文件到B节点
scp /etc/pve/qemu-server/100.conf root@10.10.10.1:/etc/pve/qemu-server/105.conf

# 🔍 验证传输结果
ssh root@10.10.10.1 "ls -la /etc/pve/qemu-server/105.conf"

# 检查配置文件中是否有需要修改的路径或引用
ssh root@10.10.10.1 "cat /etc/pve/qemu-server/105.conf"

2. 💾 导出虚拟机磁盘镜像

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# 停止虚拟机(如果正在运行)
qm stop 100 && echo "VM stopped successfully" || echo "Failed to stop VM"

# 使用dd导出LVM卷为raw格式
dd if=/dev/pve/vm-100-disk-0 of=/tmp/vm-100-disk-0.raw bs=1M status=progress

# 📊 检查导出文件
ls -lh /tmp/vm-100-disk-0.raw
file /tmp/vm-100-disk-0.raw

# 计算校验和(可选,用于验证完整性)
md5sum /tmp/vm-100-disk-0.raw > /tmp/vm-100-disk-0.raw.md5

3. 📤 传输磁盘镜像到B节点

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 使用scp传输raw文件(适合小文件)
scp /tmp/vm-100-disk-0.raw root@10.10.10.1:/tmp/vm-105-disk-0.raw

# 🚀 使用rsync(推荐,支持断点续传和压缩)
rsync -avz --progress /tmp/vm-100-disk-0.raw root@10.10.10.1:/tmp/vm-105-disk-0.raw

# 传输校验文件
scp /tmp/vm-100-disk-0.raw.md5 root@10.10.10.1:/tmp/

# 清理临时文件(传输完成后)
rm -f /tmp/vm-100-disk-0.raw /tmp/vm-100-disk-0.raw.md5

📥 B节点操作

1. 📥 导入磁盘镜像

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 检查接收到的文件完整性和大小
ls -lh /tmp/vm-105-disk-0.raw

# 验证MD5校验和(如果传输了校验文件)
md5sum -c /tmp/vm-105-disk-0.raw.md5

# 导入磁盘到LVM存储
qm importdisk 105 /tmp/vm-105-disk-0.raw local

# 🔄 查看导入进度(另一个终端)
tail -f /var/log/syslog | grep import

# 检查导入结果
ls -la /dev/pve/ | grep 105

2. ⚙️ 配置虚拟机

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# 查看当前配置
qm config 105

# 附加新导入的磁盘
qm set 105 --ide0 local:105/vm-105-disk-0.raw

# 🎯 可选:转换为更高效的格式
qemu-img convert -f raw -O qcow2 /dev/pve/vm-105-disk-0 /dev/pve/vm-105-disk-0.qcow2
qm set 105 --ide0 local:105/vm-105-disk-0.qcow2

# 设置启动顺序(确保从硬盘启动)
qm set 105 --boot order=ide0

⚙️ 迁移后配置

1. 🔧 清理和优化配置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 删除临时文件
rm -f /tmp/vm-105-disk-0.raw /tmp/vm-105-disk-0.raw.md5

# 编辑虚拟机配置
nano /etc/pve/qemu-server/105.conf

# 🛠️ 需要修改的配置项:
# - 删除旧的磁盘引用
# - 更新网络MAC地址
# - 调整硬件配置(如果需要)
# - 检查并更新CPU类型设置

2. 🌐 网络配置更新

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
# 查看当前网络配置
qm config 105 | grep net

# 移除旧的MAC地址
qm set 105 --delete net0

# 添加新的网络设备(会自动生成新MAC)
qm set 105 --net0 virtio,bridge=vmbr0

# 或者手动指定MAC地址(如果需要保持相同)
qm set 105 --net0 virtio,bridge=vmbr0,mac=XX:XX:XX:XX:XX:XX

# 配置其他网络接口(如果有多个)
for i in {1..3}; do
  qm set 105 --net$i virtio,bridge=vmbr$i
done

3. 💾 存储优化

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 检查磁盘格式
qemu-img info /dev/pve/vm-105-disk-0

# 转换为qcow2格式(节省空间)
qemu-img convert -f raw -O qcow2 /dev/pve/vm-105-disk-0 /dev/pve/vm-105-disk-0.qcow2

# 更新配置文件使用新格式
qm set 105 --ide0 local:105/vm-105-disk-0.qcow2

# 调整磁盘缓存策略(提升性能)
qm set 105 --cache writeback

🔧 验证与测试

1. ✅ 配置验证

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 检查虚拟机配置
qm config 105

# 验证磁盘完整性
qemu-img check /dev/pve/vm-105-disk-0

# 检查网络配置
cat /etc/pve/qemu-server/105.conf | grep net

# 验证CPU兼容性
qm config 105 | grep cpu

2. 🚀 启动测试

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 启动虚拟机
qm start 105

# 监控启动过程
qm monitor 105

# 查看启动日志
tail -f /var/log/syslog | grep 105

# 检查运行状态
qm status 105

# 尝试连接到控制台
qm terminal 105

3. 📊 性能测试

1
2
3
4
5
6
7
8
# 测试磁盘I/O性能
qm guest exec 105 -- fio --name=test --filename=/tmp/test --size=1G --readwrite=randread --ioengine=libaio --direct=1

# 测试网络连通性
qm guest exec 105 -- ping -c 4 8.8.8.8

# 测试内存性能
qm guest exec 105 -- sysbench memory --memory-block-size=1K --memory-total-size=10G run

💡 替代方案

🔄 使用PVE内置迁移工具(推荐)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 在线迁移(需要共享存储)
qm migrate 100 10.10.10.1 --online

# 离线迁移
qm migrate 100 10.10.10.1

# 带带宽限制的迁移(避免影响生产网络)
qm migrate 100 10.10.10.1 --bwlimit 50

# 迁移特定磁盘
qm migrate 100 10.10.10.1 --with-local-disks

📦 使用备份/恢复方式

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 在A节点创建备份(停止VM)
vzdump 100 --compress zstd --mode stop --storage local

# 在A节点创建备份(在线备份,需要QEMU Guest Agent)
vzdump 100 --compress zstd --mode snapshot --storage local

# 传输备份文件到B节点
scp /var/lib/vz/dump/vzdump-qemu-100-*.vma.zst root@10.10.10.1:/var/lib/vz/dump/

# 在B节点恢复备份
qm restore 105 /var/lib/vz/dump/vzdump-qemu-100-*.vma.zst

# 恢复时指定存储
qm restore 105 /var/lib/vz/dump/vzdump-qemu-100-*.vma.zst -storage local-lvm

🐳 使用容器化方案(LXC)

1
2
3
4
5
# 对于LXC容器,迁移更简单
pct migrate 100 10.10.10.1 --restart

# 迁移特定容器
pct migrate 100 10.10.10.1 --restart --target-storage local-lvm

⚠️ 注意事项

  1. 📋 兼容性检查:确保A、B节点硬件和软件版本兼容
  2. 💾 存储空间:确认B节点有足够存储空间
  3. ⏰ 停机时间:规划合适的维护窗口进行迁移
  4. 🔒 安全考虑:传输过程中考虑使用加密连接
  5. 📊 性能影响:大规模迁移可能影响网络性能
  6. 🔄 回滚计划:始终保留原虚拟机直到新虚拟机稳定运行

🔧 故障排除

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
# 如果迁移失败,检查日志
tail -f /var/log/syslog
journalctl -u pvedaemon -f

# 检查网络连通性
traceroute 10.10.10.1
mtr 10.10.10.1

# 检查防火墙设置
iptables -L -n
nft list ruleset

# 检查存储状态
pvesm status
lvs
vgs
pvs

# 检查集群状态(如果适用)
pvecm status

🔄 回滚步骤

1
2
3
4
5
6
# 如果迁移失败,恢复原虚拟机
qm start 100

# 清理B节点上的失败迁移
qm destroy 105 --purge
rm -f /etc/pve/qemu-server/105.conf

🎯 提示:对于生产环境,建议先在测试环境进行演练。大规模迁移时考虑分批次进行,并确保有完整的回滚方案。

📚 扩展阅读


迁移完成检查清单

  • 虚拟机配置文件已正确传输
  • 磁盘数据完整无误
  • 网络配置已更新
  • 虚拟机启动正常
  • 服务运行正常
  • 性能测试通过
  • 原虚拟机已备份(保留至少24小时)
最后更新于 2025-09-28