[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <alpine.LFD.2.00.1105181422200.4100@dhcp-27-109.brq.redhat.com>
Date: Wed, 18 May 2011 14:23:07 +0200 (CEST)
From: Lukas Czerner <lczerner@...hat.com>
To: Lukas Czerner <lczerner@...hat.com>
cc: linux-ext4@...r.kernel.org, tytso@....edu, sandeen@...hat.com,
adilger@...ger.ca
Subject: Re: [PATCH 3/4 v3] e2image: Support for conversion QCOW2 image into
raw
On Wed, 18 May 2011, Lukas Czerner wrote:
> This commit adds support for converting QCOW2 image created previously
> with e2image into raw image. The QCOW2 image is detected automatically,
> so there is not new option. Just use following command:
>
> e2image -r image.qcow image.raw
>
> No that this tool is aimed to quickly convert qcow2 image created with
> e2image into raw image. In order to improve speed we are doing some
> assumption I believe might not be true for regular qcow2 images. So it
> was not tested with regular QCOW2 images and it might not work with
> them. The intention of this tool is only convert images previously
> created by e2image.
>
> Note that there is nothing special with QCOW2 images created by e2images
> and it can be used with tools like qemu-img, or qemu-nbd without any
> problems.
>
> Signed-off-by: Lukas Czerner <lczerner@...hat.com>
> ---
> misc/e2image.8.in | 4 ++++
> misc/e2image.c | 48 +++++++++++++++++++++++++++++++++++++++++++++++-
> 2 files changed, 51 insertions(+), 1 deletions(-)
>
> diff --git a/misc/e2image.8.in b/misc/e2image.8.in
> index 4a28580..6f31dd1 100644
> --- a/misc/e2image.8.in
> +++ b/misc/e2image.8.in
> @@ -131,6 +131,10 @@ the
> option will prevent analysis of problems related to hash-tree indexed
> directories.
> .PP
> +Note that this will work even if you substitute "/dev/hda1" for another raw
> +disk image, or QCOW2 image previously created by
> +.BR e2image .
> +.PP
> .SH QCOW2 IMAGE FILES
> The
> .B \-Q
> diff --git a/misc/e2image.c b/misc/e2image.c
> index dbf4421..0a1b1f5 100644
> --- a/misc/e2image.c
> +++ b/misc/e2image.c
> @@ -1213,16 +1213,33 @@ static void install_image(char *device, char *image_fn, int type)
> exit (0);
> }
>
> +static struct ext2_qcow2_hdr *check_qcow2_image(int *fd, char *name)
> +{
> +
> +#ifdef HAVE_OPEN64
> + *fd = open64(name, O_RDONLY, 0600);
> +#else
> + *fd = open(name, O_RDONLY, 0600);
> +#endif
> + if (*fd < 0)
> + return NULL;
> +
> + return qcow2_read_header(*fd);
> +}
> +
> int main (int argc, char ** argv)
> {
> int c;
> errcode_t retval;
> ext2_filsys fs;
> char *image_fn;
> + struct ext2_qcow2_hdr *header = NULL;
> int open_flag = EXT2_FLAG_64BITS;
> int img_type = 0;
> int flags = 0;
> + int qcow2_fd = 0;
> int fd = 0;
> + int ret = 0;
>
> #ifdef ENABLE_NLS
> setlocale(LC_MESSAGES, "");
> @@ -1266,6 +1283,14 @@ int main (int argc, char ** argv)
> exit (0);
> }
>
> + if (img_type & E2IMAGE_RAW) {
> + header = check_qcow2_image(&qcow2_fd, device_name);
> + if (header) {
> + flags |= E2IMAGE_IS_QCOW2_FLAG;
> + goto skip_device;
> + }
> + }
> +
> retval = ext2fs_open (device_name, open_flag, 0, 0,
> unix_io_manager, &fs);
> if (retval) {
> @@ -1275,6 +1300,7 @@ int main (int argc, char ** argv)
> exit(1);
> }
>
> +skip_device:
> if (strcmp(image_fn, "-") == 0)
> fd = 1;
> else {
> @@ -1296,12 +1322,32 @@ int main (int argc, char ** argv)
> exit(1);
> }
>
> + if (flags & E2IMAGE_IS_QCOW2_FLAG) {
> + ret = qcow2_write_raw_image(qcow2_fd, fd, header);
> + if (ret)
> + if (ret == -QCOW_COMPRESSED)
> + fprintf(stderr, "Image (%s) is compressed\n");
> + if (ret == -QCOW_ENCRYPTED)
> + fprintf(stderr, "Image (%s) is encrypted\n");
> + com_err(program_name, ret,
> + _("while trying to convert qcow2 image"
> + " (%s) into raw image (%s)"),
> + device_name, image_fn);
I have forgot braces. Fixed in v4.
> + goto out;
> + }
> +
> +
> if (img_type)
> write_raw_image_file(fs, fd, img_type, flags);
> else
> write_image_file(fs, fd);
>
> ext2fs_close (fs);
> +out:
> + if (header)
> + free(header);
> + if (qcow2_fd)
> + close(qcow2_fd);
> remove_error_table(&et_ext2_error_table);
> - exit (0);
> + return ret;
> }
>
--
--
To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists