从ESXI迁移到PVE有多种方式,其中最简单的是网络迁移,通过PVE webUI管理界面中把ESXI节点主机添加进来(下图),
先别急着迁移,在开始之前呢,先来了解下虚拟机常用的磁盘格式以及虚拟机配置之间的一些差异,不然可能会出现一些错误。 之前写过的,虚拟机磁盘格式的介绍:一文了解虚拟机磁盘镜像:从 0 到 1 看懂 VMDK、QCOW2、RAW
下面我把常见磁盘文件格式做了个总结,别搞错了。
| 文件后缀 | 所属平台 | 本质/作用 | 迁移时必须带吗? |
|---|---|---|---|
| .vmdk | VMware ESXi/Workstation | 虚拟磁盘描述符(小文本文件,指向真正数据) | ✅ 必须带,否则 qemu-img 报错 |
| -flat.vmdk | VMware | 真正的磁盘数据(大块二进制) | ✅ 必须与同名的 .vmdk 配对 |
| .vmx | VMware | 虚拟机 配置文件(文本,记录 CPU/内存/网卡/磁盘控制器等) | ❌ 不直接用于 PVE,但可以用来查“控制器类型、固件、磁盘顺序” |
| .vmdk(单文件) | VMware | 描述+数据合一的“monolithic”格式 | ✅ 直接当 .vmdk 用即可 |
| .qcow2 | KVM/QEMU/Proxmox | 虚拟磁盘格式,支持快照、压缩、精简置备 | ✅ PVE 推荐最终格式 |
| .raw | KVM/QEMU/Proxmox | 裸镜像(= dd 出来的整块盘),无元数据 | ⚠️ 占满空间大,不推荐 |
| .ova/.ovf | VMware/VirtualBox | 打包的“导出模板”,内含 .vmdk + .ovf 描述 | ⚠️ 需先解压提取 .vmdk 再导入 |
还有需要明确的是控制器总线是什么,操作系统以BIOS 还是UEFI方式启动的,错误的配置会导致迁移之后无法启动虚拟机
| 需要确认的磁盘属性 | 为什么必须知道 | 不确认的代价 |
|---|---|---|
| 控制器总线(IDE / SATA / SCSI / NVMe) | Windows 缺驱动会 0x7B 蓝屏,Linux 可能找不到根分区 | 直接黑屏/蓝屏 |
| 固件启动方式(BIOS vs UEFI) | UEFI 系统用 SeaBIOS 启动 → 找不到 EFI 分区 | 永远停在 “Boot from Hard Disk…” |
| 分区表格式(MBR vs GPT) | 重建引导记录、调整 BIOS/UEFI 时必须知道 | 修复引导失败 |
好了 既然都看到这里了,想必应该都了解了吧,下面开始迁移
首先将ESXI中的虚拟机导出,或者到虚拟机目录下载vmdk也可以(不建议),通过导出虚拟机会得到一个OVA/OVF 虚拟机模板配置文件,将其解压之后可以获得 vmdk 原始虚拟机磁盘文件。
导出完成之后就可以愉快的安装PVE了,安装完成之后将虚拟磁盘文件采用SCP等方式上传到PVE中。
我觉得到这里你可能会发现一个问题,原来在 ESXI中部署的虚拟机明明选择了精简置备但还是占用了很大的空间(相当于厚置备 看下图),原因是导出vmdk之前的Thin 精简置备会自动变为flat,而且 ESXI下的 Thin 只对 VMFS层有效,对于外部工具(导入/导出)来说这还是一块厚置备的磁盘,我不是通过导出的ova解压得到的vmdk,我是通过群晖的AAB直接下载到PVE中的,与直接复制vmdk文件一样
使用 vmkfstools 先复制为 thin 然后再下载就可以了。
vmkfstools -i xxx.vmdk /vmfs/volumes/nfs/export/xxx-thin.vmdk -d thin
```bash
或者你不嫌费劲你可以直接给200G的vmdk干到PVE里面去。利用`-o preallocation=off` 转换为 thin
```bash
qemu-img convert \
-p -f vmdk -O qcow2 \
-o preallocation=off,compat=1.1,lazy_refcounts=on \
/opt/Win2K12_1.vmdk \
/var/lib/vz/images/${VMID}/vm-${VMID}-disk-x.qcow2然后将磁盘挂载上去就可以了。
qm set ${VMID} --scsihw virtio-scsi-pci --scsi0 ${STORE}:${VMID}/vm-${VMID}-disk-0.qcow2最近有点忙,写的有点乱,后面在优化。。。