to create a new, actively recording persistent bitmap:
- .. code:: json
+ .. code-block:: QMP
-> { "execute": "block-dirty-bitmap-add",
"arguments": {
To create a new, disabled (``-recording``), transient bitmap that tracks
changes in 32KiB segments:
- .. code:: json
+ .. code-block:: QMP
-> { "execute": "block-dirty-bitmap-add",
"arguments": {
Remove a bitmap named ``bitmap0`` from node ``drive0``:
- .. code:: json
+ .. code-block:: QMP
-> { "execute": "block-dirty-bitmap-remove",
"arguments": {
Clear all dirty bits from bitmap ``bitmap0`` on node ``drive0``:
- .. code:: json
+ .. code-block:: QMP
-> { "execute": "block-dirty-bitmap-clear",
"arguments": {
To set ``+recording`` on bitmap ``bitmap0`` on node ``drive0``:
- .. code:: json
+ .. code-block:: QMP
-> { "execute": "block-dirty-bitmap-enable",
"arguments": {
To set ``-recording`` on bitmap ``bitmap0`` on node ``drive0``:
- .. code:: json
+ .. code-block:: QMP
-> { "execute": "block-dirty-bitmap-disable",
"arguments": {
``drive0``. If ``new_bitmap`` was empty prior to this command, this achieves
a copy.
- .. code:: json
+ .. code-block:: QMP
-> { "execute": "block-dirty-bitmap-merge",
"arguments": {
API. This result highlights a bitmap ``bitmap0`` attached to the root node of
device ``drive0``.
- .. code:: json
+ .. code-block:: QMP
-> {
"execute": "query-block",
destination. These writes will be recorded in the bitmap
accordingly.
-.. code:: json
+.. code-block:: QMP
-> {
"execute": "transaction",
If we want to start a new backup chain with an existing bitmap, we can also
use a transaction to reset the bitmap while making a new full backup:
-.. code:: json
+.. code-block:: QMP
-> {
"execute": "transaction",
#. Issue an incremental backup command:
- .. code:: json
+ .. code-block:: QMP
-> {
"execute": "drive-backup",
#. Issue a new incremental backup command. The only difference here is that we
have changed the target image below.
- .. code:: json
+ .. code-block:: QMP
-> {
"execute": "drive-backup",
#. Issue a new incremental backup command. Apart from the new destination
image, there is no difference from the last two examples.
- .. code:: json
+ .. code-block:: QMP
-> {
"execute": "drive-backup",
#. Create a full (anchor) backup for each drive, with accompanying bitmaps:
- .. code:: json
+ .. code-block:: QMP
-> {
"execute": "transaction",
#. Issue a multi-drive incremental push backup transaction:
- .. code:: json
+ .. code-block:: QMP
-> {
"execute": "transaction",
#. Attempt to create an incremental backup via QMP:
- .. code:: json
+ .. code-block:: QMP
-> {
"execute": "drive-backup",
#. Receive a pair of events indicating failure:
- .. code:: json
+ .. code-block:: QMP
<- {
"timestamp": {...},
#. Retry the command after fixing the underlying problem, such as
freeing up space on the backup volume:
- .. code:: json
+ .. code-block:: QMP
-> {
"execute": "drive-backup",
#. Receive confirmation that the job completed successfully:
- .. code:: json
+ .. code-block:: QMP
<- {
"timestamp": {...},
#. Issue the transaction to start a backup of both drives.
- .. code:: json
+ .. code-block:: QMP
-> {
"execute": "transaction",
#. Receive notice that the Transaction was accepted, and jobs were
launched:
- .. code:: json
+ .. code-block:: QMP
<- { "return": {} }
#. Receive notice that the first job has completed:
- .. code:: json
+ .. code-block:: QMP
<- {
"timestamp": {...},
#. Receive notice that the second job has failed:
- .. code:: json
+ .. code-block:: QMP
<- {
"timestamp": {...},
#. Issue the multi-drive incremental backup transaction:
- .. code:: json
+ .. code-block:: QMP
-> {
"execute": "transaction",
#. Receive notice that the Transaction was accepted, and jobs were launched:
- .. code:: json
+ .. code-block:: QMP
<- { "return": {} }
#. Receive notification that the backup job for ``drive1`` has failed:
- .. code:: json
+ .. code-block:: QMP
<- {
"timestamp": {...},
#. Receive notification that the job for ``drive0`` has been cancelled:
- .. code:: json
+ .. code-block:: QMP
<- {
"timestamp": {...},