VMware 迁移到 Proxmox VE - 详细操作手册

VMware 迁移到 Proxmox VE - 详细操作手册

版本:v2.0 详细版 | 适用:PVE 8.2+ / ESXi 6.7--8.0 / vCenter 7.x--8.x

目录

  1. 实验环境假设
  2. [迁移前准备(Checklist 细化)](#迁移前准备(Checklist 细化))
  3. [Proxmox VE 安装与集群搭建](#Proxmox VE 安装与集群搭建)
  4. 存储与网络配置
  5. [使用 PVE 8.2 原生 ESXi 导入](#使用 PVE 8.2 原生 ESXi 导入)
  6. [Windows VM 迁移完整步骤](#Windows VM 迁移完整步骤)
  7. [Linux VM 迁移完整步骤](#Linux VM 迁移完整步骤)
  8. [备份系统 PBS 部署](#备份系统 PBS 部署)
  9. [HA 配置实操](#HA 配置实操)
  10. 批量迁移脚本
  11. 故障排查速查表
  12. 迁移后验证清单
  13. [附录 A:常用 qm/pct 命令速查](#附录 A:常用 qm/pct 命令速查)
  14. [附录 B:PowerCLI 批量关机脚本](#附录 B:PowerCLI 批量关机脚本)

关于截图 :本手册无法嵌入真实截图,但每个 UI 操作都提供了菜单路径、ASCII 界面示意图、等效 CLI 命令。如需真实截图,推荐参考 Proxmox 官方 Wiki pve.proxmox.com/wiki


一、实验环境假设

角色 主机名 IP 配置
源 vCenter vcsa.lab.local 10.0.0.10 8.0 U2
源 ESXi 1 esxi01.lab.local 10.0.0.11 ESXi 7.0 U3
源 ESXi 2 esxi02.lab.local 10.0.0.12 ESXi 7.0 U3
目标 PVE 节点 1 pve01.lab.local 10.0.0.21 64C / 256G / 2×960G SSD
目标 PVE 节点 2 pve02.lab.local 10.0.0.22 64C / 256G / 2×960G SSD
目标 PVE 节点 3 pve03.lab.local 10.0.0.23 64C / 256G / 2×960G SSD
PBS 备份服务器 pbs01.lab.local 10.0.0.30 16C / 64G / 10TB HDD

网络规划:

  • vmbr0:管理 + 业务(10.0.0.0/24),bond0 = eno1 + eno2(LACP)
  • vmbr1:迁移/Ceph(10.0.1.0/24),25GbE 独立网口
  • Corosync 环 1:走 vmbr0
  • Corosync 环 2:走独立 1GbE 冗余心跳

二、迁移前准备(Checklist 细化)

2.1 盘点 VMware 侧资产(PowerCLI 脚本)

powershell 复制代码
# 安装 PowerCLI
Install-Module VMware.PowerCLI -Scope CurrentUser -AllowClobber

# 连接 vCenter
Connect-VIServer -Server vcsa.lab.local -User administrator@vsphere.local

# 导出所有 VM 清单
Get-VM | Select Name, PowerState, NumCpu, MemoryGB,
    @{N='ProvisionedGB';E={[math]::Round($_.ProvisionedSpaceGB,1)}},
    @{N='UsedGB';E={[math]::Round($_.UsedSpaceGB,1)}},
    @{N='OS';E={$_.Guest.OSFullName}},
    @{N='IP';E={$_.Guest.IPAddress -join ','}},
    @{N='Host';E={$_.VMHost.Name}},
    @{N='Datastore';E={($_.DatastoreIdList | %{(Get-View $_).Name}) -join ','}} |
    Export-Csv -Path C:\vm-inventory.csv -NoTypeInformation -Encoding UTF8

# 导出快照信息
Get-VM | Get-Snapshot | Select VM, Name, Created, SizeGB |
    Export-Csv -Path C:\snapshots.csv -NoTypeInformation

# 导出网络端口组
Get-VirtualPortGroup | Select Name, VLanId, VirtualSwitch |
    Export-Csv -Path C:\portgroups.csv -NoTypeInformation

2.2 风险分级表(示例)

VM 业务 等级 停机窗口 依赖 迁移批次
web-test-01 测试站 P3 任意 Wave 0
app-dev-02 开发环境 P3 工作日白天 db-dev-01 Wave 1
erp-app-01 ERP 应用 P1 周六 00-04 erp-db-01, AD Wave 3
erp-db-01 ERP 数据库 P0 季度窗口 存储 Wave 4

2.3 环境前置检查(源侧)

Step 1:清理过期快照

powershell 复制代码
Get-VM | Get-Snapshot | Where {$_.Created -lt (Get-Date).AddDays(-3)} | Remove-Snapshot -Confirm:$false

Step 2:记录 MAC 地址

powershell 复制代码
Get-VM | Get-NetworkAdapter | Select @{N='VM';E={$_.Parent.Name}}, Name, MacAddress, NetworkName |
    Export-Csv C:\mac-list.csv -NoTypeInformation

Step 3:验证 ESXi API 访问

bash 复制代码
nc -zv 10.0.0.11 443
# 预期:Connection to 10.0.0.11 443 port [tcp/https] succeeded!

三、Proxmox VE 安装与集群搭建

3.1 ISO 准备与安装

Step 1:下载 ISO :https://www.proxmox.com/en/downloads

Step 2:写入 U 盘

bash 复制代码
sudo dd if=proxmox-ve_8.2-1.iso of=/dev/sdX bs=1M status=progress

警告 :确认 of= 是 U 盘设备,搞错会擦掉硬盘!

Step 3:安装向导关键选项

复制代码
┌─────────────────────────────────────────────────┐
│  Proxmox VE Installer                            │
├─────────────────────────────────────────────────┤
│  Target Harddisk                                 │
│  ┌───────────────────────────────────────────┐  │
│  │ [x] /dev/sda  SAMSUNG MZ-960  894GB       │  │
│  │ Options → Filesystem: [ zfs (RAID1)   ▼]  │  │
│  │          compress:   [ on  ▼]              │  │
│  │          ashift:     [ 12  ▼] (4K 扇区)    │  │
│  │          hdsize:     [ 800 ]  GB 预留空间   │  │
│  └───────────────────────────────────────────┘  │
│                                  [ Next ]        │
└─────────────────────────────────────────────────┘

推荐:系统盘用 ZFS RAID1(2 块 SSD 镜像),数据盘单独留给 Ceph/LVM。

3.2 安装后初始化

Step 4:切换软件源为无订阅版

bash 复制代码
ssh root@10.0.0.21

sed -i 's/^deb/#deb/' /etc/apt/sources.list.d/pve-enterprise.list
sed -i 's/^deb/#deb/' /etc/apt/sources.list.d/ceph.list 2>/dev/null

echo "deb http://download.proxmox.com/debian/pve bookworm pve-no-subscription" \
    > /etc/apt/sources.list.d/pve-no-subscription.list

echo "deb http://download.proxmox.com/debian/ceph-reef bookworm no-subscription" \
    > /etc/apt/sources.list.d/ceph-no-subscription.list

apt update && apt -y dist-upgrade
reboot

Step 5:去掉订阅提示弹窗

bash 复制代码
sed -Ezi.bak "s/(Ext.Msg.show\(\{\s+title: gettext\('No valid sub)/void\(\{ \/\/\1/g" \
    /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js
systemctl restart pveproxy

3.3 组建集群

Step 6:在 pve01 创建集群

bash 复制代码
root@pve01:~# pvecm create lab-cluster --link0 10.0.0.21 --link1 10.0.1.21
root@pve01:~# pvecm status

Step 7:其他节点加入

bash 复制代码
root@pve02:~# pvecm add 10.0.0.21 --link0 10.0.0.22 --link1 10.0.1.22
root@pve03:~# pvecm add 10.0.0.21 --link0 10.0.0.23 --link1 10.0.1.23

Step 8:Web UI 登录 :https://10.0.0.21:8006


四、存储与网络配置

4.1 配置 LACP + VLAN 网桥

编辑 /etc/network/interfaces:

复制代码
auto lo
iface lo inet loopback

auto eno1
iface eno1 inet manual

auto eno2
iface eno2 inet manual

auto bond0
iface bond0 inet manual
    bond-slaves eno1 eno2
    bond-miimon 100
    bond-mode 802.3ad
    bond-xmit-hash-policy layer2+3

auto vmbr0
iface vmbr0 inet static
    address 10.0.0.21/24
    gateway 10.0.0.1
    bridge-ports bond0
    bridge-stp off
    bridge-fd 0
    bridge-vlan-aware yes
    bridge-vids 2-4094

auto eno3
iface eno3 inet static
    address 10.0.1.21/24
    mtu 9000

执行 ifreload -a 应用。

4.2 添加 NFS 共享存储

UI 路径:Datacenter → Storage → Add → NFS

等效 CLI:

bash 复制代码
pvesm add nfs nfs-migrate --server 10.0.0.50 --export /mnt/migrate --content images,iso

4.3 上传 VirtIO 驱动 ISO

bash 复制代码
cd /var/lib/vz/template/iso/
wget https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso

五、使用 PVE 8.2 原生 ESXi 导入

5.1 添加 ESXi 作为导入源

UI 路径:Datacenter → Storage → Add → ESXi

复制代码
┌──────────── Add: ESXi ─────────────────────┐
│  ID:             esxi-source               │
│  Server:         10.0.0.11                  │
│  Username:       root                       │
│  Password:       ************               │
│  Skip Cert Verify: [✓]                      │
│  Nodes:          All                        │
└─────────────────────────────────────────────┘

连 vCenter 还是 ESXi? 推荐直接连 ESXi 主机,按主机批量迁移,速度快。

5.2 执行单个 VM 导入

Step 1:源侧关机 VM

powershell 复制代码
Stop-VM -VM app-dev-02 -Confirm:$false

Step 2:在 PVE 选中 VM → 点 Import

复制代码
┌─── Import Guest: app-dev-02 ────────────────────────┐
│ VM ID:          [ 102 ]                             │
│ Name:           [ app-dev-02 ]                      │
│ Target node:    [ pve01    ▼ ]                      │
│ Target storage: [ local-zfs ▼ ]                     │
│ CPU type:       [ x86-64-v2-AES ▼ ]                 │
│ OS Type:        [ Linux 6.x/2.6 ▼ ]                 │
│ ISO for drivers:[ virtio-win.iso ▼ ]                │
└─────────────────────────────────────────────────────┘

关键选项说明:

  • CPU type :选 x86-64-v2-AES 保证跨代 CPU 兼容
  • Target storage:选 SSD 存储提升导入速度
  • OS Type :Linux 选 Linux 6.x/2.6,Windows 选对应版本

Step 3:观察任务日志

复制代码
Task viewer: Import guest 'app-dev-02'
──────────────────────────────────────────────────
Querying VM metadata...
Creating VM 102...
Importing disk 'scsi0' (40 GB)...
transferred 40.0 GiB of 40.0 GiB (100.0%)
TASK OK

速度参考:千兆网约 100 MB/s,万兆网约 600-800 MB/s。

Step 4:启动前检查配置

常见修正项:

  • 源 VM 是 UEFI 启动 → BIOS 改为 OVMF (UEFI),并添加 EFI Disk
  • Windows 2012 R2 或更老 → Machine 改为 pc-i440fx
  • 网卡模型若有兼容问题 → 改为 e1000

六、Windows VM 迁移完整步骤

核心难点:原 VM 使用 LSI/BusLogic 控制器,启动后找不到 VirtIO 磁盘会蓝屏。必须提前在源 VMware 中注入 VirtIO 驱动

6.1 源侧准备(ESXi 中,VM 开机状态)

Step 1:挂载 virtio-win.iso

vSphere Client:VM 右键 → Edit Settings → CD/DVD Drive → Datastore ISO File

Step 2:安装驱动 (进入 Windows,运行 D:\virtio-win-gt-x64.msi,勾选所有组件)

Step 3:启用 VirtIO 启动驱动(关键!)

cmd 复制代码
reg add "HKLM\SYSTEM\CurrentControlSet\Services\viostor" /v Start /t REG_DWORD /d 0 /f
reg add "HKLM\SYSTEM\CurrentControlSet\Services\vioscsi" /v Start /t REG_DWORD /d 0 /f
reg add "HKLM\SYSTEM\CurrentControlSet\Services\NetKVM" /v Start /t REG_DWORD /d 0 /f
bcdedit /set {current} hypervisorlaunchtype off

没做这一步 :迁移后开机直接蓝屏 STOP 0x0000007B INACCESSIBLE_BOOT_DEVICE

Step 4:卸载 VMware Tools(控制面板)

Step 5:关机 shutdown /s /t 0

6.2 PVE 侧导入后调整

救急法:如果没装驱动就迁移了,把磁盘临时改为 IDE 启动,进系统后再装驱动切回 VirtIO。

启动后:

  1. 设备管理器检查无黄色感叹号
  2. 安装 QEMU Guest Agent(guest-agent\qemu-ga-x86_64.msi)
  3. PVE Web UI → VM → Options → QEMU Guest Agent: Enabled

七、Linux VM 迁移完整步骤

7.1 源侧准备

Step 1:确保 initramfs 含 virtio 模块

bash 复制代码
# CentOS/RHEL
dracut --add-drivers "virtio_blk virtio_scsi virtio_net virtio_pci" -f -v
lsinitrd /boot/initramfs-$(uname -r).img | grep virtio

# Ubuntu/Debian
echo -e "virtio_blk\nvirtio_scsi\nvirtio_net\nvirtio_pci" >> /etc/initramfs-tools/modules
update-initramfs -u -k all

Step 2:检查 fstab 使用 UUID

bash 复制代码
cat /etc/fstab
# 必须是 UUID=xxx,不能是 /dev/sdX
grep -i "root=" /etc/default/grub

Step 3:切换 Guest Agent

bash 复制代码
# RHEL 系
dnf remove open-vm-tools -y
dnf install qemu-guest-agent -y
systemctl enable --now qemu-guest-agent

# Debian 系
apt remove open-vm-tools -y
apt install qemu-guest-agent -y

shutdown -h now

八、备份系统 PBS 部署

8.1 PBS 安装

下载 ISO:https://www.proxmox.com/en/downloads/proxmox-backup-server

访问 https://10.0.0.30:8007

8.2 创建 Datastore

UI 路径:Datastore → Add Datastore

复制代码
Name:         backup-main
Backing Path: /mnt/backup
GC Schedule:  daily 02:00
Prune Schedule: daily 03:00
Keep Last:    3
Keep Daily:   14
Keep Weekly:  8
Keep Monthly: 12

8.3 PVE 中添加 PBS 存储

获取指纹:

bash 复制代码
root@pbs01:~# proxmox-backup-manager cert info | grep Fingerprint

UI:Datacenter → Storage → Add → Proxmox Backup Server

8.4 配置备份任务

UI:Datacenter → Backup → Add


九、HA 配置实操

9.1 前置检查

bash 复制代码
pvecm status | grep Quorate       # 必须 Yes
pvesm status                       # 必须有 shared=1 存储
systemctl status pve-ha-lrm

9.2 创建 HA 组

UI:Datacenter → HA → Groups → Create

9.3 为 VM 启用 HA

bash 复制代码
ha-manager add vm:102 --group critical-vms --max_restart 3 --state started
ha-manager status

9.4 故障演练

bash 复制代码
# 在 pve01 上硬断电
echo b > /proc/sysrq-trigger

# 在 pve02 观察
watch -n 1 "ha-manager status"

预期:约 2 分钟内 VM 在其他节点启动。


十、批量迁移脚本

10.1 CLI 导入单个 VM

bash 复制代码
pvesh get /nodes/pve01/storage/esxi-source/content

qm importovf 200 /mnt/esxi/app-dev-02/app-dev-02.ovf local-zfs --format qcow2

qm disk import 200 esxi-source:ha-datacenter/app-dev-02/app-dev-02.vmdk local-zfs

10.2 批量脚本

bash 复制代码
#!/bin/bash
# batch-import.sh
CSV=/root/migrate-list.csv
ESXI_STORE="esxi-source"

while IFS=, read -r vmname vmid storage node; do
    [[ "$vmname" == "vmname" ]] && continue

    echo "=== Importing $vmname as VMID $vmid to $node:$storage ==="

    pvesh create /nodes/$node/qemu \
        --vmid $vmid \
        --name $vmname \
        --import-working-storage $storage \
        --storage $storage \
        --source $ESXI_STORE:ha-datacenter/$vmname/$vmname.vmx

    if [ $? -eq 0 ]; then
        echo "[OK] $vmname"
    else
        echo "[FAIL] $vmname" >> /root/migrate-failed.log
    fi
done < "$CSV"

CSV 示例:

复制代码
vmname,vmid,storage,node
web-test-01,201,local-zfs,pve01
app-dev-02,202,local-zfs,pve02
app-dev-03,203,local-zfs,pve03

十一、故障排查速查表

现象 可能原因 解决方法
Windows 启动蓝屏 0x7B 缺 VirtIO 驱动 改 IDE 启动 → 装驱动 → 改回 SCSI
Linux dropped to shell fstab 用了 /dev/sdX 救援盘进单用户改 UUID
导入任务卡在 0% ESXi API 限速/证书 检查 ESXi 负载,勾 skip cert
导入速度慢(<50MB/s) 源 ESXi thin 读取慢 先 Storage vMotion 到 thick
VM 启动后无网络 MAC 变了或网卡名变 改回原 MAC;Linux 改 netplan
"No bootable device" UEFI/BIOS 不匹配 改 BIOS 为 OVMF 加 EFI Disk
HA 不触发切换 没配 fencing/watchdog 安装 watchdog,配置 IPMI fence
Ceph 性能低 网络或 OSD 盘问题 25GbE + 企业级 NVMe
集群脑裂 corosync 延迟过高 独立心跳网,link1 冗余
PBS 备份 no space GC 未运行 手动 garbage-collection start

十二、迁移后验证清单

技术层面(每台 VM)

复制代码
□ VM 成功启动,操作系统登录正常
□ 时间同步正确
□ 所有磁盘挂载正常
□ 网卡 IP/网关/DNS 正确,可 ping 外网
□ VirtIO 驱动加载(Windows 设备管理器无感叹号)
□ QEMU Guest Agent 运行
□ 业务服务端口监听
□ 业务冒烟测试通过
□ 备份任务能正常跑
□ 源 VMware VM 标记"保留 30 天不删"

集群层面

复制代码
□ pvecm status 所有节点 online
□ Ceph/存储健康
□ HA 演练至少一次成功
□ 备份成功率 > 99%
□ PBS GC/Prune 运行正常
□ 监控告警配置到位
□ 运维文档与账号交接完成
□ VMware 许可证到期日已记录

附录 A:常用 qm/pct 命令速查

bash 复制代码
# VM 操作
qm list
qm start 100
qm shutdown 100
qm stop 100
qm migrate 100 pve02 --online
qm config 100
qm set 100 -memory 8192
qm resize 100 scsi0 +10G

# 磁盘导入
qm disk import 100 /path/to/disk.vmdk local-zfs
qm disk import 100 /path/to/disk.qcow2 local-zfs

# 快照
qm snapshot 100 before-upgrade
qm rollback 100 before-upgrade
qm delsnapshot 100 before-upgrade

# 备份
vzdump 100 --storage pbs-main --mode snapshot --compress zstd

附录 B:PowerCLI 批量关机脚本

powershell 复制代码
$batch = @("app-dev-02","app-dev-03","web-test-01")
foreach ($vm in $batch) {
    Write-Host "Shutting down $vm ..."
    Shutdown-VMGuest -VM $vm -Confirm:$false
}

do {
    Start-Sleep 10
    $running = Get-VM -Name $batch | Where PowerState -eq "PoweredOn"
    Write-Host "Still running: $($running.Count)"
} while ($running.Count -gt 0)

Write-Host "All VMs powered off, safe to import."

本手册版本 v2.0 | 实际迁移前请在测试环境完整演练至少一次
参考:Proxmox VE 官方文档、PVE 8.2 ESXi Import 发布说明、Red Hat virtio-win 项目

相关推荐
鲁Q同志15 小时前
VMware虚拟机安装Ubuntu22
ubuntu·vmware
爱学习的小囧2 天前
VMware vCenter Server 9.0.2.0 资源详解+完整部署教程+下载指南+常见问题
运维·服务器·esxi·vmware·虚拟化·esxi9.0.2.0
爱学习的小囧2 天前
ESXi 开启 Secure Boot 后驱动签名验证失败完整处置教程:合规修复与临时测试方案全解
服务器·数据库·esxi·虚拟化
爱学习的小囧2 天前
ESXi 存储路径丢失(PDL/APD)完整处置教程:分清类型再操作,一步不踩坑
linux·运维·服务器·网络·esxi·vmware
爱学习的小囧2 天前
ESXi 环境 NFSv3 与 NFSv4.1 哪个更稳?深度对比 + 选型指南 + 运维全教程
运维·服务器·网络·虚拟化
爱学习的小囧2 天前
VMware ESXi 双管理网口配置全教程:新增 vmk1 端口 + 主备冗余 / 负载均衡双模式实操
运维·服务器·网络·windows·负载均衡·虚拟化
爱学习的小囧3 天前
虚拟机开机放哪台主机?ESXi DRS 初始放置位置选择指南:CPU / 内存 / 存储 / 网络综合评分攻略
服务器·esxi·虚拟化·esxi8.0
湖城彭于晏3 天前
VMware Ubuntu 固定IP + 上网 + 远程访问 完整教程
linux·ubuntu·vmware
爱学习的小囧4 天前
ESXi VMkernel 端口 MTU 最佳设置详解
运维·服务器·网络·php·虚拟化