ændrük Asked: 2010-09-20 14:49:02 +0800 CST2010-09-20 14:49:02 +0800 CST 2010-09-20 14:49:02 +0800 CST 如何将多部分 VMDK 磁盘映像转换为 qcow2? 772 我有一个作为多个文件存在的 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 运行qemu-img以将其转换为 qcow2 格式时,我应该指定哪个输入文件名?只是guest.vmdk,所有这些,还是类似的东西guest-*.vmdk? vmware qemu 7 个回答 Voted Best Answer Kees Cook 2010-09-23T15:37:34+08:002010-09-23T15:37:34+08:00 过去,我必须先将它们转换为原始图像,将它们连接在一起,然后将生成的原始图像转换为 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 如果不仅仅是最后一个文件小于 2146762752 字节,请不要惊慌。一些 VMware 产品会创建不同大小的 vmdk span。大小应匹配主 vmdk 文件中的扩展描述中列出的扇区数的 512 倍(可使用任何文本编辑器或“cat”读取)。 也可以一次完成所有操作,但我还没有尝试过: qemu-img convert guest-s001.vmdk guest-s002.vmdk guest-s003.vmdk guest-s004.vmdk guest-s005.vmdk guest.qcow2 或者,如果它们实际上不是连续的磁盘映像,那么我不确定该建议什么。:) 祝你好运! 一次转换所有图像的快速终端脚本是: 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 Stuart 2018-12-08T03:54:21+08:002018-12-08T03:54:21+08:00 看起来 qemu-img 命令现在得到了增强。我刚刚使用以下命令将一堆 VMware 多部分图像转换为 qcow2: $ qemu-img convert <base of the image without the S0001,2etc>.vmdk new-image.qcow2 user9684 2011-01-27T16:47:52+08:002011-01-27T16:47:52+08:00 我正在尝试将其转换为原始: find . -type f -iname <guest-name>\*-f0\*vmdk -exec qemu-img convert {} {}.raw \; 然后串联: cat <guest-name>*-f0[0-1][1-9]*raw >> <guest-name>.raw 然后转换: qemu-img convert <guest-name>.raw -O qcow2 <guest-name>.qcow2 Andrew Galford 2014-11-05T22:09:05+08:002014-11-05T22:09:05+08:00 我本来可以parallel这样做,但这里有一个目录: ls *s0??.vdmk | xargs -n 2 -I % qemu-img convert % %.img 接着: cat *.img >> imagename.raw 管道之前的ls部分将打印所有在末尾有一个s0和两个通配符的 vdmk,该xargs命令允许它%两次替换为命令末尾的变量qemu-img。 ScienceMan 2015-05-08T14:31:11+08:002015-05-08T14:31:11+08:00 这是一种使用数组的简单方法: files=(*s0??.vmdk); qemu-img convert -f vmdk -O qcow2 ${files[@]} ${files%-s001.vmdk}.qcow2; coffman21 2019-01-23T08:39:40+08:002019-01-23T08:39:40+08:00 一个选项是在图像名称中使用通配符: qemu-img convert my-multipart-image*.vmdk my-image.qcow2 wuseman 2022-01-20T19:11:04+08:002022-01-20T19:11:04+08:00 上述示例都没有为我完成工作,我在网上找到的其他解决方案也没有,所以在这里你可以使用更新的版本。 文件名:Windows.10-s00{1,16}.vmdk存储在 vmware 路径中,但也请注意单个 .vmdk 文件,即:您的文件夹中的 ~4.0kb:这是它在我的设置中的查找方式:Windows.10 .vmdk选择这个最小文件作为“目标”,然后 qemu-img 将为我们完成这项工作: 4.0G Windows.10-s001.vmdk 4.0G Windows.10-s002.vmdk 4.0G Windows.10-s003.vmdk 4.0G Windows.10-s004.vmdk 4.0G Windows.10-s005.vmdk 4.0G Windows.10-s006.vmdk 4.0G Windows.10-s007.vmdk 3.8G Windows.10-s008.vmdk 12K Windows.10-s009.vmdk 12K Windows.10-s010.vmdk 12K Windows.10-s011.vmdk 12K Windows.10-s012.vmdk 12K Windows.10-s013.vmdk 12K Windows.10-s014.vmdk 12K Windows.10-s015.vmdk 144K Windows.10-s016.vmdk 4.0K Windows.10.vmdk 使用以下命令转换 vmdk > qcow2: qemu-img convert Windows.10.vmdk Windows.10.qcow
过去,我必须先将它们转换为原始图像,将它们连接在一起,然后将生成的原始图像转换为 qcow2:
如果不仅仅是最后一个文件小于 2146762752 字节,请不要惊慌。一些 VMware 产品会创建不同大小的 vmdk span。大小应匹配主 vmdk 文件中的扩展描述中列出的扇区数的 512 倍(可使用任何文本编辑器或“cat”读取)。
也可以一次完成所有操作,但我还没有尝试过:
或者,如果它们实际上不是连续的磁盘映像,那么我不确定该建议什么。:)
祝你好运!
一次转换所有图像的快速终端脚本是:
看起来 qemu-img 命令现在得到了增强。我刚刚使用以下命令将一堆 VMware 多部分图像转换为 qcow2:
我正在尝试将其转换为原始:
然后串联:
然后转换:
我本来可以
parallel
这样做,但这里有一个目录:接着:
管道之前的
ls
部分将打印所有在末尾有一个s0
和两个通配符的 vdmk,该xargs
命令允许它%
两次替换为命令末尾的变量qemu-img
。这是一种使用数组的简单方法:
一个选项是在图像名称中使用通配符:
上述示例都没有为我完成工作,我在网上找到的其他解决方案也没有,所以在这里你可以使用更新的版本。
文件名:Windows.10-s00{1,16}.vmdk存储在 vmware 路径中,但也请注意单个 .vmdk 文件,即:您的文件夹中的 ~4.0kb:这是它在我的设置中的查找方式:Windows.10 .vmdk选择这个最小文件作为“目标”,然后 qemu-img 将为我们完成这项工作:
使用以下命令转换 vmdk > qcow2: