root / docs / live-block-ops.txt @ f53ec699
History | View | Annotate | Download (1.8 kB)
1 |
LIVE BLOCK OPERATIONS |
---|---|
2 |
===================== |
3 |
|
4 |
High level description of live block operations. Note these are not |
5 |
supported for use with the raw format at the moment. |
6 |
|
7 |
Snapshot live merge |
8 |
=================== |
9 |
|
10 |
Given a snapshot chain, described in this document in the following |
11 |
format: |
12 |
|
13 |
[A] -> [B] -> [C] -> [D] |
14 |
|
15 |
Where the rightmost object ([D] in the example) described is the current |
16 |
image which the guest OS has write access to. To the left of it is its base |
17 |
image, and so on accordingly until the leftmost image, which has no |
18 |
base. |
19 |
|
20 |
The snapshot live merge operation transforms such a chain into a |
21 |
smaller one with fewer elements, such as this transformation relative |
22 |
to the first example: |
23 |
|
24 |
[A] -> [D] |
25 |
|
26 |
Currently only forward merge with target being the active image is |
27 |
supported, that is, data copy is performed in the right direction with |
28 |
destination being the rightmost image. |
29 |
|
30 |
The operation is implemented in QEMU through image streaming facilities. |
31 |
|
32 |
The basic idea is to execute 'block_stream virtio0' while the guest is |
33 |
running. Progress can be monitored using 'info block-jobs'. When the |
34 |
streaming operation completes it raises a QMP event. 'block_stream' |
35 |
copies data from the backing file(s) into the active image. When finished, |
36 |
it adjusts the backing file pointer. |
37 |
|
38 |
The 'base' parameter specifies an image which data need not be streamed from. |
39 |
This image will be used as the backing file for the active image when the |
40 |
operation is finished. |
41 |
|
42 |
In the example above, the command would be: |
43 |
|
44 |
(qemu) block_stream virtio0 A |
45 |
|
46 |
|
47 |
Live block copy |
48 |
=============== |
49 |
|
50 |
To copy an in use image to another destination in the filesystem, one |
51 |
should create a live snapshot in the desired destination, then stream |
52 |
into that image. Example: |
53 |
|
54 |
(qemu) snapshot_blkdev ide0-hd0 /new-path/disk.img qcow2 |
55 |
|
56 |
(qemu) block_stream ide0-hd0 |
57 |
|
58 |
|