All of lore.kernel.org
 help / color / mirror / Atom feed
From: Fam Zheng <famz@redhat.com>
To: Ilkka Tengvall <ilkka.tengvall@cybercom.com>
Cc: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] qemu-img: error while compressing, Input/output error
Date: Mon, 15 Apr 2013 14:00:00 +0800	[thread overview]
Message-ID: <20130415060000.GA19922@localhost.localdomain> (raw)
In-Reply-To: <5167F641.8090004@cybercom.com>

On Fri, 04/12 14:55, 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
> 
> 
> 
> BR,
> 
> Ilkka Tengvall
> ilkka.tengvall@cybercom.com
> 

Thanks for the info. I tried you image, but it's rather commonly
reproducible, just use any non-zero file with 512 bytes as input will
result in the same error. Looking into the cause, it seems like a bug in
block code, the last sectors are refused to be write compressed unless
it makes a whole cluster in output format (see
block.c:bdrv_check_request).

One workaround now is to round up your source raw image to 64k (the qcow2
cluster size):

$ dd if=/dev/zero bs=1 count=$((64*1024 - `stat -c %s ubuntufs.raw.img` %(64*1024))) >> new.img

-- 
Fam

  reply	other threads:[~2013-04-15  6:24 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-04-12 11:55 [Qemu-devel] qemu-img: error while compressing, Input/output error Ilkka Tengvall
2013-04-15  6:00 ` Fam Zheng [this message]
2013-04-15  6:52 ` Stefan Hajnoczi
2013-04-15 11:00   ` Ilkka Tengvall
2013-04-15 11:14     ` Stefan Hajnoczi

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20130415060000.GA19922@localhost.localdomain \
    --to=famz@redhat.com \
    --cc=ilkka.tengvall@cybercom.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.