### FIND_IMAGE_FORMAT and FIND_PROTOCOL lines are just debugging messages ### which do not appear in the patch. ### created loop block devices using dd (of exising images) and losetup ### /dev/loop0 is of format qcow2 ### /dev/loop2 is of format raw ### qcow2 format over block devices ### qemu-img with -f $ qemu-img info -f qcow2 /dev/loop0 image: /dev/loop0 file format: qcow2 virtual size: 20G (21474836480 bytes) disk size: 0 cluster_size: 4096 ### using the new fmt "protocol" $ qemu-img info fmt:qcow2:/dev/loop0 FIND_IMAGE_FORMAT filename=fmt:qcow2:/dev/loop0 FIND_PROTOCOL filename=qcow2:/dev/loop0 found format qcow2 FIND_IMAGE_FORMAT filename=fmt:qcow2:/dev/loop0 found format qcow2 image: fmt:qcow2:/dev/loop0 file format: qcow2 virtual size: 20G (21474836480 bytes) disk size: unavailable cluster_size: 4096 ### no format -- does not probe -- set to host_device ### -- will fail to boot $ qemu-img info /dev/loop0 FIND_IMAGE_FORMAT filename=/dev/loop0 FIND_IMAGE_FORMAT filename=/dev/loop0 is a host_device image: /dev/loop0 file format: host_device virtual size: 4.0G (4347179008 bytes) disk size: 0 ### creating a qcow image using new fmt "protocol" $ qemu-img create -b fmt:qcow2:/dev/loop0 -f qcow2 /tmp/uuu.qcow2 FIND_IMAGE_FORMAT filename=fmt:qcow2:/dev/loop0 FIND_PROTOCOL filename=qcow2:/dev/loop0 found format qcow2 FIND_IMAGE_FORMAT filename=fmt:qcow2:/dev/loop0 found format qcow2 Formatting '/tmp/uuu.qcow2', fmt=qcow2, backing_file=fmt:qcow2:/dev/loop0, size=20971520 kB $ qemu-img info -f qcow2 /tmp/uuu.qcow2 FIND_IMAGE_FORMAT filename=fmt:qcow2:/dev/loop0 FIND_PROTOCOL filename=qcow2:/dev/loop0 found format qcow2 FIND_IMAGE_FORMAT filename=fmt:qcow2:/dev/loop0 found format qcow2 image: /tmp/uuu.qcow2 file format: qcow2 virtual size: 20G (21474836480 bytes) disk size: 96K cluster_size: 4096 backing file: fmt:qcow2:/dev/loop0 (actual path: fmt:qcow2:/dev/loop0) ### creating an image with a relative backing file $ pushd /tmp/images/ > /dev/null $ qemu-img create -b fmt:qcow2:../uuu.qcow2 -f qcow2 ./uuu.qcow2 FIND_IMAGE_FORMAT filename=fmt:qcow2:../uuu.qcow2 FIND_PROTOCOL filename=qcow2:../uuu.qcow2 found format qcow2 FIND_IMAGE_FORMAT filename=fmt:qcow2:../uuu.qcow2 found format qcow2 FIND_IMAGE_FORMAT filename=fmt:qcow2:/dev/loop0 FIND_PROTOCOL filename=qcow2:/dev/loop0 found format qcow2 FIND_IMAGE_FORMAT filename=fmt:qcow2:/dev/loop0 found format qcow2 Formatting './uuu.qcow2', fmt=qcow2, backing_file=fmt:qcow2:../uuu.qcow2, size=20971520 kB $ popd > /dev/null $ qemu-img info -f qcow2 /tmp/images/uuu.qcow2 FIND_IMAGE_FORMAT filename=fmt:qcow2:/tmp/images/../uuu.qcow2 FIND_PROTOCOL filename=qcow2:/tmp/images/../uuu.qcow2 found format qcow2 FIND_IMAGE_FORMAT filename=fmt:qcow2:/tmp/images/../uuu.qcow2 found format qcow2 FIND_IMAGE_FORMAT filename=fmt:qcow2:/dev/loop0 FIND_PROTOCOL filename=qcow2:/dev/loop0 found format qcow2 FIND_IMAGE_FORMAT filename=fmt:qcow2:/dev/loop0 found format qcow2 image: /tmp/images/uuu.qcow2 file format: qcow2 virtual size: 20G (21474836480 bytes) disk size: 96K cluster_size: 4096 backing file: fmt:qcow2:../uuu.qcow2 (actual path: fmt:qcow2:/tmp/images/../uuu.qcow2) ### probing leaf image $ qemu-img info /tmp/images/uuu.qcow2 FIND_IMAGE_FORMAT filename=/tmp/images/uuu.qcow2 FIND_IMAGE_FORMAT filename=/tmp/images/uuu.qcow2 PROBING FIND_IMAGE_FORMAT filename=/tmp/images/uuu.qcow2 PROBING found qcow2 FIND_IMAGE_FORMAT filename=fmt:qcow2:/tmp/images/../uuu.qcow2 FIND_PROTOCOL filename=qcow2:/tmp/images/../uuu.qcow2 found format qcow2 FIND_IMAGE_FORMAT filename=fmt:qcow2:/tmp/images/../uuu.qcow2 found format qcow2 FIND_IMAGE_FORMAT filename=fmt:qcow2:/dev/loop0 FIND_PROTOCOL filename=qcow2:/dev/loop0 found format qcow2 FIND_IMAGE_FORMAT filename=fmt:qcow2:/dev/loop0 found format qcow2 image: /tmp/images/uuu.qcow2 file format: qcow2 virtual size: 20G (21474836480 bytes) disk size: 96K cluster_size: 4096 backing file: fmt:qcow2:../uuu.qcow2 (actual path: fmt:qcow2:/tmp/images/../uuu.qcow2) ### raw format over file $ qemu-img create -f raw /tmp/image1.raw 10G Formatting '/tmp/image1.raw', fmt=raw, size=10485760 kB ### using new "fmt" "protocol" -- no probing $ qemu-img create -b fmt:raw:/tmp/image1.raw -f qcow2 /tmp/image1.qcow2 FIND_IMAGE_FORMAT filename=fmt:raw:/tmp/image1.raw FIND_PROTOCOL filename=raw:/tmp/image1.raw found format raw FIND_IMAGE_FORMAT filename=fmt:raw:/tmp/image1.raw found format raw Formatting '/tmp/image1.qcow2', fmt=qcow2, backing_file=fmt:raw:/tmp/image1.raw, size=10485760 kB ### probing only qcow image (not raw backing file) $ qemu-img info /tmp/image1.qcow2 FIND_IMAGE_FORMAT filename=/tmp/image1.qcow2 FIND_IMAGE_FORMAT filename=/tmp/image1.qcow2 PROBING FIND_IMAGE_FORMAT filename=/tmp/image1.qcow2 PROBING found qcow2 FIND_IMAGE_FORMAT filename=fmt:raw:/tmp/image1.raw FIND_PROTOCOL filename=raw:/tmp/image1.raw found format raw FIND_IMAGE_FORMAT filename=fmt:raw:/tmp/image1.raw found format raw image: /tmp/image1.qcow2 file format: qcow2 virtual size: 10G (10737418240 bytes) disk size: 56K cluster_size: 4096 backing file: fmt:raw:/tmp/image1.raw (actual path: fmt:raw:/tmp/image1.raw) ### raw format over host device $ qemu-img info /dev/loop2 FIND_IMAGE_FORMAT filename=/dev/loop2 FIND_IMAGE_FORMAT filename=/dev/loop2 is a host_device image: /dev/loop2 file format: host_device virtual size: 300M (314572800 bytes) disk size: 0 ### use new "fmt" "protocol" -- no real need as qemu sets host_device anyways $ qemu-img create -b fmt:host_device:/dev/loop2 -f qcow2 /tmp/mydsl.qcow2 Formatting '/tmp/mydsl.qcow2', fmt=qcow2, backing_file=fmt:host_device:/dev/loop2, size=307200 kB $ qemu-img info -f qcow2 /tmp/mydsl.qcow2 image: /tmp/mydsl.qcow2 file format: qcow2 virtual size: 300M (314572800 bytes) disk size: 16K cluster_size: 4096 backing file: fmt:host_device:/dev/loop2 (actual path: fmt:host_device:/dev/loop2)\ ### run with probing (only upmost image) $ qemu-system-x86_64 -hda /tmp/mydsl.qcow2 FIND_IMAGE_FORMAT filename=/tmp/mydsl.qcow2 FIND_IMAGE_FORMAT filename=/tmp/mydsl.qcow2 PROBING FIND_IMAGE_FORMAT filename=/tmp/mydsl.qcow2 PROBING found qcow2 FIND_IMAGE_FORMAT filename=fmt:host_device:/dev/loop2 FIND_PROTOCOL filename=host_device:/dev/loop2 found format host_device FIND_IMAGE_FORMAT filename=fmt:host_device:/dev/loop2 found format host_device ### run with no probing (using -drive format) $ qemu-system-x86_64 -drive file=/tmp/mydsl.qcow2,format=qcow2 FIND_IMAGE_FORMAT filename=fmt:host_device:/dev/loop2 FIND_PROTOCOL filename=host_device:/dev/loop2 found format host_device FIND_IMAGE_FORMAT filename=fmt:host_device:/dev/loop2 found format host_device ### mydsl2 with no fmt, set host_device format for /dev/loop2 (no probing for host devices) $ qemu-img create -b /dev/loop2 -f qcow2 /tmp/mydsl2.qcow2 FIND_IMAGE_FORMAT filename=/dev/loop2 FIND_IMAGE_FORMAT filename=/dev/loop2 is a host_device Formatting '/tmp/mydsl2.qcow2', fmt=qcow2, backing_file=/dev/loop2, size=307200 kB $ qemu-img info -f qcow2 /tmp/mydsl2.qcow2 FIND_IMAGE_FORMAT filename=/dev/loop2 FIND_IMAGE_FORMAT filename=/dev/loop2 is a host_device image: /tmp/mydsl2.qcow2 file format: qcow2 virtual size: 300M (314572800 bytes) disk size: 16K cluster_size: 4096 backing file: /dev/loop2 (actual path: /dev/loop2) #### testing nbd together with "fmt" $ qemu-nbd -v -n --snapshot -t -k /tmp/uuu.socket fmt:qcow2:/tmp/images/uuu.qcow2 & [1] 31292 FIND_IMAGE_FORMAT filename=fmt:qcow2:/tmp/images/uuu.qcow2 FIND_PROTOCOL filename=qcow2:/tmp/images/uuu.qcow2 found format qcow2 FIND_IMAGE_FORMAT filename=fmt:qcow2:/tmp/images/uuu.qcow2 found format qcow2 FIND_IMAGE_FORMAT filename=fmt:qcow2:/tmp/images/../uuu.qcow2 FIND_PROTOCOL filename=qcow2:/tmp/images/../uuu.qcow2 found format qcow2 FIND_IMAGE_FORMAT filename=fmt:qcow2:/tmp/images/../uuu.qcow2 found format qcow2 FIND_IMAGE_FORMAT filename=fmt:qcow2:/dev/loop0 FIND_PROTOCOL filename=qcow2:/dev/loop0 found format qcow2 FIND_IMAGE_FORMAT filename=fmt:qcow2:/dev/loop0 found format qcow2 FIND_IMAGE_FORMAT filename=/tmp/vl.uXmIKt FIND_IMAGE_FORMAT filename=/tmp/vl.uXmIKt PROBING FIND_IMAGE_FORMAT filename=/tmp/vl.uXmIKt PROBING found qcow2 FIND_IMAGE_FORMAT filename=fmt:qcow2:/tmp/images/uuu.qcow2 FIND_PROTOCOL filename=qcow2:/tmp/images/uuu.qcow2 found format qcow2 FIND_IMAGE_FORMAT filename=fmt:qcow2:/tmp/images/uuu.qcow2 found format qcow2 FIND_IMAGE_FORMAT filename=fmt:qcow2:/tmp/images/../uuu.qcow2 FIND_PROTOCOL filename=qcow2:/tmp/images/../uuu.qcow2 found format qcow2 FIND_IMAGE_FORMAT filename=fmt:qcow2:/tmp/images/../uuu.qcow2 found format qcow2 FIND_IMAGE_FORMAT filename=fmt:qcow2:/dev/loop0 FIND_PROTOCOL filename=qcow2:/dev/loop0 found format qcow2 FIND_IMAGE_FORMAT filename=fmt:qcow2:/dev/loop0 found format qcow2 ### info works $ qemu-img info nbd:unix:/tmp/uuu.socket FIND_IMAGE_FORMAT filename=nbd:unix:/tmp/uuu.socket FIND_PROTOCOL filename=nbd:unix:/tmp/uuu.socket: found protocol nbd FIND_IMAGE_FORMAT filename=nbd:unix:/tmp/uuu.socket PROBING FIND_PROTOCOL filename=nbd:unix:/tmp/uuu.socket: found protocol nbd FIND_IMAGE_FORMAT filename=nbd:unix:/tmp/uuu.socket PROBING found nbd image: nbd:unix:/tmp/uuu.socket file format: nbd virtual size: 20G (21474836480 bytes) disk size: unavailable $ qemu-system-x86_64 -snapshot -hda nbd:unix:/tmp/uuu.socket FIND_IMAGE_FORMAT filename=nbd:unix:/tmp/uuu.socket FIND_PROTOCOL filename=nbd:unix:/tmp/uuu.socket: found protocol nbd FIND_IMAGE_FORMAT filename=nbd:unix:/tmp/uuu.socket PROBING FIND_PROTOCOL filename=nbd:unix:/tmp/uuu.socket: found protocol nbd FIND_IMAGE_FORMAT filename=nbd:unix:/tmp/uuu.socket PROBING found nbd FIND_IMAGE_FORMAT filename=/tmp/vl.C1NTVv FIND_IMAGE_FORMAT filename=/tmp/vl.C1NTVv PROBING FIND_IMAGE_FORMAT filename=/tmp/vl.C1NTVv PROBING found qcow2 FIND_IMAGE_FORMAT filename=nbd:unix:/tmp/uuu.socket FIND_PROTOCOL filename=nbd:unix:/tmp/uuu.socket: found protocol nbd FIND_IMAGE_FORMAT filename=nbd:unix:/tmp/uuu.socket PROBING FIND_PROTOCOL filename=nbd:unix:/tmp/uuu.socket: found protocol nbd FIND_IMAGE_FORMAT filename=nbd:unix:/tmp/uuu.socket PROBING found nbd ### $ kill %1 $ /bin/rm -f /tmp/uuu.socket ### checking vvfat: $ qemu-system-x86_64 -hda /tmp/uuu.qcow2 -hdb fat:floppy:/tmp/images FIND_IMAGE_FORMAT filename=/tmp/uuu.qcow2 FIND_IMAGE_FORMAT filename=/tmp/uuu.qcow2 PROBING FIND_IMAGE_FORMAT filename=/tmp/uuu.qcow2 PROBING found qcow2 FIND_IMAGE_FORMAT filename=fmt:qcow2:/dev/loop0 FIND_PROTOCOL filename=qcow2:/dev/loop0 found format qcow2 FIND_IMAGE_FORMAT filename=fmt:qcow2:/dev/loop0 found format qcow2 FIND_IMAGE_FORMAT filename=fat:floppy:/tmp/images FIND_PROTOCOL filename=fat:floppy:/tmp/images: found protocol fat ###