使用 qemu-img convert 可以把 raw 格式的 openwrt.img 转换为 qcow2 格式,并输出为 vm-101-disk-1.qcow2。示例命令如下:

qemu-img convert -f raw -O qcow2 openwrt.img vm-101-disk-1.qcow2

命令参数说明

  • qemu-img convert:qemu-img 工具的核心功能,用于转换磁盘镜像格式。
  • -f raw:指定输入文件的格式为 raw。raw 格式是最简单的磁盘镜像格式,它只是磁盘扇区的原始拷贝,没有额外的元数据。
  • -O qcow2:指定输出文件的格式为 qcow2。qcow2 是一种高级的磁盘镜像格式,支持诸如压缩、加密、快照等功能,可以节省磁盘空间并提高性能。使用 qcow2 通常是虚拟化环境下的良好选择。
  • openwrt.img:输入文件的名称。这里是一个 OpenWrt 系统的磁盘镜像文件。
  • vm-101-disk-1.qcow2:输出文件的名称。vm-101 可能是虚拟机 ID,disk-1 可能是磁盘编号,qcow2 格式的文件后缀名为 .qcow2。

转换行为与注意事项

  • 转换过程中,qemu-img 会读取 openwrt.img 的所有数据,然后将其写入 vm-101-disk-1.qcow2。
  • 转换完成后,openwrt.img 文件仍然存在,不会被删除。
  • qcow2 格式支持稀疏文件,这意味着如果 openwrt.img 中包含大量未使用的空间,vm-101-disk-1.qcow2 文件的大小可能会比 openwrt.img 小。

转换为 qcow2 时的可选优化

  • 预分配:如果需要指定 qcow2 镜像的预分配模式,可以使用 -o preallocation=metadata(仅预分配元数据)或 -o preallocation=full(完全预分配空间)选项。前者可以加快创建速度,后者可以避免后续运行时动态分配空间带来的性能影响。
  • 压缩:在转换大型镜像时,可以考虑使用 -c 选项启用压缩,进一步减少输出文件的大小。例如:qemu-img convert -f raw -O qcow2 -c openwrt.img vm-101-disk-1.qcow2。但是,压缩会增加 CPU 负载。
  • 加密:如果需要对 qcow2 镜像进行加密,可以使用 -o encryption=on 选项,并设置密码。

其他格式转换为 qcow2

要将其他格式转换为 qcow2,需要使用 qemu-img convert 命令,并根据原始镜像文件的格式调整 -f 选项的值。例如:

  • vmdk 转换为 qcow2: qemu-img convert -f vmdk -O qcow2 input.vmdk output.qcow2
  • vdi 转换为 qcow2: qemu-img convert -f vdi -O qcow2 input.vdi output.qcow2
  • iso 转换为 qcow2(不推荐,通常直接使用 iso 启动虚拟机): qemu-img convert -f raw -O qcow2 input.iso output.qcow2(ISO 镜像通常被视为 raw 格式的只读镜像)

-f 选项指定输入文件的格式。常见格式包括 vmdk(VMware 虚拟磁盘)、vdi(VirtualBox 虚拟磁盘)、raw(原始磁盘镜像)、iso(光盘镜像)等。需要根据实际情况替换 input.vmdk、input.vdi、input.iso 为输入文件名,并替换 output.qcow2 为希望的输出文件名。

此外,也可以根据需要添加 -c 选项启用压缩,或使用 -o preallocation 选项指定预分配模式。例如:qemu-img convert -f vmdk -O qcow2 -c -o preallocation=metadata input.vmdk output.qcow2。确保已经安装了 QEMU 工具包,并且 qemu-img 命令可以在系统中使用。如果遇到权限问题,可能需要以管理员身份运行命令。

qcow2 转换为其他格式

要将 qcow2 转换为其他格式,同样使用 qemu-img convert 命令,但需要调整 -O 选项来指定目标格式。例如:

  • 转换为 raw 格式: qemu-img convert -f qcow2 -O raw input.qcow2 output.img
  • 转换为 vmdk 格式: qemu-img convert -f qcow2 -O vmdk input.qcow2 output.vmdk
  • 转换为 vdi 格式: qemu-img convert -f qcow2 -O vdi input.qcow2 output.vdi

其中,-f qcow2 指定输入文件格式为 qcow2,-O 选项指定输出文件的格式。input.qcow2 是 qcow2 镜像文件名,output.img、output.vmdk、output.vdi 则是想要转换成的目标格式的文件名。

示例中,将 qcow2 转回 raw 格式:

        qemu-img convert -f qcow2 -O raw vm-101-disk-1.qcow2 openwrt-new.img

或者转换为 VMware 使用的 vmdk 格式:

        qemu-img convert -f qcow2 -O vmdk vm-101-disk-1.qcow2 my-vm.vmdk

需要注意的是:

  • 转换后,原始的 qcow2 文件不会被删除。
  • 根据目标格式的不同,转换后的文件大小可能会有所变化。
  • 某些格式可能不支持 qcow2 的所有特性(例如快照、压缩),转换时会丢失这些特性。
  • 转换为 ISO 镜像通常不是一个直接的操作。可以将 qcow2 镜像挂载到虚拟机上,然后使用虚拟机内的工具创建 ISO 镜像。

核心转换逻辑与小结

命令的基本结构为:
qemu-img convert -f [源格式] -O [目标格式] [源文件名] [目标文件名]

  • -f(format):明确指定输入文件的格式。
  • -O(Output format):明确指定期望的输出文件的格式。

qemu-img convert 是用于不同虚拟磁盘镜像格式之间相互转换的工具。从其他格式转换为 qcow2 是常见应用场景之一;qcow2 格式因其支持快照、动态扩展(稀疏文件可以节省存储空间)、压缩和加密等高级特性,在 Proxmox VE (PVE)、KVM 等虚拟化环境中是常用格式。无论是 raw、vmdk(VMware)还是 vdi(VirtualBox)格式,转换到 qcow2 的方法都遵循上述基本结构,只需正确设置 -f 参数即可。

从 qcow2 转换为其他格式同样直接,只需将 qcow2 作为源格式,并指定需要的其他格式为目标格式即可。这在需要将虚拟机迁移到不支持 qcow2 的平台(如某些版本的 VMware ESXi 或 VirtualBox)时非常有用。在转换到 qcow2 格式时,还可以利用 -c 压缩、-o preallocation=... 预分配、-o encryption=on 加密等选项来优化结果。综合来看,qemu-img convert 提供了灵活且强大的机制,用于在几乎所有主流虚拟磁盘格式之间进行双向转换;掌握核心参数 -f 和 -O 的用法,并了解 -c 和 -o 等高级选项,即可应对各种虚拟化场景下的磁盘管理需求。

— 感谢阅读 —

一起交流

分享你的思考,让讨论更进一步。