qmp: Add command 'blockdev-backup'

Similar to drive-backup, but this command uses a device id as target
instead of creating/opening an image file.

Also add blocker on target bs, since the target is also a named device
now.

Add check and report error for bs == target which became possible but is
an illegal case with introduction of blockdev-backup.

Signed-off-by: Fam Zheng <famz@redhat.com>
Reviewed-by: Max Reitz <mreitz@redhat.com>
Reviewed-by: John Snow <jsnow@redhat.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
Message-id: 1418899027-8445-3-git-send-email-famz@redhat.com
Signed-off-by: Max Reitz <mreitz@redhat.com>
This commit is contained in:
Fam Zheng 2014-12-18 18:37:05 +08:00 committed by Stefan Hajnoczi
parent b7b9d39a7a
commit c29c1dd312
4 changed files with 178 additions and 0 deletions

View file

@ -1094,6 +1094,48 @@ Example:
"sync": "full",
"target": "backup.img" } }
<- { "return": {} }
EQMP
{
.name = "blockdev-backup",
.args_type = "sync:s,device:B,target:B,speed:i?,"
"on-source-error:s?,on-target-error:s?",
.mhandler.cmd_new = qmp_marshal_input_blockdev_backup,
},
SQMP
blockdev-backup
---------------
The device version of drive-backup: this command takes an existing named device
as backup target.
Arguments:
- "device": the name of the device which should be copied.
(json-string)
- "target": the name of the backup target device. (json-string)
- "sync": what parts of the disk image should be copied to the destination;
possibilities include "full" for all the disk, "top" for only the
sectors allocated in the topmost image, or "none" to only replicate
new I/O (MirrorSyncMode).
- "speed": the maximum speed, in bytes per second (json-int, optional)
- "on-source-error": the action to take on an error on the source, default
'report'. 'stop' and 'enospc' can only be used
if the block device supports io-status.
(BlockdevOnError, optional)
- "on-target-error": the action to take on an error on the target, default
'report' (no limitations, since this applies to
a different block device than device).
(BlockdevOnError, optional)
Example:
-> { "execute": "blockdev-backup", "arguments": { "device": "src-id",
"sync": "full",
"target": "tgt-id" } }
<- { "return": {} }
EQMP
{