如何使用查询在 SQL Server 中备份数据库
2026-07-24
2026-07-24
2026-07-24
2026-07-24
将虚拟机从 VMware 迁移到基于 KVM 的 Hypervisor(如 Proxmox)时,会立即面临一个兼容性问题:QEMU 无法直接启动 VMDK 文件,仅重命名扩展名无法解决该问题,您需要执行 VMDK 到 QCOW2 的格式转换。本指南涵盖 Linux、Proxmox 和 Windows 环境下的 VMDK to QCOW2 转换方法,包括 qemu-img 和 virt-v2v 的使用,以及常见迁移错误的修复方案。
本指南涵盖在 Linux、Proxmox 和 Windows 上将 VMDK 转换为 QCOW2 的方法,包括 qemu-img 工作流、Proxmox 的 importdisk 流程,以及需要重新配置驱动程序时使用的 virt-v2v。文末的故障排查表涵盖了最常见的启动错误。
在开始转换之前,了解为什么这两种格式不能互换会很有帮助。
VMDK 是 VMware 的原生磁盘格式,用于 ESXi 和 VMware Workstation。QCOW2 是 QEMU 和 KVM 的原生格式,内置支持快照、压缩和 AES 加密。它是 Proxmox 和大多数 OpenStack 部署的默认格式。
您不能简单地将 .vmdk 文件重命名为 .qcow2。Hypervisor 将无法找到有效的启动头,虚拟机将无法启动。正确的转换会重建内部数据结构,使磁盘在 KVM 下正常工作。

