从ESXI迁移到PVE有多种方式,其中最简单的是网络迁移,通过PVE webUI管理界面中把ESXI节点主机添加进来(下图), ![esxi-in-pve][1] 这个不是今天讲的重点(因为我只有一台机器),今天讲的主要是通过 离线/导入的方式将ESXI虚拟机完整的迁移到PVE中。 先别急着迁移,在开始之前呢,先来了解下虚拟机常用的磁盘格式以及虚拟机配置之间的一些差异,不然可能会出现一些错误。 之前写过的,虚拟机磁盘格式的介绍:[post cid="179" /] 下面我把常见磁盘文件格式做了个总结,别搞错了。 | 文件后缀 | 所属平台 | 本质/作用 | 迁移时必须带吗? | | -------------- | ----------------------- | ------------------------------------ | --------------------------------- | | **.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中。 ![upload-disk][2] 我觉得到这里你可能会发现一个问题,原来在 ESXI中部署的虚拟机明明选择了精简置备但还是占用了很大的空间(相当于厚置备 看下图),原因是导出vmdk之前的Thin 精简置备会自动变为flat,而且 ESXI下的 Thin 只对 VMFS层有效,对于外部工具(导入/导出)来说这还是一块厚置备的磁盘,我不是通过导出的ova解压得到的vmdk,我是通过群晖的AAB直接下载到PVE中的,与直接复制vmdk文件一样 ![disk-info][3] 这种情况怎么解决呢? 使用 vmkfstools 先复制为 thin 然后再下载就可以了。 ```bash 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 ``` 然后将磁盘挂载上去就可以了。 ```bash qm set ${VMID} --scsihw virtio-scsi-pci --scsi0 ${STORE}:${VMID}/vm-${VMID}-disk-0.qcow2 ``` [1]: https://img.wanghaoyu.com.cn/Picture/img/20250715115013.png [2]: https://img.wanghaoyu.com.cn/Picture/img/20250715121547.png [3]: https://img.wanghaoyu.com.cn/Picture/img/20250715122432.png 最近有点忙,写的有点乱,后面在优化。。。 Loading... 从ESXI迁移到PVE有多种方式,其中最简单的是网络迁移,通过PVE webUI管理界面中把ESXI节点主机添加进来(下图), ![esxi-in-pve][1] 这个不是今天讲的重点(因为我只有一台机器),今天讲的主要是通过 离线/导入的方式将ESXI虚拟机完整的迁移到PVE中。 先别急着迁移,在开始之前呢,先来了解下虚拟机常用的磁盘格式以及虚拟机配置之间的一些差异,不然可能会出现一些错误。 之前写过的,虚拟机磁盘格式的介绍:<div class="preview"> <div class="post-inser post box-shadow-wrap-normal"> <a href="https://www.wanghaoyu.com.cn/archives/vm-disk.html" target="_blank" class="post_inser_a no-external-link no-underline-link"> <div class="inner-image bg" style="background-image: url(https://www.wanghaoyu.com.cn/usr/themes/handsome/assets/img/sj/2.jpg);background-size: cover;"></div> <div class="inner-content" > <p class="inser-title">一文了解虚拟机磁盘镜像:从 0 到 1 看懂 VMDK、QCOW2、RAW</p> <div class="inster-summary text-muted"> 硬盘就相当于是金属盒子,虚拟磁盘是“盒子里的盒子”。不同厂商为了把它塞进自家生态圈,给它起了各种英文缩写,所以,它... </div> </div> </a> <!-- .inner-content #####--> </div> <!-- .post-inser ####--> </div> 下面我把常见磁盘文件格式做了个总结,别搞错了。 | 文件后缀 | 所属平台 | 本质/作用 | 迁移时必须带吗? | | -------------- | ----------------------- | ------------------------------------ | --------------------------------- | | **.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中。 ![upload-disk][2] 我觉得到这里你可能会发现一个问题,原来在 ESXI中部署的虚拟机明明选择了精简置备但还是占用了很大的空间(相当于厚置备 看下图),原因是导出vmdk之前的Thin 精简置备会自动变为flat,而且 ESXI下的 Thin 只对 VMFS层有效,对于外部工具(导入/导出)来说这还是一块厚置备的磁盘,我不是通过导出的ova解压得到的vmdk,我是通过群晖的AAB直接下载到PVE中的,与直接复制vmdk文件一样 ![disk-info][3] 这种情况怎么解决呢? 使用 vmkfstools 先复制为 thin 然后再下载就可以了。 ```bash 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 ``` 然后将磁盘挂载上去就可以了。 ```bash qm set ${VMID} --scsihw virtio-scsi-pci --scsi0 ${STORE}:${VMID}/vm-${VMID}-disk-0.qcow2 ``` [1]: https://img.wanghaoyu.com.cn/Picture/img/20250715115013.png [2]: https://img.wanghaoyu.com.cn/Picture/img/20250715121547.png [3]: https://img.wanghaoyu.com.cn/Picture/img/20250715122432.png 最近有点忙,写的有点乱,后面在优化。。。 Last modification:November 8, 2025 © Allow specification reprint Support Appreciate the author Like 1 如果觉得我的文章对你有用,请随意赞赏