mirror of
https://github.com/qemu/qemu.git
synced 2024-11-23 19:03:38 +08:00
blockdev-backup: added support for data compression
The idea is simple - backup is "written-once" data. It is written block by block and it is large enough. It would be nice to save storage space and compress it. Signed-off-by: Pavel Butsykin <pbutsykin@virtuozzo.com> Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com> Signed-off-by: Denis V. Lunev <den@openvz.org> CC: Jeff Cody <jcody@redhat.com> CC: Markus Armbruster <armbru@redhat.com> CC: Eric Blake <eblake@redhat.com> CC: John Snow <jsnow@redhat.com> CC: Stefan Hajnoczi <stefanha@redhat.com> CC: Kevin Wolf <kwolf@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
13b9414b57
commit
3b7b123659
@ -3254,6 +3254,9 @@ void do_blockdev_backup(BlockdevBackup *backup, BlockJobTxn *txn, Error **errp)
|
||||
if (!backup->has_job_id) {
|
||||
backup->job_id = NULL;
|
||||
}
|
||||
if (!backup->has_compress) {
|
||||
backup->compress = false;
|
||||
}
|
||||
|
||||
bs = qmp_get_root_bs(backup->device, errp);
|
||||
if (!bs) {
|
||||
@ -3280,8 +3283,8 @@ void do_blockdev_backup(BlockdevBackup *backup, BlockJobTxn *txn, Error **errp)
|
||||
}
|
||||
}
|
||||
backup_start(backup->job_id, bs, target_bs, backup->speed, backup->sync,
|
||||
NULL, false, backup->on_source_error, backup->on_target_error,
|
||||
block_job_cb, bs, txn, &local_err);
|
||||
NULL, backup->compress, backup->on_source_error,
|
||||
backup->on_target_error, block_job_cb, bs, txn, &local_err);
|
||||
if (local_err != NULL) {
|
||||
error_propagate(errp, local_err);
|
||||
}
|
||||
|
@ -939,6 +939,9 @@
|
||||
# @speed: #optional the maximum speed, in bytes per second. The default is 0,
|
||||
# for unlimited.
|
||||
#
|
||||
# @compress: #optional true to compress data, if the target format supports it.
|
||||
# (default: false) (since 2.7)
|
||||
#
|
||||
# @on-source-error: #optional 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 (see BlockInfo).
|
||||
@ -957,6 +960,7 @@
|
||||
'data': { '*job-id': 'str', 'device': 'str', 'target': 'str',
|
||||
'sync': 'MirrorSyncMode',
|
||||
'*speed': 'int',
|
||||
'*compress': 'bool',
|
||||
'*on-source-error': 'BlockdevOnError',
|
||||
'*on-target-error': 'BlockdevOnError' } }
|
||||
|
||||
|
@ -1275,7 +1275,7 @@ EQMP
|
||||
|
||||
{
|
||||
.name = "blockdev-backup",
|
||||
.args_type = "job-id:s?,sync:s,device:B,target:B,speed:i?,"
|
||||
.args_type = "job-id:s?,sync:s,device:B,target:B,speed:i?,compress:b?,"
|
||||
"on-source-error:s?,on-target-error:s?",
|
||||
.mhandler.cmd_new = qmp_marshal_blockdev_backup,
|
||||
},
|
||||
@ -1299,6 +1299,8 @@ Arguments:
|
||||
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)
|
||||
- "compress": true to compress data, if the target format supports it.
|
||||
(json-bool, optional, default false)
|
||||
- "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.
|
||||
|
Loading…
Reference in New Issue
Block a user