如何将多部分 VMDK 磁盘映像转换为 qcow2?

ænd*_*rük 8 vmware qemu

我有一个作为多个文件存在的 VMDK 磁盘映像:

2.0G guest-s001.vmdk  1.8G guest-s003.vmdk  128K guest-s005.vmdk
2.0G guest-s002.vmdk  1.7G guest-s004.vmdk  4.0K guest.vmdk
Run Code Online (Sandbox Code Playgroud)

当运行qemu-img将其转换为 qcow2 格式时,我应该指定哪个输入文件名?只是guest.vmdk,所有这些,或者类似的东西guest-*.vmdk

Kee*_*ook 12

过去,我必须先将它们转换为原始图像,将它们连接在一起,然后将生成的原始图像转换为 qcow2:

qemu-img convert guest-s001.vmdk guest-s0001.raw
qemu-img convert guest-s002.vmdk guest-s0002.raw
qemu-img convert guest-s003.vmdk guest-s0003.raw
qemu-img convert guest-s004.vmdk guest-s0004.raw
qemu-img convert guest-s005.vmdk guest-s0005.raw
cat guest-s0001.raw guest-s0002.raw guest-s0003.raw guest-s0004.raw guest-s0005.raw > guest.raw
qemu-img convert guest.raw guest.qcow2
Run Code Online (Sandbox Code Playgroud)

如果不仅仅是最后一个文件小于 2146762752 字节,请不要惊慌。某些 VMware 产品会创建不同大小的 vmdk 跨度。该大小应与主 vmdk 文件中的区描述中列出的扇区数相匹配(可使用任何文本编辑器或“cat”读取)的 512 倍。

也可以一次完成这一切,但我还没有尝试过:

qemu-img convert guest-s001.vmdk guest-s002.vmdk guest-s003.vmdk guest-s004.vmdk guest-s005.vmdk guest.qcow2
Run Code Online (Sandbox Code Playgroud)

或者,如果它们实际上不是连续的磁盘映像,那么我不确定该建议什么。:)

祝你好运!


一次转换所有图像的快速终端脚本是:

for i in *.vmdk; do qemu-img convert -f vmdk $i -O raw $i.raw; done
cat *.raw > tmpImage.raw
qemu-img convert tmpImage.raw finalImage.qcow2
rm *.raw
Run Code Online (Sandbox Code Playgroud)


Stu*_*art 10

看起来 qemu-img 命令现在已经得到了增强。我刚刚使用以下命令将一堆 VMware 多部分映像转换为 qcow2:

$ qemu-img convert <base of the image without the S0001,2etc>.vmdk new-image.qcow2
Run Code Online (Sandbox Code Playgroud)