| LIVE BLOCK OPERATIONS |
| ===================== |
| |
| High level description of live block operations. Note these are not |
| supported for use with the raw format at the moment. |
| |
| Snapshot live merge |
| =================== |
| |
| Given a snapshot chain, described in this document in the following |
| format: |
| |
| [A] -> [B] -> [C] -> [D] |
| |
| Where the rightmost object ([D] in the example) described is the current |
| image which the guest OS has write access to. To the left of it is its base |
| image, and so on accordingly until the leftmost image, which has no |
| base. |
| |
| The snapshot live merge operation transforms such a chain into a |
| smaller one with fewer elements, such as this transformation relative |
| to the first example: |
| |
| [A] -> [D] |
| |
| Currently only forward merge with target being the active image is |
| supported, that is, data copy is performed in the right direction with |
| destination being the rightmost image. |
| |
| The operation is implemented in QEMU through image streaming facilities. |
| |
| The basic idea is to execute 'block_stream virtio0' while the guest is |
| running. Progress can be monitored using 'info block-jobs'. When the |
| streaming operation completes it raises a QMP event. 'block_stream' |
| copies data from the backing file(s) into the active image. When finished, |
| it adjusts the backing file pointer. |
| |
| The 'base' parameter specifies an image which data need not be streamed from. |
| This image will be used as the backing file for the active image when the |
| operation is finished. |
| |
| In the example above, the command would be: |
| |
| (qemu) block_stream virtio0 A |
| |
| |
| Live block copy |
| =============== |
| |
| To copy an in use image to another destination in the filesystem, one |
| should create a live snapshot in the desired destination, then stream |
| into that image. Example: |
| |
| (qemu) snapshot_blkdev ide0-hd0 /new-path/disk.img qcow2 |
| |
| (qemu) block_stream ide0-hd0 |
| |
| |