[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC] Incremental live backup with in memory dirty bitmap
From: |
Fam Zheng |
Subject: |
[Qemu-devel] [RFC] Incremental live backup with in memory dirty bitmap |
Date: |
Mon, 25 Nov 2013 17:59:12 +0800 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.1.1 |
Hi all,
This is an idea about allowing online incremental backup of block
device, with drive-backup and (proposed here) in-memory block dirty bitmap:
1. We enable a dirty bitmap on a block device, at the start point of
write tracking:
(QMP) dirty-bitmap-add device=foo name=bitmap0 granularity=4k
Since now, all the writes to "foo" will mark dirty bits on it.
2.1 Later, when the user wants to export all the dirty data, one
possible approach is using image fleecing:
# step a. prepare the image fleecing target
(QMP) blockdev-add backing=foo file.filename=backup.qcow2 id=backup0
if=none driver=qcow2
# step b. stop the dirty bitmap and start backup job. These two steps
need to be in a transaction, so the exported data matches the exported
dirty bitmap
(QMP) transaction:
dirty-bitmap-stop device=foo name=bitmap0
blockdev-backup device=foo sync=none target=backup0
# step c. export the snapshot:
(QMP) nbd-server-add device=backup0
# step d. export the dirty bitmap as well, so the management
application can access it and decide what sectors to backup
(QMP) dirty-bitmap-nbd-add device=foo name=bitmap0
Now the management application can connect to both dirty bitmap target
and image fleecing target, and read whatever data it is interested in.
The tricky part is to export the dirty bitmap through NBD, but it may
also be useful for persistent the in-memory dirty bitmap too.
2.2 Alternatively, we can avoid exporting the dirty bitmap through NBD,
by adding another sync mode "dirty" to drive-backup, and change step b to:
# step b. stop the dirty bitmap and start backup job with the dirty
bitmap
(QMP) transaction:
dirty-bitmap-stop device=foo name=bitmap0
blockdev-backup device=foo sync=dirty bitmap=bitmap0
target=backup0
With the "dirty" sync mode, drive-backup/blockdev-backup takes a dirty
bitmap name of the device and writes only dirty data to target.
Note that NBD is not necessary for backup, we can use "drive-backup" and
omit step c as well. Also, the target could be an NBD server, in which
case we will directly send new data to a remote NBD target. This part is
fully flexible.
Summary: what we are missing are the dirty bitmap interfaces to
add/stop/remove/query/export it and it's support of transaction, depends
on how we want to use it. E.g. for continuity of the incremental
tracking, the transaction could be:
(QMP) transaction:
dirty-bitmap-stop device=foo name=bitmap0
dirty-bitmap-add device=foo name=bitmap1 # Start a new
bitmap atomically
blockdev-backup device=foo sync=dirty bitmap=bitmap0
target=backup0
And the last command is to free the no longer used dirty bitmap:
(QMP) dirty-bitmap-remove device=foo name=bitmap0
So, do these sound good/useful at all? Any comment is welcome!
Thanks,
Fam
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Qemu-devel] [RFC] Incremental live backup with in memory dirty bitmap,
Fam Zheng <=