list all the block devices associated with the guest
$ virsh domblklist testvm --detailsType Device Target Source------------------------------------------------file disk vda /export/vmimgs/testvm.qcow2
let’s create a snapshot(disk-only) of the guest
$ virsh snapshot-create-as testvm snap1-testvm "snap1 description" \ --diskspec vda,file=/export/vmimgs/snap1-testvm.qcow2 \ --disk-only --atomic
– ‘–atomic’ just ensures either the snapshot is run completely or fails w/o making any changes
$ qemu-img info /export/vmimgs/snap1-testvm.qcow2 image: /export/vmimgs/snap1-testvm.qcow2file format: qcow2virtual size: 20G (21474836480 bytes)disk size: 2.5Mcluster_size: 65536backing file: /export/vmimgs/testvm.qcow2$
created 2 more snapshots
$ virsh snapshot-list testvm --treesnap1-testvm | +- snap2-testvm | +- snap3-testvm
image file chain[ base<-snap1<-snap2<-snap3 ]:
#--------------------------------------------#$ qemu-img info /export/vmimgs/snap3-testvm.qcow2image: /export/vmimgs/snap3-testvm.qcow2file format: qcow2virtual size: 20G (21474836480 bytes)disk size: 129Mcluster_size: 65536backing file: /export/vmimgs/snap2-testvm.qcow2#--------------------------------------------#$ qemu-img info /export/vmimgs/snap2-testvm.qcow2image: /export/vmimgs/snap2-testvm.qcow2file format: qcow2virtual size: 20G (21474836480 bytes)disk size: 3.6Mcluster_size: 65536backing file: /export/vmimgs/snap1-testvm.qcow2#--------------------------------------------#$ qemu-img info /export/vmimgs/snap1-testvm.qcow2image: /export/vmimgs/snap1-testvm.qcow2file format: qcow2virtual size: 20G (21474836480 bytes)disk size: 2.5Mcluster_size: 65536backing file: /export/vmimgs/testvm.qcow2$#--------------------------------------------#
Now, if we do not need snap2 any more, and want to pull all the data from snap1 into snap3, making snap1 as snap3’s backing file, we can do a virsh blockpulloperation as below:
$ virsh blockpull --domain testvm \ --path /export/vmimgs/snap3-testvm.qcow2 \ --base /export/vmimgs/snap1-testvm.qcow2 \ --wait --verboseBlock Pull: [100 %]Pull complete
可以看到snap3的backup为snap1
$ qemu-img info /export/vmimgs/snap3-testvm.qcow2image: /export/vmimgs/snap3-testvm.qcow2file format: qcow2virtual size: 20G (21474836480 bytes)disk size: 145Mcluster_size: 65536backing file: /export/vmimgs/snap1-testvm.qcow2
但snapshot-list 仍显示snap2
$ virsh snapshot-list testvm --treesnap1-testvm | +- snap2-testvm | +- snap3-testvm
所以仍可以恢复为
base <- snap123
External disk-snapshots(live) using RAW as original image:
源disk image 不变为raw,而snapshot为qcow2
internal snapshots会导致源disk image变成qcow2