由于空间不足,我想对压缩的“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 -