On Fri, Apr 12, 2013 at 02:55:45PM +0300, Ilkka Tengvall wrote: > I run into an issue where qemu-img convert fails repeatedly on > compressing a raw disk image. It's not all broken, since it many > times also works. When it fails, it fails always to the same sector. > > I run into problem using f18 qemu-img-1.2.2-6.fc18.x86_64, and > repeated it with the latest qemu-img from qemu git as of 12th of > April 2013: > last git log: 93b48c201eb6c0404d15550a0eaa3c0f7937e35e > > I discussed the problem on IRC on qemu channel with stefanha, and he > asked me to provide the info here. Thanks for you help stefanha! > > Here is some background snipplets: > > " > <ikke> anyone having idea why "qemu-img convert -c -O qcow2 -f raw > file1 file1.qcow2" would fail to: > <ikke> qemu-img: error while compressing sector 1842944: Input/output error > <stefanha> ikke: My guess is that > qcow2_alloc_compressed_cluster_offset() is failing > <stefanha> Compressed writes cannot overwrite existing sectors, > <stefanha> perhaps there's a bug in qemu-img convert that causes it > to touch the same sector twice. > <stefanha> We wouldn't notice it when compression is disabled. > <stefanha> But when it's enabled you get a failure. > <pm215> stefanha: by the way, is it right that qemu-img.c:1372 > calculates cluster_sectors from cluster_size by rounding down rather > than up? I know nothing about this code but that looks a little > suspicious > <stefanha> And the contents of the input image affect the I/O > pattern during conversion > <stefanha> which would explain why you always get the problem with > certain images. > <stefanha> pm215: That should be okay. cluster_size is a power of 2 > and multiple of 512. > <stefanha> For qcow2 the default cluster_size is 64 KB. > <stefanha> ikke: A post to the mailing list with a link to the file > and a description of how to trigger the failure would be fine. > <stefanha> I think it won't take long to fix. > " > > The image for repeating this is available here (~230MB): > > http://hard.ware.fi/~ikke/stuff/ubuntufs.raw.img.gzip > > and the command to reproduce the error is here: > > $ qemu-img convert -c -O qcow2 -f raw root.fs.copy root.fs.small.new > qemu-img: error while compressing sector 1842944: Input/output error
I discussed the bug with kwolf on Friday. Although I sent a patch to add an error message when the input image length is not a multiple of cluster_size, Kevin pointed out that we can allow the final cluster to be zero-padded beyond the end of the virtual disk. I'll try to send a patch for that this week. Stefan