ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

qcow2镜像转vmdk并在VMware Workstation运行的完整指南

qcow2镜像转vmdk并在VMware Workstation运行的完整指南 简介针对使用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 preallocationmeta或选择了 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-v2vqemu-img 来自 QEMU 项目几乎所有 Linux 发行版都带。Debian/Ubuntu 上包名是qemu-utilsCentOS/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-imgvirt-v2v输入要求单个磁盘镜像文件虚拟机整机定义输出格式vmdk / vdi / vhdx / rawova / vmdk / openstack是否改 guest 内部配置否会卸载原驱动注入新驱动适用场景单镜像格式转换跨虚拟化平台迁移学习成本低单条命令高需了解 libvirt 配置如果只是想把 qcow2 转成能在 VMware Workstation 里打开的 vmdkqemu-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 subformatstreamOptimized -p source.qcow2 target.vmdk # 变体三转换为固定大小 vmdk避免工作负载增长导致后端文件碎片化 qemu-img convert -f qcow2 -O vmdk -o subformatmonolithicFlat -p source.qcow2 target.vmdksubformatstreamOptimized与 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 文件大小不理想时有两个整理手段。第一个是重新转换一次指定subformatstreamOptimized。这个格式会把 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 subformatstreamOptimized做最终格式化这样既能缩小体积又能让 vmdk 保持最优结构。本文还有配套的精品资源点击获取
返回列表