Commit 3b7b1236 authored by Pavel Butsykin's avatar Pavel Butsykin Committed by Kevin Wolf
Browse files

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: default avatarPavel Butsykin <pbutsykin@virtuozzo.com>
Reviewed-by: default avatarStefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: default avatarDenis 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: default avatarKevin Wolf <kwolf@redhat.com>
parent 13b9414b
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -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);
    }
+4 −0
Original line number Diff line number Diff line
@@ -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' } }

+3 −1
Original line number Diff line number Diff line
@@ -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.