スペースが不足して圧縮された「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 -