From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:58489) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QF1bX-00007s-Bn for qemu-devel@nongnu.org; Wed, 27 Apr 2011 06:04:24 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1QF1bS-0005Hw-6Z for qemu-devel@nongnu.org; Wed, 27 Apr 2011 06:04:19 -0400 Received: from mx1.redhat.com ([209.132.183.28]:40882) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QF1bR-0005H1-U1 for qemu-devel@nongnu.org; Wed, 27 Apr 2011 06:04:14 -0400 Message-ID: <4DB7EAAC.3080402@redhat.com> Date: Wed, 27 Apr 2011 12:06:36 +0200 From: Kevin Wolf MIME-Version: 1.0 References: <4DB7880C.4090302@fnarfbargle.com> <4DB7DA44.4030008@fnarfbargle.com> In-Reply-To: <4DB7DA44.4030008@fnarfbargle.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] Qemu-img convert with -B List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Brad Campbell Cc: Stefan Hajnoczi , qemu-devel@nongnu.org, Brad Campbell Am 27.04.2011 10:56, schrieb Brad Campbell: > On 27/04/11 16:10, Stefan Hajnoczi wrote: >> On Wed, Apr 27, 2011 at 4:05 AM, Brad Campbell >> wrote: >>> I see there is a bug raised about the behaviour of qemu-img when used to convert using an output backing file. It allocates every sector whether or not it already exists in the output backing file. >> Please post the link to the bug report. >> > Yeah, sorry about that. Not very clever of me. > > https://bugs.launchpad.net/qemu/+bug/660366 I think this bug is fixed by commit a18953fb. >>> Can someone verify these assumptions for me please? >>> - I can bdrv_open() a file that has a chain of backing files, and the >>> following is true : >>> - bdrv_read() returns the most recently allocated sector contents (or >>> 0) >> Correct. >> >>> - bdrv_is_allocated() will return false only if that sector is not >>> allocated in _any_ of the files in the chain >> Incorrect. It returns true if the sector is allocated in the top-most >> file, false otherwise. In other words bdrv_is_allocated() is flat, it >> does not traverse a chain of backing files. > > Right. > > I guess the correct way to do this is to open and traverse all the input and output backing files, > but I don't see why that should be necessary as the output file is created O_RDWR. > > Now as the output file is created with the backing_file option, can I simply bdrv_read() both input > and output files, and only write to the output file if the sector differs or != 0? Seems like that > would be the logical way to do everything right while leveraging the complexity of the block > drivers. It would also allow for maximum "compression" of the output file if the filesystem has all > unused space wiped (which is my desired usage case). qemu-img convert -B is supposed to work only with unchanged backing files! I'm not aware of any major use cases besides renaming the backing file (for which rebase -u exists today), so it's only there for compatibility reasons. What you describe looks much more like qemu-img rebase. Kevin