Hi,
Here are a few tests I've done over the weekend to test blockcommit w/ Eric's
block commit
patches:
-
https://www.redhat.com/archives/libvir-list/2012-October/msg00091.html
-
https://www.redhat.com/archives/libvir-list/2012-October/msg00091.html
Most of these are from an earlier disscussion from Eric.
(1) (POSITIVE-TEST) Commit data from 3 backing image files into 'base' (top to
base)
using blockcommit, w/ base & resulting overlays as qcow2:
actual state: [base] <-- [snap-1] <-- [snap-2] <-- [snap3] <-- [active-layer]
desired state: [base] <-- [act-f17-base.qcow2]
(resulting in invalidating snap1, snap2, snap3)
#======================#
[root@moon libvirt]# virsh blockcommit --domain f17-base vda --wait --base
/export/vmimgs2/f17-base.qcow2 --top /export/vmimgs2/snap3-f17-base.qcow2 --verbose
Block Commit: [100 %]
Commit complete
[root@moon libvirt]#
#======================#
[root@moon ~]# qemu-img info /export/vmimgs2/act-f17-base.qcow2
image: /export/vmimgs2/act-f17-base.qcow2
file format: qcow2
virtual size: 2.0G (2147483648 bytes)
disk size: 648K
cluster_size: 65536
backing file: /export/vmimgs2/f17-base.qcow2
[root@moon ~]#
#======================#
(2) (POSITIVE-TEST) Commit data from 2 backing image files into 'base' (top to
base)
using blockcommit, w/ base as raw & resulting overlays as qcow2:
actual state: [base] <-- [snap-1] <-- [snap-2] <-- [snap3] <-- [active-layer]
desired state: [base] <--- [snap-3] <--- [active-layer]
(resulting in invalidating snap1, snap2)
#======================#
[root@moon qemu]# virsh blockcommit --domain test-f17base vda --wait --base
/var/lib/libvirt/images/snap1-of-test-f17base.qcow2 --top /var/lib/
libvirt/images/snap3-of-test-f17base.qcow2 --verbose
Block Commit: [100 %]
Commit complete
[root@moon qemu]#
#======================#
[root@moon qemu]# qemu-img info /var/lib/libvirt/images/snap4-of-test-f17base.qcow2
image: /var/lib/libvirt/images/snap4-of-test-f17base.qcow2
file format: qcow2
virtual size: 1.0G (1073741824 bytes)
disk size: 2.3M
cluster_size: 65536
backing file: /var/lib/libvirt/images/snap1-of-test-f17base.qcow2
[root@moon qemu]#
#======================#
(3) (NEGATIVE-TEST) Try blockcommit to a base image which is a 'raw' device
- Question: I assume the below is expected, right? We cannot do blockcommit into a
NON-qcow2 base file?
#======================#
[root@moon qemu]# virsh blockcommit --domain raw-base vda --wait --base
/export/vmimgs2/raw-base.img --top /var/lib/libvirt/images/snap3-b-raw-base.qcow2
--verbose
error: internal error unable to execute QEMU command 'block-commit': Could not
open
'/export/vmimgs2/raw-base.img'
[root@moon qemu]#
#======================#
(4) (NEGATIVE-TEST) Try blockcommit while the guest is 'offline'
#======================#
[root@moon qemu]# virsh blockcommit --domain test-f17base vda --wait --base
/var/lib/libvirt/images/snap1-of-test-f17-base.qcow2 --top
/var/lib/libvirt/images/snap3-of-test-f17-base.qcow2 --verbose
error: Requested operation is not valid: domain is not running
#======================#
(5) (NEGATIVE-TEST) Provide a non-existent file path for base or top(and both)
#======================#
[root@moon qemu]# virsh blockcommit --domain test-f17base vda --wait --base
/var/lib/libvirt/images/snap1-of-test-f17base.qcow2 --top
/var/lib/libvirt/images/snap3-of--f17base.qcow2 --verbose
error: internal error unable to execute QEMU command 'block-commit': Top image
file
/var/lib/libvirt/images/snap3-of--f17base.qcow2 not found
#======================#
[root@moon qemu]# virsh blockcommit --domain test-f17base vda --wait --base
/var/lib/libvirt/images/snap1-of--f17base.qcow2 --top
/var/lib/libvirt/images/snap3-of-test-f17base.qcow2 --verbose
error: internal error unable to execute QEMU command 'block-commit': Base
'/var/lib/libvirt/images/snap1-of--f17base.qcow2' not found
#======================#
[root@moon qemu]# virsh blockcommit --domain test-f17base vda --wait --base
/var/lib/libvirt/images/snap1-of--f17base.qcow2 --top
/var/lib/libvirt/images/snap3-of--f17base.qcow2 --verbose
error: internal error unable to execute QEMU command 'block-commit': Base
'/var/lib/libvirt/images/snap1-of--f17base.qcow2' not found
#======================#
(6) (NEGATIVE-TEST) Provide --base & --top values out of order:
#======================#
[root@moon qemu]# virsh blockcommit --domain test-f17base vda --wait --base
/var/lib/libvirt/images/snap3-of-test-f17base.qcow2 --top
/var/lib/libvirt/images/snap1-of-test-f17base.qcow2 --verbose
error: internal error unable to execute QEMU command 'block-commit': Base
'/var/lib/libvirt/images/snap3-of-test-f17base.qcow2' not found
[root@moon qemu]#
#======================#
NOTES:
-----
(a) To quickly check differences between the snapshot image files, I added a text file in
each of the snapshot images, just before taking a snapshot. And, when I do a commit
operation, I just check w/ 'guestfish' on the relevant disk image if all the
expected
content reflect.
$ guestfish --ro -i -a /export/vmimgs2/f17-base.qcow2
Welcome to guestfish, the libguestfs filesystem interactive shell for
editing virtual machine filesystems.
Type: 'help' for help on commands
'man' to read the manual
'quit' to quit the shell
Operating system: Fedora release 17 (Beefy Miracle)
/dev/sda1 mounted on /
<fs> ls /export
file2.txt
file3.txt
file4.txt
<fs>
Is there a simpler way?
(b) The snapshot-create command I use is something like below:
# virsh snapshot-create-as --domain raw-base snap4 snap4-desc --disk-only --diskspec
vda,snapshot=external,file=/var/lib/libvirt/images/snap4-b-raw-base.qcow2 --atomic
Question:
At this point in time, I guess 'snapshot-revert' command is not uhelpful for any
practical
purposes while dealing with external snapshots,right?
- To rephrase, is there a way(in future?),a coherent way to use 'blockcommit'(or
blockpull) in conjunction with 'snapshot-revert' command?
Yet to test:
(1) Use a raw block device(LVM, or direct block /dev/sda1) as backing file
(2) Try testing the case of a backing file smaller than the top file being
committed ( with data located at various offsets)
+ In-progress: I'm testing this by adding a 'virsh attach-device'
Thanks
--
/kashyap