qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [RFC 00/24] inplace image conversion
@ 2011-07-29  4:49 Devin Nakamura
  2011-07-29  4:49 ` [Qemu-devel] [RFC 01/24] block: add block conversion api Devin Nakamura
                   ` (23 more replies)
  0 siblings, 24 replies; 42+ messages in thread
From: Devin Nakamura @ 2011-07-29  4:49 UTC (permalink / raw)
  To: qemu-devel; +Cc: kwolf, Devin Nakamura

This series sets out the foundations of an api for in place image conversion, and implements it 
in the QED and QCOW2 drivers.

The basic flow of conversion is as follows:
The source image is openened as normal.

The source file is the queried for conversion options via bdrv_get_conversion_options. The conversion
options contain things like the size of the clusters, the type of encryption etc.

The target image is then opened with bdrv_open_conversion_target, passing the conversion optionons
among other things allong with it. This is basically a hybrid of bdrv_open and bdrv_create.

Mappings are then fetched and set using bdrv_get_mapping and bdrv_map respectively. They both deal 
with data in the format guest_offset, host_offset, and contiguous_bytes. For example if 
guest_offset = 31, host_offset = 41, and contiguous_bytes = 59 that would mean that offset 31 in the
virtual disk would be located at offset 41 in the image file and 32 at 42 and so on up to 89 at 99.

At the end of the mapping process the image is "finalized" with bdrv_copy_header, where the target
driver copies out the old header to a temporary file, and then writes out its own header into the 
image.

I've integerated inplace conversion into qemu-img in the form: 
qemu-img convert-inplace <imagefile> <target_format>

I've also integrated bdrv_get_mapping and bdrv_map into qemu-io (with the former replacing qemu-io's
internal mapping when then block driver supports it) 

Devin Nakamura (24):
  block: add block conversion api
  block: add bdrv_get_conversion_options()
  block: add bdrv_open_conversion_target()
  block: add bdrv_get_mapping()
  block: add bdrv_map()
  block: add bdrv_copy_header()
  qed: make qed_alloc_clusters round up offset to nearest cluster
  qed: add qed_find_cluster_sync()
  qed: add qed_bdrv_get_mapping()
  qed: add qed_bdrv_map()
  qed: add open_conversion_target()
  qed: add bdrv_qed_copy_header()
  qed: add bdrv_qed_get_conversion_options()
  qcow2: fix typo in documentation for qcow2_get_cluster_offset()
  qcow2: split up the creation of new refcount table from the act of
    checking it
  qcow2: add qcow2_drop_leaked_clusters()
  qcow2: add qcow2_get_mapping
  qcow2: add qcow2_map
  qcow2: add qcow2_copy_header()
  qcow2: add get_conversion_options()
  qcow2: add qcow2_open_conversion_target()
  qemu-io: make map command use new block mapping function
  qemu-io: add setmap command
  qemu-img: add inplace conversion to qemu-img

 Makefile               |    2 +
 block.c                |  100 +++++++++++++++++++++
 block.h                |   14 +++
 block/qcow2-cluster.c  |   53 +++++++++++-
 block/qcow2-refcount.c |   71 +++++++++++++--
 block/qcow2.c          |  233 ++++++++++++++++++++++++++++++++++++++++++++++++
 block/qcow2.h          |    5 +
 block/qed-cluster.c    |   35 +++++++
 block/qed.c            |  193 ++++++++++++++++++++++++++++++++++++---
 block/qed.h            |    4 +
 block_int.h            |   88 ++++++++++++++++++
 qemu-img-cmds.hx       |    6 ++
 qemu-img.c             |   64 +++++++++++++
 qemu-io.c              |   47 ++++++++++-
 14 files changed, 888 insertions(+), 27 deletions(-)

-- 
1.7.6.rc1

^ permalink raw reply	[flat|nested] 42+ messages in thread

end of thread, other threads:[~2011-08-02  9:22 UTC | newest]

