qemu-img 从 stdin /gunzip 压缩图像

qemu-img 从 stdin /gunzip 压缩图像

由于空间不足,我想对压缩的“glance image-download”进行gunzip
,并使用 qemu-img 将其压缩为“qcow2”格式的文件。

尝试过这个:

gunzip -c file.gz |qemu-img convert -f raw /dev/stdin -O qcow2 file.qcow2 

但它失败了:

qemu-img: Could not open '/dev/stdin': Could not refresh total sector
count: Illegal seek

知道这是否可能吗?

答案1

建立一个解决方法,例如:
qemu-nbd --connect=/dev/nbd0 /my/disk/image.qcow2
gunzip -c rawImage.img.gz | dd of=/dev/nbd0

答案2

无法使用 qemu-img 与 stdin/stdout 进行流式传输,但可以使用NBD复制+ qemu-nbd:

$ qemu-img create -f qcow2 image.qcow2 1G
$ zcat file.gz | nbdcopy -- - [ qemu-nbd -f qcow2 image.qcow2 ]

不幸的是,问题是您必须在开始之前知道最终 qcow2 文件的大小,尽管使用更大的大小也可以。我在上面的示例中使用了 1G,如果未压缩的 gzip 文件大于此大小,则会失败。

这些破折号都是必要的。双破折号阻止 nbdcopy 处理 qemu-nbd 的 -f 标志,单破折号表示“来自 stdin 的流”。

为了完整起见,以下是将 qcow2 流式传输到标准输出的方法:

$ nbdcopy -- [ qemu-nbd -f qcow2 image.qcow2 ] - | file -

相关内容