简介:针对使用VMware Workstation运行qcow2格式镜像这一高频需求,整理了一份从零开始的操作手册,目标读者是虚拟化运维、系统部署、环境测试人员。手册详细描述了环境准备所需的软件及版本(VMware Workstation 15.x、qemu-img 9.1.0、麒麟V10 ISO),并分步骤给出VMware Workstation安装、qemu-img安装与环境变量配置、麒麟操作系统的虚拟机安装流程,以及qcow2镜像在虚拟机中的运行操作方法,特别强调了创建虚拟磁盘时选择单个文件存储以避免文件混乱等实用细节。资源包仅包含1个doc文档,资源包大小为3.77MB,内容结构完整,适合作为桌面虚拟机场景下运行qcow2镜像的参考手册,既可通读学习,也可在实操时按步骤对照执行。已有2023人学习下载,对需要快速验证qcow2镜像、部署麒麟V10系统的用户而言,这份手册能显著缩短环境搭建时间,降低格式兼容与启动失败类问题的排查成本。
1. 拿到 qcow2 镜像却只有 VMware Workstation,第一件事不是硬开而是先认清格式
手头有别人给的 qcow2 镜像,或者刚从 Linux 服务器上导出一份 KVM 虚拟机磁盘,本地却只装了 VMware Workstation,双击虚拟机文件列表发现根本认不出这个格式。这个问题几乎每个做运维或开发环境交付的人都撞上过。qcow2 是 KVM/QEMU 的默认磁盘格式,VMware Workstation 原生只能识别 vmdk 和 vhd,直接改扩展名骗不进去,强行用“打开虚拟机” 选择 qcow2 文件也只会收到一句“无法识别的文件格式”。
常见的做法不是找什么“万能打开的虚拟机软件”,而是用 qemu-img 把 qcow2 转成 VMware Workstation 认识的 vmdk,再手动建一台新虚拟机指向它。整个流程核心步骤只有三个:确认镜像格式和虚拟硬件配置、用 qemu-img 转换格式、用 VMware Workstation 创建虚拟机时选择“使用现有虚拟磁盘”。这文章就是把这套路径一步步写清楚,包括转换时最容易踩的磁盘控制器、OS 类型、引导方式这几个坑。适合刚拿到centos7 qcow2镜像的运维新手,也适合以前只玩过 VMware 格式、对 qcow2 和 qemu 工具链不熟的桌面工程师。读完之后你能独立把任意一个 qcow2 镜像在本地 Workstation 里跑起来,不用再到处找“能用 vmdk 的 CentOS 镜像”重新下载。
2. qcow2 与 vmdk 的格式差异和转换工具选型
2.1 qcow2 是“写时分配”的磁盘,vmdk 更依赖固定分配
qcow2 全称 QEMU Copy On Write version 2,设计目标是让虚拟磁盘按需增长。一个声明 40GB 的 qcow2 文件,刚创建时可能只有几百 KB,只有在客户机里真正写入数据时,宿主机上的文件才逐步变大。这个特性在 KVM 环境下特别节省存储,但代价是性能不如固定分配的裸设备格式,而且 qcow2 内部有 snapshot、compression、AES 加密等可选的元数据特性,不是所有第三方工具都完整支持。
VMware 的 vmdk 格式有多种子类型,常见的有 monolithicSparse(单文件稀疏,VMware Workstation 默认)、monolithicFlat(固定大小)、streamOptimized(用于 OVF 导出的流式优化)。Workstation 打开 vmdk 时,只要不是远端存储或特殊锁定格式,兼容性都很高。qemu-img 转换时默认把 qcow2 的内容展开成 monolithicSparse 的 vmdk,也就是说转换出来的 vmdk 文件大小约等于 qcow2 的虚拟磁盘实际使用量,而不是声明的最大值。如果你在命令里加了-o preallocation=meta或选择了 flat 格式,文件大小才会接近完整容量,这点在磁盘空间规划时要提前算好。
# 查看 qcow2 镜像的详细信息,包括虚拟大小、实际占用、快照和压缩情况 qemu-img info /data/images/centos7.qcow2 # 输出示例关键行 # image: centos7.qcow2 # file format: qcow2 # virtual size: 40 GiB (42949672960 bytes) # disk size: 3.2 GiB # cluster_size: 65536 # Format specific information: # compat: 1.1 # lazy refcounts: true看输出里的virtual size和disk size就能知道这个镜像的“虚头”多大。转换前必须保证目标磁盘分区有足够空间容纳disk size对应的 vmdk 文件,同时记下虚拟大小,后面在 VMware 创建虚拟机时填的磁盘容量要匹配这个数字,否则 VMware 会认为磁盘配置被改过。
2.2 转换工具选 qemu-img 还是 virt-v2v
qemu-img 来自 QEMU 项目,几乎所有 Linux 发行版都带。Debian/Ubuntu 上包名是qemu-utils,CentOS/RHEL 上是qemu-img,安装方式直接apt install qemu-utils或yum install qemu-img。Windows 上想用 qemu-img,可以下载 QEMU 的 Windows 编译版,但更推荐的做法是在本地 Linux 机器或 WSL2 里完成转换,因为 Windows 下的 qemu-img 偶尔会遇到文件锁和路径分隔符问题。
virt-v2v 是 Red Hat 出品的虚拟机迁移工具,支持把 KVM/Xen/OVirt 的虚拟机直接转换成 VMware ESXi 或 OpenStack 的格式。它比 qemu-img 更“上层”,会处理 guest 内部的驱动、磁盘控制器类型、网卡模型等。但 virt-v2v 的输入要求是一台完整的虚拟机(有 xml 配置),而不是单独扔一个 qcow2 文件过来。大多数“拿到 qcow2 镜像”的场景,手上只有磁盘镜像,没有域配置文件,这时候 qemu-img 是最直接可靠的选择。virt-v2v 适合的是从 KVM 宿主机整体迁移的场景,不是单文件转换。
| 对比项 | qemu-img | virt-v2v |
|---|---|---|
| 输入要求 | 单个磁盘镜像文件 | 虚拟机整机定义 |
| 输出格式 | vmdk / vdi / vhdx / raw | ova / vmdk / openstack |
| 是否改 guest 内部配置 | 否 | 会卸载原驱动注入新驱动 |
| 适用场景 | 单镜像格式转换 | 跨虚拟化平台迁移 |
| 学习成本 | 低,单条命令 | 高,需了解 libvirt 配置 |
如果只是想把 qcow2 转成能在 VMware Workstation 里打开的 vmdk,qemu-img 一条命令的事。如果后续要把整台 KVM 虚拟机迁到 ESXi,才需要考虑 virt-v2v 能自动处理驱动替换的优点。这里的思路和你从github 镜像站下载 Linux 发行版官方 qcow2 镜像回来本地复现环境是一样的,拿到的是镜像文件,不是虚拟机配置。
2.3 qemu-img convert 的执行逻辑和参数语义
转换命令的语义是“把输入文件的内容复制到输出文件,并在复制过程中做格式转换”。关键参数有几个:-O指定输出格式,-p显示进度条,-c对输出做压缩(仅对 qcow2 有意义,转 vmdk 时该参数通常被忽略或效果有限),-o指定输出格式的额外选项。
# 将 centos7.qcow2 转换为 vmware 兼容的 vmdk 文件,单文件稀疏格式 qemu-img convert -f qcow2 -O vmdk -p /data/images/centos7.qcow2 /data/images/centos7.vmdk-f qcow2指定输入格式,不写也能自动探测。-O vmdk是核心,指定目标格式为 vmdk。-p建议生产环境必加,否则大镜像转换时长时间没有任何输出会让人以为进程卡死。转换完成后可以在同目录看到一个.vmdk文件,可能还有.vmx之外的附属文件,取决于具体子格式。默认的 subformat 是monolithicSparse,只有一个 vmdk 文件,方便直接拷贝。
3. 用 qemu-img 把 qcow2 转成 vmdk 的完整操作步骤
3.1 转换前的镜像检查与磁盘空间确认
拿到 qcow2 镜像后不要急着转,先做两个检查。第一是镜像完整性,用qemu-img check检查是否有损坏的块。曾经遇到过镜像在拷贝过程中不完整,转换到 80% 时直接报Input/output error,浪费了十几分钟。第二是确认镜像内部的系统类型和分区结构,方法是用virt-filesystems或直接解析分区表。没有 libguestfs 工具时,可以用fdisk -l配合qemu-nbd挂载来看,但更快的办法是直接查 qemu-img info 的输出,如果镜像本身有backing file字段,说明它是一个差量镜像,必须先和基础镜像合并再转换。
# 检查镜像是否有结构错误 qemu-img check /data/images/centos7.qcow2 # 若输出包含 "Leaked" 或 "corrupt",说明镜像有损坏痕迹 # 建议重新从源头拷贝,不要强制转换检查完格式,还要算一下磁盘占用。qemu-img info里的disk size是转换时的工作集大小,但qemu-img convert在转换过程中会有临时开销,建议目标分区预留disk size的 1.2 倍以上空间。特别是 vmdk 默认 subformat 是 sparse 类型,写入时如果文件系统碎片化严重,实际占用空间可能比预期高。如果你后续还想在 Workstation 里给虚拟机拍快照,就再预留一部分空间给快照文件。
3.2 qemu-img convert 的完整参数组合
转换命令在不同场景下参数组合不同,这里给出三个常用变体。第一个是基础转换,适合绝大多数 Linux qcow2 镜像。第二个是流式优化,适合之后要上传到 ESXi 或 OVF 传输的场景。第三个是指定 vmdk 子格式,适合对兼容性有特殊要求的场景。
# 变体一:基础转换,兼容性最好 qemu-img convert -f qcow2 -O vmdk -p source.qcow2 target.vmdk # 变体二:转换为 streamOptimized 格式,后续用于 OVF/OVA 打包 qemu-img convert -f qcow2 -O vmdk -o subformat=streamOptimized -p source.qcow2 target.vmdk # 变体三:转换为固定大小 vmdk,避免工作负载增长导致后端文件碎片化 qemu-img convert -f qcow2 -O vmdk -o subformat=monolithicFlat -p source.qcow2 target.vmdksubformat=streamOptimized与 ESXi 的兼容性最好,但 VMware Workstation 对这种格式的写入性能较差,因为它本质上是为了流式导入设计的。如果你是 Workstation 本地使用,不需要 ESXi 迁移,就用默认的monolithicSparse。变体三会生成一个.vmdk描述文件加一个-flat.vmdk数据文件,拷贝时注意带上两个文件,只拷一个另一个找不到。选择哪种方式的核心判断依据是:这个 vmdk 是给当前这台机器用,还是后续要传给别人或上传到其他虚拟化平台。
3.3 转换结果的验证方法
转换完不能直接双击 vmdk,先验证文件结构是否正常。用qemu-img info查看目标 vmdk 的信息,确认virtual size与源镜像一致,file format显示为 vmdk。如果输出里出现Image is compressed或者Cannot get info之类的异常,说明转换结果有问题。也可以用file命令检查文件类型识别。
# 验证转换后的 vmdk 信息 qemu-img info /data/images/centos7.vmdk # 用 file 命令做第二层验证 file /data/images/centos7.vmdk # 预期输出: VMware4 disk image这一步看起来多余但很值得做。曾经遇到过老版本 qemu 转换时把 vmdk 的createType写错,导致 Workstation 提示“不受支持的磁盘类型”,但 qemu-img info 又能读出来。这类问题靠肉眼检查不出,需要直接跳到下一章在 Workstation 里创建虚拟机后用实际启动来验证。所以验证分两层:qemu-img info是静态层,Workstation 启动是动态层,两层都通过才算是转换成功。
4. VMware Workstation 导入转换后的 vmdk 并适配虚拟硬件
4.1 新建虚拟机的正确选型逻辑
vmdk 文件在手,接下来不是“打开”,而是“新建虚拟机时选择现有磁盘”。打开 VMware Workstation,点击“创建新虚拟机”,选择“自定义(高级)”模式,因为默认的“典型”模式在磁盘类型选择上不够灵活。虚拟机硬件兼容性选 Workstation 17.x 或 16.x,之后操作系统类型的选择是关键:如果转化的是 CentOS 7,选“Linux → CentOS 7 64 位”;如果镜像内是 Windows,选对应 Windows 版本。这一步影响的是 VMware 默认推荐的虚拟硬件参数和 ova 兼容模板,但不会改变 vmdk 本身的内容。
自定义虚拟机向导中的关键选择: 1. 固件类型:BIOS 还是 EFI,取决于原 qcow2 镜像里的引导方式 2. 磁盘类型:必须选 SATA 或 IDE,不能选 SCSI,原因见下方 4.2 3. 磁盘文件:选择“使用现有虚拟磁盘”,文件类型下拉框选“所有文件”引导方式的选择必须在创建虚拟机前确认,因为 VMware Workstation 不能像修改磁盘类型那样在虚拟机设置界面直接切换 BIOS/UEFI。确认方法是用qemu-img info看镜像里的分区表结构,如果存在 EFI System Partition(类型为 EFI 的 200MB 左右分区),大概率是 UEFI 引导,反之是 BIOS。
4.2 磁盘类型和控制器模型的选择
这是整个流程里最容易让人卡住的环节。qcow2 镜像在 KVM 里默认使用 virtio-blk 或 virtio-scsi 驱动,但 VMware 的虚拟磁盘控制器只有 IDE、SATA、SCSI 三种。把 vmdk 添加到 Workstation 虚拟机时,如果选 SCSI 控制器,VMware 会模拟一个 LSI Logic 或 VMware Paravirtual SCSI 控制器。问题在于,原 Linux guest 里如果没有编译对应驱动(大多数自编译内核的 KVM 镜像不会包含 LSI Logic 驱动),启动时会因为找不到 root 设备而进入 dracut 紧急模式。
推荐的磁盘类型搭配: - Linux 老内核(2.6.x 或 3.x): IDE - CentOS 7 / Ubuntu 18.04 及以后: SATA - Windows 7 及以前: IDE - Windows 10/11: SATA - 不推荐 SCSI,除非你能确认镜像内已装有 VMware PVSCSI 驱动SATA 控制器在 Workstation 中由 AHCI 模拟,现代 Linux 内核默认包含ahci模块,所以兼容性远好于 SCSI。IDE 是兼容性之王,连没有 AHCI 驱动的古老内核也能认,但性能较 SATA 略低。对于linux 系统 qcow2 下载场景下拿到的官方云镜像,它们的内核通常只包含 virtio 和 AHCI 驱动,没有 LSI 驱动,所以 SATA 是最稳妥的选择。
4.3 硬件配置与镜像匹配的细节调整
创建虚拟机时除了磁盘控制器,还有几个配置项需要手工调整。CPU 核心数要和镜像内部原配置接近,但不强制;内存大小同理。真正会影响启动的是固件类型和网络模型。网卡默认选 e1000e 即可,KVM 默认的 virtio-net 在 VMware 中不存在,但 e1000e 驱动在 Linux 内核中广泛存在,所以一般不需要额外操作。
# 修改 .vmx 文件添加 EFI 支持(如果镜像内是 UEFI 引导) # 在虚拟机目录下找到 .vmx 文件,添加或修改以下行 firmware = "efi"如果不改这一项,UEFI 引导的镜像在 BIOS 模式下会直接黑屏或提示找不到可引导设备。这个.vmx文件的修改要在 Workstation 完全关闭虚拟机的情况下进行,否则会因为在运行状态锁定文件而修改失败。改完后重新打开虚拟机,Workstation 会在引导时自动识别 EFI 分区并启动。
5. 转换后常见启动失败排查和磁盘整理技巧
5.1 “无引导设备”和 “hv 模块启动失败” 两处高频报错处理
启动时最常见的报错是No bootable device found。这种情况先确认 vmx 文件里的firmware是否正确,再确认磁盘控制器是否能让内核认到盘。如果镜像里是 SCSI 设备路径(如/dev/sda),而 VMware 模拟的控制器和你选择的不一致,内核认到的设备名可能是/dev/sdb或/dev/sr0,导致挂载 root 失败进入 dracut shell。这时需要在该 shell 里手动加载对应控制器驱动,或者回退到 IDE 类型再试。
另一个高频报错是虚拟机在此主机上不支持嵌套虚拟化。模块“hv”启动失败。未能启动虚拟机。这个错误来自 Workstation 的VHV特性,在部分 VMware Workstation 版本或 CPU 配置下,默认启用嵌套虚拟化导致模块加载失败。解决办法是编辑 vmx 文件,把vhv.enable设置为FALSE,这一步对运行业务系统的虚拟机无任何影响,只是关掉了“在虚拟机里再开虚拟机”的能力。
vmx 文件关键修改: vhv.enable = "FALSE" firmware = "bios"(或 efi,按实际引导方式)5.2 转换后的 qcow2 原始文件不宜保留在虚拟机目录内
转换完成后,原来的 qcow2 文件和转换出的 vmdk 文件如果放在同一目录,Workstation 不会报错,但目录体积会膨胀到原来的两倍,且容易让人在备份时把两种格式都拷走。建议转换完先启动虚拟机确认系统正常,再把 qcow2 迁移到单独的归档目录或直接删除。如果你有保留原始镜像的需求,可以用qemu-img convert把 vmdk 再转回 qcow2,也能验证 vmdk 文件是否完整。
# 把 VMware 的 vmdk 反向转回 qcow2,用于归档或重新部署到 KVM qemu-img convert -f vmdk -O qcow2 /data/images/centos7.vmdk /data/images/centos7-archived.qcow2这里有一个容易踩的细节:反向转换出的 qcow2 不再包含原始 qcow2 的 snapshot 和压缩信息,virtual size虽然不变,但disk size可能比原来大。因为原始 qcow2 的稀疏特性被 vmdk 的有损结构破坏了一部分。归档前应该重新用qemu-img convert -O qcow2 -c做一次压缩转换,可以大幅减小归档文件体积。
5.3 用流式优化和 sparse 选项缩小 vmdk 体积
转换出的 vmdk 文件大小不理想时,有两个整理手段。第一个是重新转换一次,指定subformat=streamOptimized。这个格式会把 vmdk 内部重写为类似流式结构,在保留数据完整性的前提下显著减小体积。缺点是 Workstation 加载这种格式的 vmdk 时会多一个解包过程,启动速度会比 sparse 格式慢一些。
第二个是使用virt-sparsify工具来收缩稀疏文件。这个工具会分析文件系统中的空闲块,把空闲区域在镜像里显式标记为“未分配”,从而让 vmdk 文件大小回到接近实际数据量的水平。需要先安装 libguestfs-tools,标准用法是virt-sparsify --convert vmdk source.qcow2 target.vmdk。注意 virt-sparsify 的输入输出不能是同一个文件,需要一个中间磁盘空间。使用这两个手段的组合时机是:先virt-sparsify收缩数据量,再qemu-img convert -o subformat=streamOptimized做最终格式化,这样既能缩小体积,又能让 vmdk 保持最优结构。
本文还有配套的精品资源,点击获取