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 -

関連情報