跳过这些步骤是导致转换产生损坏镜像或虚拟机无法启动的最常见原因。
qemu-img info source.vmdk 以确认文件大小、格式和磁盘类型。-flat.vmdk 结尾的大型数据文件。您需要将转换工具指向 -flat.vmdk 文件,或确保两个文件在同一目录中。在 Linux 上转换磁盘格式最直接的方式是使用 qemu-img 工具,它是 QEMU 工具集的一部分。
大多数 Linux 发行版默认不包含 qemu-img。使用发行版的包管理器进行安装。
对于 Ubuntu 或 Debian:
sudo apt update && sudo apt install qemu-utils
对于 RHEL、CentOS 或 Fedora:
# RHEL/CentOS 7
sudo yum install qemu-img
# RHEL/CentOS 8+, Fedora
sudo dnf install qemu-img
导航到包含源 VMDK 的目录,然后运行:
qemu-img convert -f vmdk -O qcow2 source.vmdk output.qcow2
参数说明如下:
-f vmdk:指定输入格式-O qcow2:指定输出格式-p:(可选)转换期间显示进度条-c:(可选)压缩输出以减少文件大小转换完成后,确认输出文件有效:
qemu-img info output.qcow2
该命令返回虚拟大小、实际磁盘使用情况和格式类型。如果格式显示为 qcow2 且虚拟大小与原始磁盘匹配,则转换成功。
如果源 VM 运行 Windows,转换后在 KVM 上很可能无法启动。Windows 默认不包含 VirtIO 驱动程序,因此无法与 KVM 存储控制器通信。
有两种处理方式:
Proxmox VE 基于 Debian,预装了 qemu-img。然而,导入工作流与标准 Linux 转换不同。简单地将 .qcow2 文件复制到存储目录中是行不通的——Proxmox 通过其自身的配置系统管理磁盘,需要使用 qm importdisk 正确注册磁盘。
将 VMDK 上传到 Proxmox 主机(通过 SCP 或 Web UI 文件上传),然后运行转换:
qemu-img convert -f vmdk -O qcow2 source.vmdk output.qcow2
转换完成后,使用 qm importdisk 将 QCOW2 文件导入到特定的 VM:
qm importdisk <VMID> output.qcow2 <storage_name>
将 <VMID> 替换为目标 VM 编号(例如 101),将 <storage_name> 替换为 Proxmox 存储目标(例如 local 或 local-lvm)。
导入完成后,在 Proxmox Web UI 中转到 VM 的 Hardware 选项卡,在启动前挂载新导入的磁盘。
并非所有 Proxmox 存储后端都直接支持 QCOW2 文件。
local,文件存储于 /var/lib/vz 下):原生支持 .qcow2 文件。local-lvm 或 ZFS):不存储 QCOW2 文件。当您运行 qm importdisk 指向这些后端时,Proxmox 会自动提取数据并将其写入为原始逻辑卷。这是预期行为,通常提供更好的 I/O 性能。local 是测试期间导入 QCOW2 最安全的选择。对于生产 VM,切换到 local-lvm 可获得更好的原始卷性能。qemu-img 并非原生 Windows 应用程序。最可靠的方式是通过 Windows Subsystem for Linux (WSL) 运行它,这为您提供了完整的 Linux 环境,而无需单独的 VM 开销。
以管理员身份打开 PowerShell 并运行:
wsl --install
这会安装 WSL 2 并将 Ubuntu 设为默认发行版。需要重启才能完成设置。机器重启后,终端窗口将打开以完成 Ubuntu 安装。
在 Ubuntu 终端中运行:
sudo apt update && sudo apt install qemu-utils
WSL 将 Windows 驱动器挂载在 /mnt/ 下。C:\VMs\my_disk.vmdk 中的文件在 WSL 中可通过 /mnt/c/VMs/my_disk.vmdk 访问。
然而,直接在 /mnt/c/ 路径上运行转换会因跨文件系统开销而明显变慢。为获得更好性能,先将 VMDK 复制到 WSL 主目录中:
cp /mnt/c/VMs/my_disk.vmdk ~/my_disk.vmdk
cd ~
qemu-img convert -f vmdk -O qcow2 my_disk.vmdk output.qcow2
步骤 5:将输出文件移回 Windows
转换完成后,将 QCOW2 文件复制回 Windows 驱动器:
cp ~/output.qcow2 /mnt/c/VMs/output.qcow2
该文件随后可在 Windows Explorer 中访问,并准备传输到您的 KVM 或 Proxmox 主机。
qemu-img 仅转换磁盘格式,不涉及磁盘内部的操作系统。当将 Windows VM 从 ESXi 迁移到 KVM 时,客户机通常会因缺少新 Hypervisor 所需的 VirtIO 驱动程序而无法启动。
virt-v2v 通过一步完成完整迁移来解决此问题。它转换磁盘格式、注入 VirtIO 存储和网络驱动程序、调整引导加载程序,并移除 VMware Tools 以防止冲突。
在以下情况下使用 virt-v2v:
对于 Linux 客户机,qemu-img 通常就足够了。Linux 内核默认包含 VirtIO 驱动程序,因此仅格式转换通常可以正常启动而无引导问题。如果您正在评估命令行之外的其它 V2V 转换工具,我们的指南涵盖了主要选项。
virt-v2v 可通过包管理器在大多数 Linux 发行版上获得:
# Debian/Ubuntu
sudo apt install virt-v2v
# RHEL/CentOS/Fedora
sudo dnf install virt-v2v
直接从 vCenter 服务器迁移 VM:
virt-v2v -ic vpx://user@vcenter.example.com/Datacenter/esxi-host \
-it vddk \
-o local -os /var/tmp \
my_windows_vm
如果要连接到独立的 ESXi 主机,将 vpx:// 替换为 esx://:
virt-v2v -ic esx://user@esxi-host.example.com \
-it vddk \
-o local -os /var/tmp \
my_windows_vm
-it vddk 标志需要单独安装 VMware Virtual Disk Development Kit (VDDK)。从 VMware Developer 门户下载,并在运行这些命令前按照 virt-v2v 文档配置库路径。该工具将转换后的 QCOW2 磁盘和 .xml 元数据文件输出到指定目录
大多数转换问题归结为两个原因:选择了错误的源文件,或者客户机操作系统期望的硬件配置与 KVM 提供的配置不匹配。
下表涵盖了最常见的错误及其修复方法。
| 错误 | 原因 | 修复方法 |
|---|---|---|
| 无效的 footer | 选择了描述符文件而非数据文件 | 使用 -flat.vmdk 文件 |
| 启动失败:”not a bootable disk” | 磁盘控制器类型错误或转换损坏 | 将控制器切换为 IDE、SCSI 或 VirtIO |
| qcow2 在 local-lvm 上不受支持 | 将 .qcow2 直接复制到块存储中 |
改用 qm importdisk |
| 蓝屏(Windows 客户机) | 缺少 VirtIO 驱动程序 | 使用 IDE 控制器启动,安装 VirtIO 驱动程序,然后切换 |
| 输出文件大于预期 | 精简置备的 VMDK 在转换时扩展了 | 添加 -c 标志进行压缩 |
本指南中介绍的 qemu-img 和 virt-v2v 工作流适用于单个转换。但当您需要在不同环境之间迁移多个 VM,或需要在整个过程保持生产系统运行时,手动命令行工具的局限性就开始显现。没有内置验证、没有集中的进度跟踪,也没有办法在传输中途失败时从中断处继续——只能重新开始。
i2Move是一个统一的迁移平台,正是为这些场景而构建。它支持跨物理、虚拟和云环境的无中断实时迁移,并解决了大规模 VMware 到 KVM 过渡中出现的多个痛点。
qemu-img info 来验证每个磁盘。对于迁移完成后还需要持续数据保护的团队,i2Backup 提供跨虚拟、物理和云环境的集中备份。对于可用性要求更严格的工作负载,i2Availability 处理生产与灾备环境之间的实时复制和自动故障切换。
将 VMDK 转换为 QCOW2 归结为为工作选择合适的工具。
对于大多数 Linux 用户来说,qemu-img 通过几个命令即可干净地完成转换。在 Proxmox 上,需要额外的 qm importdisk 步骤来将磁盘正确注册到存储后端。Windows 用户可以通过 WSL 遵循相同的 Linux 工作流。当迁移需要重新配置驱动程序的 Windows 客户机时,virt-v2v 是比纯格式转换更可靠的选择。
无论使用哪种方法,规则都是一样的:导出前提交所有快照,将工具指向 -flat.vmdk 数据文件,并在导入前使用 qemu-img info 验证输出。
对于需要进行更大规模迁移或工作负载不能容忍停机的团队,英方软件的 i2Move 提供了一条更具结构化的路径,具备内置验证、驱动注入和跨异构环境的实时迁移支持。
公告
邮件
销售