공간이 부족해서 압축된 "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 -