From: Anthony Liguori <anthony@codemonkey.ws>
To: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH] New qemu-img convert -B option to preserve the COW aspect of images and/or re-base them
Date: Tue, 03 Jun 2008 14:06:41 -0500 [thread overview]
Message-ID: <48459641.5040000@codemonkey.ws> (raw)
In-Reply-To: <aaccfcb60805300203l18b71b9cne1b7bf8d9fc04cbd@mail.gmail.com>
Marc Bevand wrote:
> [PATCH] New qemu-img convert -B option to preserve the COW aspect of
> images and/or re-base them
>
> If a disk image hd_a is a copy-on-write image based on the backing
> file hd_base, it is currently impossible to use qemu-img to convert
> hd_a to hd_b (possibly using another disk image format) while keeping
> hd_b a copy-on-write image of hd_base. qemu-img also doesn't provide a
> feature that would let an enduser re-base a image, for example: adjust
> hd_a's backing file name from hd_base to hd_base2 if it had to change
> for some reason.
>
> This patch solves the 2 above problems by adding a new qemu-img
> convert -B option. This is a generic feature that should work with
> ANY disk image format supporting backing files. Examples:
>
> $ qemu-img info hd_a
> image: hd_a
> file format: qcow
> virtual size: 6.0G (6442450944 bytes)
> disk size: 28K
> cluster_size: 512
> backing file: hd_base (actual path: hd_base)
>
> Converting hd_a (qcow) to hd_b (qcow2) while preserving the
> copy-on-write aspect of the image:
>
> $ qemu-img convert hd_a -O qcow2 -B hd_base hd_b
> $ qemu-img info hd_b
> image: hd_b
> file format: qcow2
> virtual size: 6.0G (6442450944 bytes)
> disk size: 36K
> cluster_size: 4096
> backing file: hd_base (actual path: hd_base)
>
> Renaming the backing file without losing hd_a:
>
> $ ln hd_base hd_base2
> $ qemu-img convert hd_a -O qcow -B hd_base2 hd_a2
> $ mv hd_a2 hd_a
> $ rm hd_base
> $ qemu-img info hd_a
> image: hd_a
> file format: qcow
> virtual size: 6.0G (6442450944 bytes)
> disk size: 28K
> cluster_size: 512
> backing file: hd_base2 (actual path: hd_base2)
>
> Patch made against SVN's rev 4622.
>
>
> Signed-off-by: Marc Bevand <m.bevand <at> gmail.com>
>
> Index: qemu-img.texi
> ===================================================================
> --- qemu-img.texi (revision 4622)
> +++ qemu-img.texi (working copy)
> @@ -10,7 +10,7 @@
> @table @option
> @item create [-e] [-6] [-b @var{base_image}] [-f @var{fmt}]
> @var{filename} [@var{size}]
> @item commit [-f @var{fmt}] @var{filename}
> -@item convert [-c] [-e] [-6] [-f @var{fmt}] @var{filename} [-O
> @var{output_fmt}] @var{output_filename}
> +@item convert [-c] [-e] [-6] [-f @var{fmt}] [-O @var{output_fmt}] [-B
> @var{output_base_image}] @var{filename} [@var{filename2} [...]]
>
Please don't mix adding a new option with changing the format of the
help text.
> @var{output_filename}
> @item info [-f @var{fmt}] @var{filename}
> @end table
>
> @@ -21,7 +21,11 @@
> @item base_image
> is the read-only disk image which is used as base for a copy on
> write image; the copy on write image only stores the modified data
> -
> +@item output_base_image
> +forces the output image to be created as a copy on write
> +image of the specified base image; @code{output_base_image} should
> have the same
> +content as the input's base image, however the path, image format, etc may
> +differ
> @item fmt
> is the disk image format. It is guessed automatically in most cases.
> The following formats are supported:
>
> Index: block.c
> ===================================================================
> --- block.c (revision 4622)
> +++ block.c (working copy)
> @@ -884,6 +884,32 @@
> bdrv_flush(bs->backing_hd);
> }
>
> +/*
> + * Returns true iff the specified sector is present in the disk image. Drivers
> + * not implementing the functionality are assumed to not support backing files,
> + * hence all their sectors are reported as allocated.
> + *
> + * 'pnum' is set to the number of sectors (including and immediately following
> + * the specified sector) that are known to be in the same
> + * allocated/unallocated state.
> + *
> + * 'nb_sectors' is the max value 'pnum' should be set to.
> + */
> +int bdrv_is_allocated(BlockDriverState *bs, int64_t sector_num, int nb_sectors,
> + int *pnum)
> +{
> + if (!bs->drv->bdrv_is_allocated) {
> + if (sector_num >= bs->total_sectors) {
> + *pnum = 0;
> + return 0;
> + }
> + int64_t n = bs->total_sectors - sector_num;
>
Don't mix declarations with code.
> + *pnum = (n < nb_sectors) ? (n) : (nb_sectors);
> + return 1;
> + }
> + return bs->drv->bdrv_is_allocated(bs, sector_num, nb_sectors, pnum);
> +}
> +
> #ifndef QEMU_IMG
> void bdrv_info(void)
> {
> Index: block.h
> ===================================================================
> --- block.h (revision 4622)
> +++ block.h (working copy)
> @@ -99,6 +99,8 @@
>
> /* Ensure contents are flushed to disk. */
> void bdrv_flush(BlockDriverState *bs);
> +int bdrv_is_allocated(BlockDriverState *bs, int64_t sector_num, int nb_sectors,
> + int *pnum);
>
> #define BDRV_TYPE_HD 0
> #define BDRV_TYPE_CDROM 1
> Index: qemu-img.c
> ===================================================================
> --- qemu-img.c (revision 4622)
> +++ qemu-img.c (working copy)
> @@ -55,13 +55,17 @@
> "Command syntax:\n"
> " create [-e] [-6] [-b base_image] [-f fmt] filename [size]\n"
> " commit [-f fmt] filename\n"
> - " convert [-c] [-e] [-6] [-f fmt] [-O output_fmt]
> filename [filename2 [...]] output_filename\n"
> + " convert [-c] [-e] [-6] [-f fmt] [-O output_fmt] [-B
> output_base_image] filename [filename2 [...]] output_filename\n"
>
Please fix your mailer. It's impossible to review with the whitespace
damage and I can't comment on something downloaded from a website.
Regards,
Anthony Liguori
next prev parent reply other threads:[~2008-06-03 19:06 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-05-30 9:03 [Qemu-devel] [PATCH] New qemu-img convert -B option to preserve the COW aspect of images and/or re-base them Marc Bevand
2008-06-03 19:06 ` Anthony Liguori [this message]
2008-06-03 19:40 ` Jamie Lokier
2008-06-03 20:12 ` Anthony Liguori
2008-06-03 20:43 ` Jamie Lokier
2008-06-03 21:07 ` Andreas Färber
2008-06-03 21:28 ` Anthony Liguori
-- strict thread matches above, loose matches on Subject: below --
2008-05-28 5:02 [Qemu-devel] [RFC] Allow 'qemu-img convert' to preserve the backing file Marc Bevand
2008-05-28 9:53 ` Ian Jackson
2008-05-28 9:55 ` Ian Jackson
2008-05-30 8:43 ` [Qemu-devel] " Marc Bevand
2008-05-30 9:21 ` [Qemu-devel] [PATCH] New qemu-img convert -B option to preserve the COW aspect of images and/or re-base them Marc Bevand
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=48459641.5040000@codemonkey.ws \
--to=anthony@codemonkey.ws \
--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.