Thread overview: 42+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-07-29  4:49 [Qemu-devel] [RFC 00/24] inplace image conversion Devin Nakamura
2011-07-29  4:49 ` [Qemu-devel] [RFC 01/24] block: add block conversion api Devin Nakamura
2011-08-01 13:34   ` Kevin Wolf
2011-08-02  4:43     ` Devin Nakamura
2011-08-02  8:56   ` Stefan Hajnoczi
2011-08-02  9:24     ` Kevin Wolf
2011-07-29  4:49 ` [Qemu-devel] [RFC 02/24] block: add bdrv_get_conversion_options() Devin Nakamura
2011-07-29  4:49 ` [Qemu-devel] [RFC 03/24] block: add bdrv_open_conversion_target() Devin Nakamura
2011-08-01 13:42   ` Kevin Wolf
2011-08-02  8:57   ` Stefan Hajnoczi
2011-07-29  4:49 ` [Qemu-devel] [RFC 04/24] block: add bdrv_get_mapping() Devin Nakamura
2011-08-02  8:58   ` Stefan Hajnoczi
2011-07-29  4:49 ` [Qemu-devel] [RFC 05/24] block: add bdrv_map() Devin Nakamura
2011-07-29  4:49 ` [Qemu-devel] [RFC 06/24] block: add bdrv_copy_header() Devin Nakamura
2011-07-29  4:49 ` [Qemu-devel] [RFC 07/24] qed: make qed_alloc_clusters round up offset to nearest cluster Devin Nakamura
2011-08-01 13:51   ` Kevin Wolf
2011-07-29  4:49 ` [Qemu-devel] [RFC 08/24] qed: add qed_find_cluster_sync() Devin Nakamura
2011-07-29  4:49 ` [Qemu-devel] [RFC 09/24] qed: add qed_bdrv_get_mapping() Devin Nakamura
2011-08-02  8:59   ` Stefan Hajnoczi
2011-07-29  4:49 ` [Qemu-devel] [RFC 10/24] qed: add qed_bdrv_map() Devin Nakamura
2011-07-29  4:49 ` [Qemu-devel] [RFC 11/24] qed: add open_conversion_target() Devin Nakamura
2011-07-29  4:49 ` [Qemu-devel] [RFC 12/24] qed: add bdrv_qed_copy_header() Devin Nakamura
2011-07-29  4:49 ` [Qemu-devel] [RFC 13/24] qed: add bdrv_qed_get_conversion_options() Devin Nakamura
2011-07-29  4:49 ` [Qemu-devel] [RFC 14/24] qcow2: fix typo in documentation for qcow2_get_cluster_offset() Devin Nakamura
2011-07-29  4:49 ` [Qemu-devel] [RFC 15/24] qcow2: split up the creation of new refcount table from the act of checking it Devin Nakamura
2011-07-29  4:49 ` [Qemu-devel] [RFC 16/24] qcow2: add qcow2_drop_leaked_clusters() Devin Nakamura
2011-08-01 14:18   ` Kevin Wolf
2011-07-29  4:49 ` [Qemu-devel] [RFC 17/24] qcow2: add qcow2_get_mapping Devin Nakamura
2011-07-29  4:49 ` [Qemu-devel] [RFC 18/24] qcow2: add qcow2_map Devin Nakamura
2011-08-01 14:32   ` Kevin Wolf
     [not found]     ` <CAJ1AwB5ohCMOeSgcUKpKHbqGuK8Eioq5dr-z+a6+vGzdMrJJ6w@mail.gmail.com>
2011-08-02  8:05       ` Kevin Wolf
2011-07-29  4:49 ` [Qemu-devel] [RFC 19/24] qcow2: add qcow2_copy_header() Devin Nakamura
2011-08-01 14:57   ` Kevin Wolf
2011-07-29  4:49 ` [Qemu-devel] [RFC 20/24] qcow2: add get_conversion_options() Devin Nakamura
2011-07-29  4:49 ` [Qemu-devel] [RFC 21/24] qcow2: add qcow2_open_conversion_target() Devin Nakamura
2011-08-01 15:26   ` Kevin Wolf
2011-08-02  4:37     ` Devin Nakamura
2011-07-29  4:49 ` [Qemu-devel] [RFC 22/24] qemu-io: make map command use new block mapping function Devin Nakamura
2011-08-01 15:38   ` Kevin Wolf
2011-08-02  4:02     ` Devin Nakamura
2011-07-29  4:49 ` [Qemu-devel] [RFC 23/24] qemu-io: add setmap command Devin Nakamura
2011-07-29  4:49 ` [Qemu-devel] [RFC 24/24] qemu-img: add inplace conversion to qemu-img Devin Nakamura

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).