 1029641bef
			
		
	
	
		1029641bef
		
	
	
	
	
		
			
			Signed-off-by: Alberto Garcia <berto@igalia.com> Reviewed-by: Kevin Wolf <kwolf@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
		
			
				
	
	
		
			73 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			73 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| LIVE BLOCK OPERATIONS
 | |
| =====================
 | |
| 
 | |
| High level description of live block operations. Note these are not
 | |
| supported for use with the raw format at the moment.
 | |
| 
 | |
| Note also that this document is incomplete and it currently only
 | |
| covers the 'stream' operation. Other operations supported by QEMU such
 | |
| as 'commit', 'mirror' and 'backup' are not described here yet. Please
 | |
| refer to the qapi/block-core.json file for an overview of those.
 | |
| 
 | |
| Snapshot live merge
 | |
| ===================
 | |
| 
 | |
| Given a snapshot chain, described in this document in the following
 | |
| format:
 | |
| 
 | |
| [A] <- [B] <- [C] <- [D] <- [E]
 | |
| 
 | |
| Where the rightmost object ([E] 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] <- [E]
 | |
| 
 | |
| Data is copied in the right direction with destination being the
 | |
| rightmost image, but any other intermediate image can be specified
 | |
| instead. In this example data is copied from [C] into [D], so [D] can
 | |
| be backed by [B]:
 | |
| 
 | |
| [A] <- [B] <- [D] <- [E]
 | |
| 
 | |
| 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
 | |
| destination image when the operation is finished.
 | |
| 
 | |
| In the first example above, the command would be:
 | |
| 
 | |
| (qemu) block_stream virtio0 file-A.img
 | |
| 
 | |
| In order to specify a destination image different from the active
 | |
| (rightmost) one we can use its node name instead.
 | |
| 
 | |
| In the second example above, the command would be:
 | |
| 
 | |
| (qemu) block_stream node-D file-B.img
 | |
| 
 | |
| 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
 | |
| 
 | |
| 
 |