Hi all, I'm trying to convert images (mostly qcow2) to raw format on thin lv, hoping to write only the allocated blocks on the thin lv, but it seems that qemu-img cannot write sparse image on a block device.
Here is an example: Create a new thin lv: # lvcreate --name raw-test --virtualsize 20g --thinpool pool0 ovirt-local Using default stripesize 64.00 KiB. Logical volume "raw-test" created. [root@voodoo6 ~]# lvs ovirt-local LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert 029060ab-41ef-4dfd-9a3e-4c716c01db06 ovirt-local Vwi-a-tz-- 20.00g pool0 6.74 4f207ee8-bb47-465a-9b68-cb778e070861 ovirt-local Vwi-a-tz-- 20.00g pool0 0.00 7aed605e-c74c-40d8-b449-8a1bf7228b8b ovirt-local Vwi-a-tz-- 20.00g pool0 6.98 ce6d08d3-350f-4afa-a0e7-7b492a1a7744 ovirt-local Vwi-a-tz-- 20.00g pool0 6.87 pool0 ovirt-local twi-aotz-- 40.00g 10.30 5.49 raw-test ovirt-local Vwi-a-tz-- 20.00g pool0 0.00 I want to convert this image (fresh fedora 25 installation): # qemu-img info fedora.qcow2 image: fedora.qcow2 file format: qcow2 virtual size: 20G (21474836480 bytes) disk size: 1.3G cluster_size: 65536 Format specific information: compat: 1.1 lazy refcounts: false refcount bits: 16 corrupt: false Convert the image to raw, into the new thin lv: # qemu-img convert -p -f qcow2 -O raw -t none -T none fedora.qcow2 /dev/ovirt-local/raw-test (100.00/100%) The image size was 1.3G, but now the thin lv is fully allocated: # lvs ovirt-local LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert 029060ab-41ef-4dfd-9a3e-4c716c01db06 ovirt-local Vwi-a-tz-- 20.00g pool0 6.74 4f207ee8-bb47-465a-9b68-cb778e070861 ovirt-local Vwi-a-tz-- 20.00g pool0 0.00 7aed605e-c74c-40d8-b449-8a1bf7228b8b ovirt-local Vwi-a-tz-- 20.00g pool0 6.98 ce6d08d3-350f-4afa-a0e7-7b492a1a7744 ovirt-local Vwi-a-tz-- 20.00g pool0 6.87 pool0 ovirt-local twi-aotz-- 40.00g 60.30 29.72 raw-test ovirt-local Vwi-a-tz-- 20.00g pool0 100.00 Recreate the lv: # lvremove -f ovirt-local/raw-test Logical volume "raw-test" successfully removed # lvcreate --name raw-test --virtualsize 20g --thinpool pool0 ovirt-local Using default stripesize 64.00 KiB. Logical volume "raw-test" created. Covert the qcow image to raw sparse file: # qemu-img convert -p -f qcow2 -O raw -t none -T none fedora.qcow2 fedora.raw (100.00/100%) # qemu-img info fedora.raw image: fedora.raw file format: raw virtual size: 20G (21474836480 bytes) disk size: 1.3G Write the sparse file to the thin lv: # dd if=fedora.raw of=/dev/ovirt-local/raw-test bs=8M conv=sparse 2560+0 records in 2560+0 records out 21474836480 bytes (21 GB) copied, 39.0065 s, 551 MB/s Now we are using only 7.19% of the lv: # lvs ovirt-local LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert 029060ab-41ef-4dfd-9a3e-4c716c01db06 ovirt-local Vwi-a-tz-- 20.00g pool0 6.74 4f207ee8-bb47-465a-9b68-cb778e070861 ovirt-local Vwi-a-tz-- 20.00g pool0 0.00 7aed605e-c74c-40d8-b449-8a1bf7228b8b ovirt-local Vwi-a-tz-- 20.00g pool0 6.98 ce6d08d3-350f-4afa-a0e7-7b492a1a7744 ovirt-local Vwi-a-tz-- 20.00g pool0 6.87 pool0 ovirt-local twi-aotz-- 40.00g 13.89 7.17 raw-test ovirt-local Vwi-a-tz-- 20.00g pool0 7.19 This works, but it would be nicer to have a way to convert to raw sparse to a block device in one pass. Nir