首页
/
行业洞察
/
正文
INDUSTRY INSIGHT · 深度
qcow2转vmdk实战:qemu-img转换、VMware挂载与引导修复
📅 2026/10/25 19:25:31
✍️ 爱科研究院
👁 阅读 3,247
简介《VMware Workstation运行qcow2镜像操作手册》面向需要在虚拟机环境中部署、测试qcow2格式麒麟V10系统的运维与开发人员重点解决VMware Workstation无法直接运行qcow2镜像时的环境配置与操作路径问题也适合作为虚拟化入门读者的实操参考。压缩包内为1个doc文档约3.77MB按章节组织操作说明便于查阅和跟做。手册围绕环境准备、VMware Workstation安装、qemu-img安装与环境变量配置、新建虚拟机及麒麟V10系统安装等环节展开并补充qcow2快照、压缩、加密等格式特性说明能帮助读者理清镜像转换、虚拟磁盘存储方式选择及安装过程中的关键注意点。目前已有2029人学习下载适合需要快速搭建实验环境、对照操作或排查配置问题的中初级用户参考。1. qcow2 落到 VMware 上先弄清为什么绕不开 qemu-img上周有人丢过来一个 8GB 的 qcow2 镜像说是某套麒麟 V10 环境的完整系统盘希望在自己的 Windows 笔记本上用 VMware Workstation 跑起来做功能验证。在虚拟机向导里点“使用现有虚拟磁盘”选中那个.qcow2文件后对话框直接报“不是受支持的虚拟磁盘格式”。这不算 bugqcow2 是 QEMU 体系的磁盘格式VMware Workstation 只认 vmdk外加少数 vhd两者不是同一种磁盘格式。这里要解决的问题是把 qcow2 转换成 vmdk单纯改后缀没有用。整个链路只有三步qemu-img 体检并转换格式VMware 建虚拟机挂载转换后的磁盘处理引导和驱动错位。适合手上有 KVM 环境镜像、需要在桌面虚拟化里复现的人。2. 环境准备qemu-img 9.1.0 与 Workstation 15.x 的对齐清单很多人卡在第一步不是因为不会点下一步而是工具版本对不上qemu-img 太老读不了新特性Workstation 太新默认给的控制器跟转换出来的磁盘描述文件打架。这三样东西各自负责一段缺一段后面就要返工。2.1 三件套的分工与版本选择理由组件版本在链路里干什么缺了会怎样VMware Workstation15.x承载虚拟机、提供 vmx 与虚拟硬件镜像再好也没地方跑qemu-img9.1.064 位读 qcow2、体检、转 vmdkVMware 根本打不开源文件麒麟 V10 光盘镜像Kylin-Server-10-SP1-Release-Build20-20210518-x86_64.iso救援模式、补驱动、重建引导转换后的盘起不来时只能重来qemu-img 用 9.1.0 不是追新。qcow2 格式这些年加过扩展 L2 表、压缩簇、外部数据文件这些特性2.x、3.x 时代的 qemu-img 遇到带扩展特性的镜像info就可能读不全convert会在中途报 unsupported feature 退出。9.x 对--outputjson的支持也完整后面排查问题靠它输出结构化字段比人眼扫文本可靠得多。另外要确认是 64 位版本转换过程要在大文件上做偏移寻址32 位版本处理超过 2GB 的镜像容易出问题。Workstation 选 15.x 的理由更实际它新建虚拟机时默认的 SCSI 控制器是 LSI Logic而 qemu-img 转换 vmdk 时能写的adapter_type只有 ide、buslogic、lsilogic、legacyESX 这几种。新版 Workstation 默认可能给 pvscsivmx 里写着scsi0.virtualDev pvscsi转换出来的磁盘描述里写的是 lsilogic两边对不上VMware 会直接提示磁盘类型不匹配。与其事后改 vmx不如一开始就用一个默认值能对上的版本。当然用新版也行建完虚拟机先看一眼 vmx 里那行控制器配置手动改回 lsilogic。2.2 在 Windows 上装 qemu-img 并让命令行认得出它Windows 侧的 qemu-img 有现成的 64 位安装包装完默认落在C:\Program Files\qemu。安装本身是双击下一步的事真正容易翻车的是环境变量——装完不配 PATH命令行里敲qemu-img就是“不是内部或外部命令”。:: 1) 先确认可执行文件到底在哪 dir C:\Program Files\qemu\qemu-img.exe :: 2) 当前窗口临时加进 PATH验证用 set PATHC:\Program Files\qemu;%PATH% :: 3) 看版本正常会打印 qemu-img 9.1.0 及编译信息 qemu-img --versionset只影响当前这个 cmd 窗口关掉就没了适合先验证。要长期生效走“此电脑 → 属性 → 高级系统设置 → 环境变量”在系统变量的 Path 里追加一行C:\Program Files\qemu然后必须重开一个命令行窗口——已经开着的窗口读的是启动时的环境副本不重开永远看不到新值这一点坑过不少人。参数上的两个细节第一路径里有空格Program Files就是在脚本里调用时整个路径要加引号写成C:\Program Files\qemu\qemu-img.exe convert ...否则 cmd 会把空格当分隔符报“C:\Program 不是内部或外部命令”。第二源镜像和目标目录最好都放在纯英文、无空格的路径下比如D:\vm\kylin\。转换工具本身能处理中文路径但后面 VMware 生成的 vmx 里会写绝对路径路径越干净出问题时越好定位。2.3 Workstation 的安装与许可证处理Workstation 安装没什么可讲的双击安装程序、接受协议、选安装盘符、下一步到底。有一个地方值得多说一句许可证。有正式授权的直接把密钥粘进去没有的话安装向导允许跳过之后会进入一段试用期。做一次格式转换加启动验证试用期完全够用。这里要提醒的是不要随手拿去网上搜来的密钥——这类密钥要么早已失效要么来源不明装完能用几天某天突然变成“许可证已过期”虚拟机直接打不开前面折腾的全白费。真要做长期环境走正规渠道拿授权只是临时验证就老老实实用试用期到期前把镜像和配置备份好。装完之后建议先做一次空跑新建一个空的虚拟机、不给任何磁盘、开机看能不能进 BIOS 界面。这一步能提前暴露虚拟化支持没开、Hyper-V 抢占、安装包不完整之类的问题比等到挂上麒麟镜像再排查省事得多。3. 格式转换qcow2 转 vmdk 的命令、参数与校验转换这条命令本身只有一行但参数选错后面要么起不来要么跑起来一开快照就报错。这一章按“先看、再转、后验”的顺序走每一步都有可以抄的命令。3.1 转换前体检qemu-img info 与 check 读什么拿到任何镜像第一件事不是转是看清楚它是什么。qemu-img info --outputjson Kylin-Server-10-SP1.qcow2输出是一段 JSON字段不多但每个都能决定你下一步怎么做字段含义对你的影响virtual size虚拟盘标称容量决定目标 vmdk 的容量别拿它估转换时间disk size实际占用字节稀疏盘按这个估时间10GB 实测数据在 SSD 上大约 1 到 3 分钟cluster_size簇大小通常是 65536转换时稀疏块大小可以对齐它backing file后端文件路径有值说明是差分盘转换会把整条链合并父文件必须放在原位置encrypted加密标记有值必须用--object secret提供口令否则 convert 直接失败Format specific 里的 corrupt损坏标记为 true 时先跑 check 修别硬转backing file这一项最容易被忽略。差分盘本身可能只有几百兆看起来人畜无害但convert要读的是整条链父文件不在就报 “Could not open backing file”。要么把父文件放回原路径要么先用qemu-img rebase -u -b -F qcow2 差分盘.qcow2把后端引用清掉这时读到的空洞会变成零前提是你确实不需要那部分数据。体检第二步是完整性检查qemu-img check -r leaks Kylin-Server-10-SP1.qcow2-r leaks只修簇泄漏refcount 对不上但数据没坏这是最常见也最安全的一档。如果上一步corrupt是 true才用-r all但注意-r all会直接改源文件动手前先复制一份。输出结尾是No errors were found才继续往下走出现ERROR行就别转了转出来的 vmdk 大概率也是坏的白等半小时。3.2 convert 的关键参数与 vmdk 子格式选择核心命令长这样qemu-img convert -p \ -f qcow2 \ -O vmdk \ -o subformatmonolithicSparse,adapter_typelsilogic \ Kylin-Server-10-SP1.qcow2 \ Kylin-Server-10-SP1.vmdk逐个说。-p打开进度条大文件转换动辄十几分钟没有进度条你根本分不清是卡住了还是在跑。-f qcow2显式声明源格式别依赖自动探测——探测器一旦把 qcow2 误判成 raw它会把文件头当数据原样搬过去产物大小等于源文件大小进系统必崩而且这种错误不会有任何报错提示。-O vmdk声明目标格式。-o后面是 vmdk 专属参数两个最要紧subformat决定 vmdk 的物理布局选错了后期功能受限subformat产物形态适用场景monolithicSparse单个稀疏 vmdk 文件Workstation 默认支持运行期快照首选monolithicFlat描述文件 -flat.vmdk两块需要更好顺序读写性能时用搬运必须两块一起twoGbMaxExtentSparse每 2GB 一个分片目标盘是 FAT32 时的无奈选择streamOptimized单文件压缩流用于 OVF/OVA 分发挂上后基本不能做快照adapter_type写的是磁盘描述里的控制器类型必须跟后面 vmx 里的scsi0.virtualDev对上。前面选了 lsilogic这里就写 lsilogic。想再快一点可以加-m 8开多协程SSD 上有肉眼可见的提升-W是乱序写要求配合-m且大于 1在 Windows 上偶发写出不一致的扇区验证环境里我不建议开省下的那几分钟不值得返工。-S控制稀疏块判定阈值默认 4k源盘如果有大片空洞调到 65536 跟 qcow2 的 cluster 对齐能少写一堆零代价只是产物稍微“胖”一点。3.3 转换后校验别信进度条走完进度条到 100% 只代表命令返回了不代表数据对得上。qemu-img compare -f qcow2 -F vmdk Kylin-Server-10-SP1.qcow2 Kylin-Server-10-SP1.vmdk-f是第一个文件的格式-F是第二个文件的格式顺序不能反。逐块比对通过时会打印Images are identical.任何一块不一致都会指出偏移量。两个都是稀疏格式未分配区域都按零处理所以能过。这一步耗时大约是转换的三分之一值得等。再补一个容量核对qemu-img info --outputjson Kylin-Server-10-SP1.vmdk比对源和目标的virtual-size是否完全一致。转换不会改变容量差一个字节都说明中间出过问题。顺带看disk size——如果 vmdk 的实际占用跟源差了好几倍多半是-S设得太小或者源盘本身空洞很多不影响使用但会在宿主机上多占空间。在 Windows 上这三条命令的退出码也值得看echo %ERRORLEVEL%返回 0 才算成功非 0 时 qemu-img 一般已经在 stderr 里打了原因常见的就那几种——空间不足、源文件被占用、格式不匹配。4. 在 VMware 里把盘跑起来建机、挂盘与引导修复vmdk 转出来了接下来是把它塞进一个能启动的虚拟机里。这一步的坑比转换还密集因为涉及固件类型、磁盘控制器、initramfs 里的驱动三件事任何一件不对表现都是“开不了机”。4.1 新建虚拟机的路径选择与固件类型有两条路线我一般先用 AA 失败再走 B。路线 A自定义高级新建 → 硬件兼容性选 Workstation 15.x → 选“稍后安装操作系统”这一步很关键选了 ISO 它会给你建一块空盘→ 客户机系统选 Linux、版本选“其他 Linux 4.x 及更高版本内核 64 位”→ 命名并选好存放目录 → 固件类型先选 BIOS → 处理器 2 核、内存 4096MB 起麒麟 V10 服务器版低于 4G 装得动但跑起来吃力→ 网络 NAT → I/O 控制器 LSI Logic → 磁盘类型 SCSI → 选“使用现有虚拟磁盘”→ 指向刚才的 vmdk → 提示“保留现有格式”时选保留。路线 B正常装一遍麒麟 V10。给它一块空盘挂上 ISO走完安装流程。这条路的意义不是“顺便装个系统”而是给你一个能进救援模式的现成环境也是路线 A 起不来时的对照实验——同一个 vmx 配置下ISO 装出来的系统能启动说明虚拟硬件没问题问题在转换过来的盘里。固件类型这里有个快速判别法按 BIOS 建完直接开机如果屏幕黑一下就报 “Operating System not found”而 vmdk 里确实有分区那多半是源盘在 UEFI 下装的GRUB 装在 EFI 系统分区里BIOS 找不到引导记录。关掉虚拟机在 vmx 里把firmware bios改成firmware efi再开一次。来来回回一分钟的事比去挂载镜像查分区表快多了。4.2 磁盘控制器与设备名漂移vmdk 挂进去之后最常遇到的不是起不来是起来了但报错。根因是源镜像在 KVM 里用 virtio-blk设备名是/dev/vda到了 VMware 上控制器换成 LSI Logic 或 SATA设备名变成/dev/sda。文件系统 UUID 不变但凡是写死设备名的地方全会失效。手里的 vmx 可以手工改比在图形界面里反复点更可控scsi0.virtualDev lsilogic scsi0:0.present TRUE scsi0:0.fileName Kylin-Server-10-SP1.vmdk scsi0:0.deviceType disk改用 SATA 的话把上面四行换成sata0.present TRUE sata0:0.present TRUE sata0:0.fileName Kylin-Server-10-SP1.vmdk sata0:0.deviceType disk要注意从 SCSI 切到 SATA 必须把原来的scsi0:0.*三行一起删掉不能两套并存。两个控制器指向同一个 vmdk 文件开机时 VMware 会报“无法打开磁盘文件已被锁定”报错信息完全不提控制器冲突很容易往权限、杀毒软件方向查半天。设备名漂移的对应关系大致是这样磁盘/dev/vda到/dev/sda网卡ens3到ens33或ens160取决于 PCI 槽位顺序光驱/dev/sr0一般不变。文件系统 UUID 和 LABEL 都不变所以只要 fstab 里用的是UUID磁盘这块就不用改。4.3 起不来时用 ISO 进救援模式补驱动如果开机卡在dracut:/#提示符屏幕上滚过一行Warning: /dev/disk/by-uuid/xxxx does not exist说明 initramfs 里没有当前控制器的驱动。麒麟 V10 在 KVM 里装的时候dracut 默认走 hostonly 模式只把检测到的 virtio 驱动打进去mptspi、mptsas、ahci 一个都没有内核加载完找不到根分区就掉进紧急 shell。修的办法是拿 ISO 引导进救援模式chroot 进去重做 initramfs# 1) 虚拟机设置里把 CD/DVD 指向麒麟 V10 ISOvmx 里加一行让它优先从光驱启动 # bios.bootOrder cdrom,hdd # 2) 引导菜单选 troubleshooting - rescue a system按提示把系统挂到 /mnt/sysimage chroot /mnt/sysimage /bin/bash # 3) 给所有已安装内核重做 initramfs强制把三种控制器驱动打进去 for k in /boot/vmlinuz-*; do v${k#/boot/vmlinuz-} dracut -f --add-drivers mptspi mptsas ahci /boot/initramfs-$v.img $v done # 4) 重新生成 GRUB 配置让 root 参数按当前设备重新解析 grub2-mkconfig -o /boot/grub2/grub.cfg--add-drivers里三个驱动对应三种控制器mptspi 是 LSI Logic并行 SCSImptsas 是 SAS 版本ahci 是 SATA。不确定后面用哪个就三个都加initramfs 大个几百 KB无所谓。-f是强制覆盖已有文件不加的话 dracut 发现文件存在会跳过。还有个更省事的替代方案直接把 vmx 里的控制器改成 SATA即 4.2 里那段 sata 配置。ahci 驱动几乎在所有发行版的 initramfs 里都有改完开机大概率直接进系统连救援模式都省了。代价是磁盘吞吐比 SCSI 略低做功能验证完全够用。进系统之后还有两件事要收尾/etc/fstab里凡是写/dev/vdaX的改成blkid查到的 UUID网卡配置文件按新设备名重建麒麟 V10 用 NetworkManagernmcli connection里改connection.interface-name就行。这两处不改系统能启动但每次开机都进 emergency mode或者网络死活起不来。5. 避坑与排查五次翻车记录下面这几条都是我在同一套流程里真实撞过的按“现象 → 原因 → 解决”记遇到对得上的直接照方抓药。5.1 转换阶段的三次翻车磁盘选择框里根本看不到 qcow2 文件。现象是点“使用现有虚拟磁盘”后文件类型下拉框里只有 vmdk、vhd把过滤器改成“所有文件”能选中 qcow2但点下一步立刻弹“不是受支持的虚拟磁盘格式”。原因很直白VMware 的磁盘栈只解析 vmdk 的稀疏头和描述文件qcow2 的头部结构它压根不认识改后缀名也没用因为校验的是文件头而不是扩展名。解决就是老老实实走一遍qemu-img convert没有捷径。转换几秒钟就“完成”产物只有几十兆。现象是命令返回 0进度条一闪而过源盘virtual size写着 40G转出来的 vmdk 只有 60MB挂上去开机报找不到文件系统。原因是我在脚本里把-f写成了rawqemu-img 老老实实把 qcow2 的文件头当原始扇区数据搬了过去读到哪算哪源文件多大产物就多大——恰好那个镜像压缩得很好只有 60MB。解决源格式永远显式写-f qcow2转完立刻跑一次compare不一致就别往下走。这件事之后我养成了给每个转换脚本加compare的习惯。报“Could not open ...: Failed to get write lock”。现象是转换刚开始就退出提示拿不到写锁。原因是同一个 qcow2 被另一个进程占着——可能是上次没退干净的 qemu 进程也可能是镜像放在共享目录里被别的机器读着。Windows 上还有一种情况资源管理器开了预览窗格正在给这个大文件生成缩略图。解决先qemu-img info -U 文件用强制共享模式确认能读能读就说明文件没坏问题在占用关掉占用进程再转。实在找不到占用者重启一次比逐个排查快。5.2 启动阶段的两条血泪经验开机掉进 dracut 紧急 shell提示找不到 by-uuid 设备。现象是内核日志刷完屏幕停在dracut:/#上面一行Warning: /dev/disk/by-uuid/xxxx does not exist。原因是源镜像在 KVM 里做的initramfs 是 hostonly 模式只打了 virtio_blk、virtio_scsiVMware 用的 LSI Logic 或 SATA 控制器驱动一个都没带内核找不到根设备。解决按 4.3 走要么 ISO 救援 chroot 后dracut -f --add-drivers要么直接把 vmx 控制器改成 SATA 蹭 ahci 驱动。我现在的默认动作是后者改两行 vmx比重做 initramfs 快得多。转换目标放在移动硬盘上报“File too large”。现象是转了十几分钟最后 qemu-img 报文件过大退出目标目录里留了个半截文件。原因是移动硬盘是 FAT32单文件上限 4GB。解决换 NTFS 或 exFAT 分区如果非要用 FAT32就选-o subformattwoGbMaxExtentSparse让 qemu-img 按 2GB 分片输出。分片方式在 VMware 里能正常挂载只是目录里会多出一堆-s001.vmdk、-s002.vmdk拷贝的时候必须整组一起搬少一个都开不了机。还有一个不算故障但很烦人的点转换完在 VMware 里一开快照就提示“不支持对该磁盘创建快照”。那多半是 subformat 选了streamOptimized——它是给 OVF/OVA 分发用的压缩流格式挂载后基本只读。重新用monolithicSparse转一遍就行这也是我一开始就推荐它的原因。6. 进阶把转换固化成脚本加一张验证清单单次转换靠手敲命令没问题一周要做好几遍就该固化了。我给 Windows 侧写了个批处理把体检、修复、转换、复核串成一条链任何一步失败就停在原地不会带着坏镜像往下走echo off setlocal set QEMUC:\Program Files\qemu\qemu-img.exe set SRC%~1 set DST%~2 if %SRC% (echo 用法: convert.bat 源.qcow2 目标.vmdk exit /b 1) :: 第一步体检读不出来直接停 %QEMU% info --outputjson %SRC% || exit /b 2 :: 第二步只修簇泄漏不动源数据 %QEMU% check -r leaks %SRC% || exit /b 3 :: 第三步转换显式声明两端格式 %QEMU% convert -p -m 8 -f qcow2 -O vmdk ^ -o subformatmonolithicSparse,adapter_typelsilogic ^ %SRC% %DST% || exit /b 4 :: 第四步逐块比对不一致就别拿去用了 %QEMU% compare -f qcow2 -F vmdk %SRC% %DST% || exit /b 5 echo 转换与校验完成: %DST%%~1和%~2是去掉引号的参数这样调用时写convert.bat D:\img\a.qcow2 D:\vm\a.vmdk也能正确传进去。|| exit /b N是批处理里的短路写法前一条命令返回非 0 就带着对应错误码退出配合echo %ERRORLEVEL%能快速定位是哪一步出的问题。-m 8按机器核数调八核以下写 4 就行开太大反而因为频繁切上下文变慢。光有脚本还不够关键是有一套开完机之后照着看的检查项。我一般按这张表走一遍全过才算这个镜像能交付检查项怎么看通过标准容量一致qemu-img info --outputjson比对两端virtual-size 完全相同内容一致qemu-img compare -f qcow2 -F vmdk输出 Images are identical引导正常开机观察出现 GRUB 菜单并进入内核根分区挂载起来后lsblk、df -h根分区在、容量对、无 emergency网络可用ip a、ping网关网卡名对得上能通磁盘控制器lspci | grep -i scsi与 vmx 里配置一致表里最容易被跳过的是第四项。系统能进登录界面不代表没事——有的盘根分区挂上了但/home或/var因为 fstab 里写死了/dev/vdaX没挂上用两天才发现日志写不进去。df -h一条命令就能看出来别省。还有个习惯值得一提转换前后各跑一次qemu-img info --outputjson把输出重定向成两个 txt 放在 vmdk 同目录下。看起来多余但真出问题时把转换前的 JSON 和转换后的 JSON 并排放着容量、簇大小、后端文件这些字段一眼就能比出来比凭记忆回想“当时那个盘多大”靠谱太多。我上一次就是因为留了这份记录才发现某个镜像是差分盘、父文件被漏拷了。整套流程从装 qemu-img 到进系统熟练之后二十分钟能走完一遍。手册里那些带截图的步骤和参数表我按上面的顺序重新理过急着用的话照着一步步点就行。希望帮到你。本文还有配套的精品资源点击获取
📌 标签:
工业官网
设计趋势
AI 建站
SEO
获取完整报告 →
RELATED ARTICLES
推荐阅读
2026/10/25 19:20:31
AI Agent 新手学习路线:从 Coze、Dify 到 LangChain 与 Python 实战
2026/10/25 19:20:31
舌苔识别系统实战:数据标注、模型训练与GUI封装全流程解析
2026/10/25 19:20:31
纽约出租车流量预测大作业:从数据到模型全流程拆解
2026/10/25 20:10:35
统计学习方法三要素:模型、策略与算法实战解析
2026/10/25 20:10:35
BP神经网络在沥青路面裂缝识别中的工程落地实践
2026/10/25 20:10:35
C#文件元数据采集:逻辑大小、物理占用与Win32底层属性全解析
2026/10/25 20:10:35
分片向量检索的“无损合并”,究竟需要哪些前提
2026/10/25 20:05:34
美赛数学建模QGIS地图底图与空间分析实战指南
2026/10/25 20:05:34
物流运输管理系统Java源码实战:核心模块与部署全流程解析
2026/10/25 0:02:11
全国计算机二级C语言真题PDF高效刷题指南
2026/10/25 0:02:11
requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南
2026/10/25 0:02:11
递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现
2026/10/25 0:02:11
全国计算机二级C语言真题PDF高效刷题指南
2026/10/25 0:02:11
requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南
2026/10/25 0:02:11
递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现
2026/10/24 19:17:18
我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频
2026/10/23 10:58:39
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证
2026/10/25 12:42:56
2026 大模型集体涨价:用 Python 做企业 Token 成本测算与选型避坑(附配置)