如何使用 qemu-img convert 对驱动器的起始部分进行映像处理?(类似于使用 dd count=)

如何使用 qemu-img convert 对驱动器的起始部分进行映像处理?(类似于使用 dd count=)

我有 500 GB (~475 GiB) SSD,我想用 qcow2 进行映像处理。我计划遵循这个例子将 Windows 安装移至 Qemu/KVM VM。我将 ~470 GiB 的 bitlocker 根分区缩小到 115 GiB使用 dislocker 和 gparted。然后我将 2000 MiB 的 WinRE_DRV 分区移到左侧,使其自身和最近缩小的 bitlocker 分区之间没有空间。在当前情况下,驱动器的前 116 GiB 包含数据,其余部分是未分配的空间。

我想对前 116 GiB 的数据进行映像处理,并排除未分配的空间,以免在映像中浪费空间。起初,我想使用 dd,bs=1M,count=116688,这样只会复制我想要的数据,然后将其传输到 qemu-img。但是,我后来了解到 qemu-img不支持标准输入。针对该问题的建议解决方案是使用 nbdcopy,但对我来说效果不佳,因为

不幸的是,你必须在开始之前知道最终的 qcow2 文件的大小,尽管使用更大的尺寸也是可以的。

这对我来说不太好,因为我将在制作镜像时使用压缩,这意味着我事先不知道最终的大小。我可以选择与未压缩数据(116 GiB)一样大的大小来保证它适合镜像,但这样做最终会浪费空间,导致它成为一个不利的解决方案。

我也尝试阅读 qemu-img 的手册页,似乎没有任何用于 qemu-img convert 的 count= 选项,但是似乎有一个用于 qemu-img dd 的选项,我认为在这种情况下它没有帮助。

我原来的命令:

dd bs=1M if=/dev/nvme0n1 count=116688 status=progress | qemu-img convert -p -f raw -O qcow2 -c -o compression_type=zstd,preallocation=off /media/user/drive/win11_image.qcow2

相关内容