
简介在VMware Workstation中直接运行qcow2镜像常会遇到格式不兼容问题这份操作手册针对该场景给出了完整解决方案。手册面向需要在本地虚拟机环境部署麒麟V10系统或处理qcow2镜像的运维与测试人员从环境准备入手详细说明VMware Workstation 15.x、qemu-img 9.1.0以及Kylin-Server-10-SP1 ISO的下载安装与配置要点并逐步演示如何创建虚拟机、设置单个文件虚拟磁盘、挂载麒麟ISO完成系统安装最终使qcow2镜像能够在VMware中正常运行。qcow2格式所具备的快照、压缩与加密特性也在文中有简要说明有助于理解转换原理。资源包为单个doc文档大小3.77MB文件虽少但步骤完整包含环境变量配置、安装选项选择、存储方式建议等细节适合初学者按图索骥也适合有经验者快速核对关键操作。目前已有2025人学习下载可作为在Windows主机上运行qcow2镜像的参考手册。1. 在 VMware Workstation 里跑 qcow2 镜像转换一条命令坑却有四五个从 OpenStack 或云平台导出的 Linux 镜像落到本地几乎永远是 qcow2 格式而你日常用的是 VMware Workstation现在 17 Pro 个人使用免费装的人最多新建虚拟机时它根本不会把 qcow2 列进可选的磁盘文件里。反直觉的结论是别去搜“让 Workstation 原生打开 qcow2”的方案这条路不存在也不需要存在。把 qcow2 转成 vmdk 通常只要一条 qemu-img 命令真正让人卡住的是转换后的磁盘子格式、虚拟机固件类型和 virtio 驱动这三个看不见的变量。这篇操作手册解决三件事讲清 qcow2 与 vmdk 的格式差异让你知道每个参数为什么这么设给出在 Windows 和 Linux 上都能复现的转换步骤再把我实际踩过的嵌套虚拟化、不可恢复错误、连不上虚拟机、登不进去系统这些坑按“现象-原因-解决”列出来。适合手里有一个 qcow2 镜像、想在本地 Workstation 里把它跑起来做验证或开发的工程师。转换本身十分钟后面的排查才是大头。2. 转换前先看底细qcow2 与 vmdk 的三个关键差异决定你后面的每个参数2.1 qcow2 的稀疏分配、快照链与 zlib 压缩为什么 10G 的镜像实际只有 2Gqcow2 的全称是 QEMU Copy-On-Write它最重要的设计理念是“虚拟大小”和“实际占用”分离。从 Ubuntu 官方 cloud images 页面下载的 22.04 镜像用 qemu-img info 看常见输出是这样$ qemu-img info ubuntu-22.04-server-cloudimg-amd64.qcow2 image: ubuntu-22.04-server-cloudimg-amd64.qcow2 file format: qcow2 virtual size: 10 GiB (10737418240 bytes) disk size: 2.3 GiB cluster_size: 65536 Format specific information: compat: 1.1 lazy refcounts: true这里的 virtual size 是客户机能看到的磁盘上限disk size 才是这个文件在宿主机上真实占用的空间。qcow2 通过 L1/L2 两级页表给每个 cluster默认 64K 一个做按需分配没写过的块根本不会落盘所以云镜像出厂体积往往只有虚拟容量的四分之一左右。这就是“qcow2 天生瘦”的原因也是你转换后不要用虚拟大小去预估 vmdk 文件大小的依据。第二个差异是快照链。qcow2 的快照本质是 COW 差异盘父盘只读子盘记录增量链越长读写损耗越大。云平台导出镜像时偶尔会带上多层快照或 backing 链你拿到的可能是一个差量盘而不是完整盘。好消息是 qemu-img convert 在转换时会沿着 backing 链一路读到最底层输出自动变成一个拍平后的完整镜像相当于顺手做了一次整理。第三个差异是压缩。部分 qcow2 镜像在创建时开了 cluster 级压缩相当于每个数据簇用 zlib 压过换体积降 IO 放大转换时 qemu-img 会把压缩簇解压后重新写给输出格式。所以同一个系统盘从 qcow2 转成不压缩的 vmdk体积比原文件大是正常现象别以为转换出了问题。这三个特性分别对应你后面要做的三件事保留稀疏特性选对 subformat、拍平快照避免踩 backing 链的坑、接受 vmdk 体积可能变大。2.2 vmdk 不是一种格式monolithicSparse、streamOptimized、flat 怎么选vmdk 只是一个后缀里面至少有四种常见子格式用 qemu-img convert 转换时如果不指定 subformat出来的文件类型可能跟你预想的不一样。我一般会先跟大家强调本地 Workstation 日常使用只认 monolithicSparse。子格式文件形态写性能典型用途Workstation 兼容性monolithicSparse单文件稀疏盘按需增长好本地虚拟机日常磁盘直接添加最佳选择streamOptimized单文件压缩流格式差只读或写放大严重OVA/OVF 分发、上传 vSphere需先导入或转换直挂体验差monolithicFlat单文件预分配裸数据好固定 IO 的服务器场景需要配套描述符文件一般不直接用twoGbMaxExtentSparse多个 2GB 切片好FAT32/exFAT 文件系统、老平台可直接添加streamOptimized 是最容易让人翻车的一种它带压缩适合做分发包VMware 的 OVA 导出默认就是它。但如果你把 streamOptimized 的 vmdk 直接当磁盘挂给 Workstation 虚拟机会发现写入极慢甚至提示需要先转换。反过来monolithicFlat 是预分配裸数据转完立刻占满整个虚拟大小的磁盘空间10G 的镜像转完就是 10G 文件毫无意义。判断手里 vmdk 是哪种子格式还是用 qemu-img info输出里的“create type”字段会直接写清楚。结论很简单给自己本地 Workstation 用一律 monolithicSparse只有当你需要把镜像打包成 OVA 传给同事或者要传到 vSphere 里创建模板时才转成 streamOptimized。2.3 三条落地路径qemu-img 命令行、V2V 图形工具、嵌套虚拟化把 qcow2 弄进 VMware Workstation常见做法有三条路。最推荐的是 qemu-img 命令行转换可控性最强、能脚本化一条命令换格式Windows 和 Linux 都有对应版本。第二条是 StarWind V2V Converter 这类 Windows 图形工具把 qcow2 填进去选输出 vmdk适合不碰命令行的同事但它默认产物的子格式有时是 streamOptimized 或 flat转换完最好再用 qemu-img info 确认一遍否则很容易在 Workstation 里打不开。第三条路是直接在宿主机的 Workstation 里开一台 Linux 虚拟机再在这台虚拟机里跑 KVM 去读 qcow2。这就是所谓的“嵌套虚拟化”也是网上被搜得最多的误区。VMware 对嵌套支持取决于 CPU 是否支持 VT-x/AMD-V 透传Windows 宿主机开了 Hyper-V 或内核隔离后嵌套直接不可用报错就是“此主机上不支持嵌套虚拟化”。就算能启动性能损耗也很大除非你只是临时验证一个 qcow2 里的文件否则别走这条路。方案上手难度可控性性能适用场景qemu-img 命令行中需配 PATH高参数全转换后原生运行工程师主力方案StarWind V2V GUI低中子格式易踩坑转换后原生运行偶尔转换的同事嵌套 KVM高低黑匣子多差临时文件查看我个人习惯是不管在哪个系统上第一步永远是 qemu-img info 看清楚源镜像的虚拟大小、实际占用和是否有 backing 链再决定 subformat 和磁盘放哪。这一步省下来后面所有“玄学”故障都会变成可解释的问题。3. 用 qemu-img 把 qcow2 转成 vmdk最小可复现命令与四个关键参数3.1 在 Windows 上准备 qemu-img下载、PATH 与版本验证Windows 上没有单独的 qemu-img 安装包它随 QEMU 整体发行去 QEMU 官网的 Windows 下载页拿最新稳定版安装包即可装好后默认路径类似C:\Program Files\qemu。装完第一件事是把 PATH 配好否则每次都得写全路径。# 临时追加到当前会话的 PATH只对当前窗口有效 $env:PATH $env:PATH;C:\Program Files\qemu # 验证版本能看到版本号就说明路径没问题 qemu-img --version如果想做成永久配置就到系统设置里改环境变量把C:\Program Files\qemu追加进系统 PATH。另一种常见做法是走 WSL很多开发机已经装了 WSL里面一条命令就能拿到 qemu-utils不用再下载 Windows 安装包# 在 WSL 里安装 qemu-utils sudo apt update sudo apt install -y qemu-utils qemu-img --version这里有个实际经验WSL 里操作位于/mnt/c下的镜像时跨文件系统的 IO 会明显变慢大镜像转换前建议先拷到 WSL 的/tmp或~/下再转。另外不管用 Windows 版还是 WSL 版镜像路径里尽量不要带中文和空格qemu-img 对这类参数有时表现得很玄学——报错信息还不直观先把目录改成纯英文短路径是成本最低的止损。3.2 核心转换命令与 subformat 参数为什么我显式写 monolithicSparse环境准备好之后最小可复现的转换命令是这样qemu-img convert -p -f qcow2 -O vmdk \ -o subformatmonolithicSparse \ ubuntu-22.04-server-cloudimg-amd64.qcow2 \ ubuntu-22.04.vmdk逐项说明参数。-f qcow2声明输入格式其实 qemu-img 能通过文件头猜测但显式写能防止把 raw 或 qed 误判成 qcow2-O vmdk是大写的 O指定输出格式注意别跟小写-o弄混-o subformatmonolithicSparse是输出格式的子选项这里指定 vmdk 的子格式-p显示进度条转换大镜像时能看到百分比避免干等。我在不同版本的 QEMU 上见过默认 subformat 行为不一致的情况所以血泪经验就是这个参数永远显式写不依赖默认值。转换完成后立刻用 qemu-img info 看一眼产物$ qemu-img info ubuntu-22.04.vmdk image: ubuntu-22.04.vmdk file format: vmdk virtual size: 10 GiB (10737418240 bytes) disk size: 2.4 GiB Format specific information: create type: monolithicSparsecreate type 是 monolithicSparse 就对了转完的 vmdk 文件可以直接在 Workstation 里作为现有磁盘添加。关于-c压缩参数它只对支持压缩的输出格式有效比如 qcow2对 vmdk 来说只有 streamOptimized 子格式自带压缩其他子格式传-c要么报错要么没效果所以转 vmdk 时不要带。转换时尽量把输出文件放到与源镜像不同的物理盘上因为转换是顺序读加顺序写同盘读写争抢会让大镜像转换时间翻倍。转换前的源镜像建议先保留原文件直到新 vmdk 在虚拟机里成功启动过一次再清理。3.3 转换前的镜像健康检查与瘦身qcow2 压缩、快照拍平与 fstrim直接从平台导出或下载的 qcow2 不一定干净我的习惯是先做一次健康检查再动手转换# -r all 表示检查并尝试修复所有可修复的错误 qemu-img check -r all ubuntu-22.04-server-cloudimg-amd64.qcow2这条命令会扫描 L1/L2 页表和 refcount 表云镜像在导出过程中偶尔会产生脏位图或引用计数不一致转换前修掉避免把坏簇原样复制进 vmdk。如果输出里出现大量 corrupt cluster 且-r all修不掉这个镜像就别用了重新下载比抢救划算。瘦身是另一个值得做的步骤。“qcow2 压缩”这个词在镜像处理里有两层意思一是创建镜像时开 cluster 压缩二是通过写零和丢弃来减少实际占用。对已经拿到手的镜像最有效的瘦身不是压缩而是丢弃。如果你在转换前可以启动一次这个镜像登进去后执行# 在客户机里释放已删除文件的块对稀疏文件系统有效 sudo fstrim -avfstrim 会把文件系统里已删除的块标记为全零qemu-img convert 遇到全零 cluster 会直接跳过不落盘所以转换过程本身就是一次瘦身。一个带 10G 虚拟大小、里面实际只装了三五 GB 文件的云镜像fstrim 之后转换出的 vmdk 可能只有 2G 出头。如果镜像带了内部快照或 backing 链convert 默认只输出当前活跃层拍平后的完整内容报“backing file not found”时把差量盘和基础盘放到同一目录再执行就能解决。想保留某个内部快照的内容先把磁盘切到那个快照再转换否则只认当前状态。4. 避坑转换到启动最容易翻车的 5 个故障按现象-原因-解决排查这一章是全文最值钱的部分。转换命令本身不难难的是转换之后在 Workstation 里起不来、连不上、登不进。下面 5 个故障都是我或身边同事真实翻过车的问题按现象、原因、解决三段式写方便你直接对号入座。4.1 文件不识别与路径权限vmdk 无效、vmware 无法连接虚拟机现象一在 Workstation 新建虚拟机、添加现有磁盘时选 vmdk 文件直接提示“不是有效的虚拟机磁盘”或 Could not get disk information。原因这个 vmdk 大概率是 streamOptimized 或 flat 子格式前者带压缩Workstation 不能直接当可写磁盘用后者是裸数据缺描述符文件。也可能是 QEMU 版本太老生成的 vmdk 兼容性标记不被当前 Workstation 识别。解决先跑qemu-img info 你的磁盘.vmdk看 create type不是 monolithicSparse 就重新转一次显式指定 subformatmonolithicSparse。Workstation 版本太老的话直接升级到 17 Pro个人使用免费老镜像兼容性也更好。现象二启动虚拟机时报“vmware workstation 无法连接到虚拟机。请确保您有权运行该程序、访问该程序使用的所有目录”虚拟机列表里那个条目直接灰掉。原因这个报错七成是权限和路径问题。要么 Workstation 以管理员安装但你用普通账号打开要么虚拟机目录放在带中文、空格或权限受限的路径下要么同一个 vmdk 被另一台虚拟机占用文件句柄没释放。解决用管理员身份重新打开 Workstation把整个虚拟机目录挪到纯英文短路径比如D:\vms\ubuntu22确认没有第二个 VM 引用同一个 vmdk 文件。这条报错跟 qcow2 本身没关系但它是“转换后第一件事”最容易撞上的排在最前面。4.2 嵌套虚拟化、hv 模块失败与 vcpu 不可恢复错误现象一启动后黑屏弹窗提示“此主机上不支持嵌套虚拟化。模块‘hv’启动失败。未能启动虚拟机”有时还伴随模块“hv”加载超时。原因虚拟机设置里勾选了处理器虚拟化引擎向客户机公开 VT-x/AMD-V但宿主机不满足条件。最常见的是 Windows 宿主机开了 Hyper-V、内核隔离或 WSL2这些服务占用了 VT-xVMware 拿不到硬件虚拟化权限hv 模块自然起不来。其次才是 CPU 本身太老或不支持。解决虚拟机设置 → 处理器 → 取消勾选“虚拟化 Intel VT-x/EPT”或“虚拟化 AMD-V/RVI”。如果取消后仍报错去 Windows 功能里关掉 Hyper-V 和虚拟机监控程序需要重启或者关闭内核隔离。特别提醒客户机里想再跑 KVM 才会需要这个选项普通 Linux 系统完全用不到日常使用建议保持关闭。现象二启动中途弹出“VMware Workstation 不可恢复错误: (vcpu-0)”虚拟机直接终止。原因这类错误信息很少直接说明问题多数情况是资源或配置组合超出客户机内核承受范围。我遇到最多的是两个处理器核数给太多云镜像默认内核配置较保守4 核以上的 SMP 在某些老内核上会崩以及跟前面的嵌套虚拟化叠加产生冲突。解决先做减法——把 vCPU 减到 1 核或 2 核关闭虚拟化引擎内存给到镜像要求的 2G 以上再启动。Workstation 的不可恢复错误很多时候是个黑匣子别试图从报错里读出根因逐项降配置是最快的定位方法。4.3 固件类型与磁盘控制器启动找不到引导设备、No boot device现象转换顺利、虚拟机也建好了但一启动就进 UEFI Shell或者黑屏只有一行“Operating system not found”再要么卡在 GRUB 命令行。原因两层原因叠加。第一层是固件不匹配多数云镜像默认是 BIOS 引导Ubuntu 官方 cloud image 默认 BIOS另提供带 -uefi 后缀的 UEFI 变体而你在 Workstation 新建虚拟机时选了 UEFI或者反过来镜像要 UEFI 你却选了 BIOS。第二层是磁盘控制器云镜像在云平台里跑的是 virtio-blk设备名是 /dev/vdaGRUB 里如果写死了 root/dev/vda1到了 VMware 的 SATA/SCSI 控制器下设备名变成 /dev/sda就找不到根分区。解决新建虚拟机时固件类型跟着镜像走不确定就先试 BIOS起不来再换 UEFI。磁盘控制器在 Workstation 里默认选 SATA 是最稳的现代 Linux 内核都带 ahci 驱动不需要特意选 NVMe。如果真的卡在 “No root device found”启动时进 GRUB 按 e 编辑内核参数把 root/dev/vda1 改成 root/dev/sda1能进系统后再 permanently 改 /etc/default/grub 里的 GRUB_CMDLINE_LINUX。4.4 cloud-init 登录策略密码进不去系统的三种解法现象转换成功、启动成功、网络也有了但登录页面要密码。试了 ubuntu/ubuntu、root/空密码、镜像名当密码全部不对SSH 也连不上提示拒绝密码认证。原因这是云镜像最阴的一招。Ubuntu、Debian、CentOS 的 cloud image 为了安全默认不设任何密码SSH 的 PasswordAuthentication 是 no只认云平台注入的 SSH key 或 cloud-init 用户数据。你把镜像拉到本地它以为还在云平台里自然没有任何途径能登进去。解决三个办法按省事程度排序。最省事的是在 Linux 宿主机上用 virt-customize 直接注入 root 密码# 安装 libguestfs 工具集 sudo apt install -y libguestfs-tools # 在不动系统目录的前提下修改镜像里的密码 virt-customize -a ubuntu-22.04-server-cloudimg-amd64.qcow2 \ --root-password password:123456第二条是做一个 cloud-init 的 seed 镜像挂到光驱里适合镜像内有 cloud-init 的情况# 写用户数据文件 cat user-data EOF #cloud-config password: 123456 chpasswd: { expire: False } ssh_pwauth: true EOF # 生成可挂载的 seed.iso cloud-localds seed.iso user-data然后把这个 seed.iso 挂到虚拟机的 CD/DVD 上cloud-init 首次启动会读取它并设置密码。第三条是启动时进 GRUB 恢复模式在内核参数末尾加init/bin/bash进去后用 mount 和 passwd 直接改 root 密码适合 cloud-init 没生效的极端情况。我一般推荐第一条virt-customize 直接改镜像文件转换前后都适用最不容易出意外。5. 让它跑得像本地盘镜像验证、批量转换与一条省时间的存档习惯到这一步你的 vmdk 应该已经在 Workstation 里正常启动并登录进系统了。最后做三件小事能让这套流程从“能跑”变成“跑得稳、可重复”。第一件是验证镜像完整性。下载 qcow2 时先跟官方校验值比对Linux 用 sha256sumWindows 用 Get-FileHash转换完再对 vmdk 算一次把校验值存成一个 SHA256SUMS 文件。这能防止两种尴尬镜像在下载过程中损坏导致转换后系统裂开以及转换本身出了静默错误。启动进系统后用lsblk看一眼分区、df -h确认根分区容量云镜像首次启动时 cloud-init 通常会按虚拟磁盘大小自动扩容根分区如果看到根分区没扩多半是 cloud-init 没跑完重启一次即可。第二件是把转换做成脚本批量处理多个镜像时不用一条条手敲mkdir -p converted for img in *.qcow2; do name${img%.qcow2} qemu-img convert -p -f qcow2 -O vmdk \ -o subformatmonolithicSparse \ $img converted/${name}.vmdk \ sha256sum converted/${name}.vmdk converted/SHA256SUMS done这个脚本把每个 qcow2 转成同名 vmdk并顺手记录校验值。注意保证只有转换成功才记录哈希失败的文件不会混进清单里。批处理最怕中途报错还要回头找是哪个文件出的问题有了 SHA256SUMS对账一眼就能定位。最后是我的个人习惯原 qcow2 文件永远保留直到新 vm 在 Workstation 里完整启动过三次以上才考虑清理。最早我图省事转完就把源镜像删了结果有一次转换出的 vmdk 在第四天突然无法启动排查发现是转换时源镜像本身有坏簇当时已经没后悔药只能重新下载 2.3G 的镜像再走一遍流程。从那以后我每个镜像都固守“源文件留档 校验值存档 转换产物独立目录”的三件套回滚就是重新转换一次的事成本极低收益极高。希望这套流程和这些坑位能帮到你让你第一次转 qcow2 就能一次跑通。本文还有配套的精品资源点击获取