Block replication is a very important feature which is used for continuous checkpoints(for example: COLO).
You can the detailed information about block replication from here: http://wiki.qemu.org/Features/BlockReplication Usage: Please refer to docs/block-replication.txt You can get the patch here: https://github.com/coloft/qemu/tree/wency/block-replication-v9 You can get the patch with framework here: https://github.com/coloft/qemu/commits/colo-v2.0-periodic-mode TODO: 1. Continuous block replication. It will be started after basic functions are accepted. Changs Log: V9: 1. Update the error messages 2. Rebase to the newest qemu 3. Split child add/delete support. These patches are sent in another patchset. V8: 1. Address Alberto Garcia's comments V7: 1. Implement adding/removing quorum child. Remove the option non-connect. 2. Simplify the backing refrence option according to Stefan Hajnoczi's suggestion V6: 1. Rebase to the newest qemu. V5: 1. Address the comments from Gong Lei 2. Speed the failover up. The secondary vm can take over very quickly even if there are too many I/O requests. V4: 1. Introduce a new driver replication to avoid touch nbd and qcow2. V3: 1: use error_setg() instead of error_set() 2. Add a new block job API 3. Active disk, hidden disk and nbd target uses the same AioContext 4. Add a testcase to test new hbitmap API V2: 1. Redesign the secondary qemu(use image-fleecing) 2. Use Error objects to return error message 3. Address the comments from Max Reitz and Eric Blake Wen Congyang (16): introduce a new API to enable/disable attach device model introduce a new API to check if blk is attached allow writing to the backing file block: Allow references for backing files introduce a new API qemu_opts_absorb_qdict_by_index() quorum: allow ignoring child errors Backup: clear all bitmap when doing block checkpoint block: make bdrv_put_ref_bh_schedule() as a public API Allow creating backup jobs when opening BDS docs: block replication's description Add new block driver interfaces to control block replication skip nbd_target when starting block replication quorum: implement block driver interfaces for block replication Implement new driver for block replication support replication driver in blockdev-add Add a new API to start/stop replication, do checkpoint to all BDSes block.c | 230 +++++++++++++++++++- block/Makefile.objs | 3 +- block/backup.c | 14 ++ block/block-backend.c | 33 +++ block/quorum.c | 171 ++++++++++++++- block/replication.c | 471 +++++++++++++++++++++++++++++++++++++++++ blockdev.c | 37 +--- blockjob.c | 11 + docs/block-replication.txt | 183 ++++++++++++++++ include/block/block.h | 11 + include/block/block_int.h | 14 ++ include/block/blockjob.h | 12 ++ include/qemu/option.h | 2 + include/sysemu/block-backend.h | 3 + qapi/block-core.json | 43 +++- util/qemu-option.c | 44 ++++ 16 files changed, 1234 insertions(+), 48 deletions(-) create mode 100644 block/replication.c create mode 100644 docs/block-replication.txt -- 2.4.3