[TEST-1] actual state: [base] <- [sn1] <- [sn2] <- [sn3] <- [sn4] (this is 'active') (here, we're pulling contents from sn1, sn2, sn3 into 'active', with backing file of 'active' file pointing to sn1) desired state: [base] <- [sn1] <- [active] ------------------------------------ [kashyap@moon vmimgs2]$ qemu-img info pulltest-base.img image: pulltest-base.img file format: raw virtual size: 1.0G (1073741824 bytes) disk size: 607M [kashyap@moon vmimgs2]$ - Add /export/file1.txt before taking sn1 ; then take sn1 [root@moon libvirt]# virsh snapshot-create-as --domain pulltest-base snap1 snap1-desc --disk-only --diskspec vda,snapshot=external,file=/var/lib/libvirt/images/sn1-b-pulltest-base.qcow2 --atomic Domain snapshot snap1 created - Before taking sn2 #cp file1.txt file2.txt ; then take sn2 [root@moon libvirt]# virsh snapshot-create-as --domain pulltest-base snap2 snap2-desc --disk-only --diskspec vda,snapshot=external,file=/var/lib/libvirt/images/sn2-b-pulltest-base.qcow2 --atomic Domain snapshot snap2 created [root@moon libvirt]# - Before taking sn3 #cp file1.txt file3.txt ; then take sn3 [root@moon libvirt]# virsh snapshot-create-as --domain pulltest-base snap3 snap3-desc --disk-only --diskspec vda,snapshot=external,file=/var/lib/libvirt/images/sn3-b-pulltest-base.qcow2 --atomic Domain snapshot snap3 created [root@moon libvirt]# - Before taking sn4 #cp file1.txt file4.txt ; then take sn4 [root@moon libvirt]# virsh snapshot-create-as --domain pulltest-base snap4 snap4-desc --disk-only --diskspec vda,snapshot=external,file=/var/lib/libvirt/images/sn4-b-pulltest-base.qcow2 --atomic Domain snapshot snap4 created [root@moon libvirt]# From /var/log/libvirt/libvirtd.log [NOTE: This is possible only when the log_filters="1:qemu_monitor" and log_outputs="1:file:/var/log/libvirt/libvirtd.log" in /etc/libvirt/libvirtd.log are set] #-------------------------------------------------------------------------------# 2012-10-10 11:45:26.659+0000: 11608: debug : qemuMonitorSend:904 : QEMU_MONITOR_SEND_MSG: mon=0x7f1d58003d00 msg={"execute":"transaction","arguments":{"actions":[{"type":"blockdev-snapshot-sync","data":{"device":"drive-virtio-disk0","snapshot-file":"/var/lib/libvirt/images/sn4-b-pulltest-base.qcow2","format":"qcow2"}}]},"id":"libvirt-11"} fd=-1 2012-10-10 11:45:26.659+0000: 11604: debug : qemuMonitorIOWrite:462 : QEMU_MONITOR_IO_WRITE: mon=0x7f1d58003d00 buf={"execute":"transaction","arguments":{"actions":[{"type":"blockdev-snapshot-sync","data":{"device":"drive-virtio-disk0","snapshot-file":"/var/lib/libvirt/images/sn4-b-pulltest-base.qcow2","format":"qcow2"}}]},"id":"libvirt-11"} len=229 ret=229 errno=11 2012-10-10 11:45:26.812+0000: 11604: debug : qemuMonitorIOProcess:354 : QEMU_MONITOR_IO_PROCESS: mon=0x7f1d58003d00 buf={"return": {}, "id": "libvirt-11"} len=36 2012-10-10 11:45:26.812+0000: 11604: debug : qemuMonitorJSONIOProcessLine:144 : Line [{"return": {}, "id": "libvirt-11"}] 2012-10-10 11:45:26.812+0000: 11604: debug : qemuMonitorJSONIOProcessLine:164 : QEMU_MONITOR_RECV_REPLY: mon=0x7f1d58003d00 reply={"return": {}, "id": "libvirt-11"} 2012-10-10 11:45:26.812+0000: 11604: debug : qemuMonitorJSONIOProcess:215 : Total used 36 bytes out of 36 available in buffer 2012-10-10 11:45:26.813+0000: 11608: debug : qemuMonitorJSONCommandWithFd:262 : Receive command reply ret=0 rxObject=0xda2770 #-------------------------------------------------------------------------------# TEST flow: ---------- actual state: [base] <- [sn1] <- [sn2] <- [sn3] <- [sn4] (this is 'active') Here, we're pulling contents from sn2, sn3 into sn4('active') . In other words, by specifying sn1 as --base, now the backing file of sn4 will be pointing to sn1 (and only the intermediate portion - sn2 & sn3 are pulled into sn4(active-layer). desired state: [base] <- [sn1] <- [active] #-------------------------------------------------------------------------------# [root@moon ~]# virsh blockpull --domain pulltest-base --path /var/lib/libvirt/images/sn4-b-pulltest-base.qcow2 --base /var/lib/libvirt/images/sn1-b-pulltest-base.qcow2 --wait --verbose Block Pull: [100 %] Pull complete [root@moon ~]# #-------------------------------------------------------------------------------# Now, we can see that sn4 has sn1 as its backing file (instead of sn3). NOTE: If we don't specify --base, then sn4 will be made a standalone image. #-------------------------------------------------------------------------------# [root@moon ~]# qemu-img info /var/lib/libvirt/images/sn4-b-pulltest-base.qcow2 image: /var/lib/libvirt/images/sn4-b-pulltest-base.qcow2 file format: qcow2 virtual size: 1.0G (1073741824 bytes) disk size: 117M cluster_size: 65536 backing file: /var/lib/libvirt/images/sn1-b-pulltest-base.qcow2 [root@moon ~]# virsh domblklist pulltest-base Target Source ------------------------------------------------ vda /var/lib/libvirt/images/sn4-b-pulltest-base.qcow2 [root@moon ~]# #-------------------------------------------------------------------------------# [kashyap@moon tools]$ guestfish --ro -i -a /var/lib/libvirt/images/sn1-b-pulltest-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 / > ls /export file1.txt file2.txt > exit #-------------------------------------------------------------------------------# [kashyap@moon tools]$ guestfish --ro -i -a /var/lib/libvirt/images/sn4-b-pulltest-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 / > ls /export file1.txt file2.txt file3.txt file4.txt > #-------------------------------------------------------------------------------# [root@moon vmimgs2]# file /var/lib/libvirt/images/sn4-b-pulltest-base.qcow2 /var/lib/libvirt/images/sn4-b-pulltest-base.qcow2: QEMU QCOW Image (v2), has backing file (path /var/lib/libvirt/images/sn1-b-pulltest-base.qcow2), 1073741824 bytes [root@moon vmimgs2]# #-------------------------------------------------------------------------------# QMP info from logs: -------------------- #-------------------------------------------------------------------------------# 2012-10-10 15:04:57.766+0000: 11605: debug : qemuMonitorBlockJob:2900 : mon=0x7f1d58003d00, device=drive-virtio-disk0, base=/var/lib/libvirt/images/sn1-b-pulltest-base.qcow2, bandwidth=0M, info=(nil), mode=3, m odern=1 2012-10-10 15:04:57.767+0000: 11605: debug : qemuMonitorJSONCommandWithFd:257 : Send command '{"execute":"block-stream","arguments":{"device":"drive-virtio-disk0","base":"/var/lib/libvirt/images/sn1-b-pulltest- base.qcow2"},"id":"libvirt-12"}' for write with FD -1 2012-10-10 15:04:57.767+0000: 11605: debug : qemuMonitorSend:904 : QEMU_MONITOR_SEND_MSG: mon=0x7f1d58003d00 msg={"execute":"block-stream","arguments":{"device":"drive-virtio-disk0","base":"/var/lib/libvirt/ima ges/sn1-b-pulltest-base.qcow2"},"id":"libvirt-12"} fd=-1 2012-10-10 15:04:57.768+0000: 11604: debug : qemuMonitorIOWrite:462 : QEMU_MONITOR_IO_WRITE: mon=0x7f1d58003d00 buf={"execute":"block-stream","arguments":{"device":"drive-virtio-disk0","base":"/var/lib/libvirt/ images/sn1-b-pulltest-base.qcow2"},"id":"libvirt-12"} len=149 ret=149 errno=11 2012-10-10 15:04:57.769+0000: 11604: debug : qemuMonitorIOProcess:354 : QEMU_MONITOR_IO_PROCESS: mon=0x7f1d58003d00 buf={"return": {}, "id": "libvirt-12"} len=36 2012-10-10 15:04:57.769+0000: 11604: debug : qemuMonitorJSONIOProcessLine:144 : Line [{"return": {}, "id": "libvirt-12"}] 2012-10-10 15:04:57.769+0000: 11604: debug : qemuMonitorJSONIOProcessLine:164 : QEMU_MONITOR_RECV_REPLY: mon=0x7f1d58003d00 reply={"return": {}, "id": "libvirt-12"} 2012-10-10 15:04:57.769+0000: 11604: debug : qemuMonitorJSONIOProcess:215 : Total used 36 bytes out of 36 available in buffer 2012-10-10 15:04:57.769+0000: 11605: debug : qemuMonitorJSONCommandWithFd:262 : Receive command reply ret=0 rxObject=0xd611c0 2012-10-10 15:04:57.770+0000: 11606: debug : qemuMonitorBlockJob:2900 : mon=0x7f1d58003d00, device=drive-virtio-disk0, base=(null), bandwidth=0M, info=0x7f1d7e90db70, mode=1, modern=1 2012-10-10 15:04:57.770+0000: 11606: debug : qemuMonitorJSONCommandWithFd:257 : Send command '{"execute":"query-block-jobs","id":"libvirt-13"}' for write with FD -1 2012-10-10 15:04:57.770+0000: 11606: debug : qemuMonitorSend:904 : QEMU_MONITOR_SEND_MSG: mon=0x7f1d58003d00 msg={"execute":"query-block-jobs","id":"libvirt-13"} fd=-1 2012-10-10 15:04:57.770+0000: 11604: debug : qemuMonitorIOWrite:462 : QEMU_MONITOR_IO_WRITE: mon=0x7f1d58003d00 buf={"execute":"query-block-jobs","id":"libvirt-13"} len=50 ret=50 errno=11 2012-10-10 15:04:57.771+0000: 11604: debug : qemuMonitorIOProcess:354 : QEMU_MONITOR_IO_PROCESS: mon=0x7f1d58003d00 buf={"return": [{"io-status": "ok", "device": "drive-virtio-disk0", "busy": false, "len": 1073741824, "offset": 10682368, "paused": false, "speed": 0, "type": "stream"}], "id": "libvirt-13"} len=188 2012-10-10 15:04:57.771+0000: 11604: debug : qemuMonitorJSONIOProcessLine:144 : Line [{"return": [{"io-status": "ok", "device": "drive-virtio-disk0", "busy": false, "len": 1073741824, "offset": 10682368, "paused": false, "speed": 0, "type": "stream"}], "id": "libvirt-13"}] 2012-10-10 15:04:57.771+0000: 11604: debug : qemuMonitorJSONIOProcessLine:164 : QEMU_MONITOR_RECV_REPLY: mon=0x7f1d58003d00 reply={"return": [{"io-status": "ok", "device": "drive-virtio-disk0", "busy": false, "len": 1073741824, "offset": 10682368, "paused": false, "speed": 0, "type": "stream"}], "id": "libvirt-13"} 2012-10-10 15:04:57.771+0000: 11604: debug : qemuMonitorJSONIOProcess:215 : Total used 188 bytes out of 188 available in buffer 2012-10-10 15:04:57.771+0000: 11606: debug : qemuMonitorJSONCommandWithFd:262 : Receive command reply ret=0 rxObject=0xe7be10 2012-10-10 15:04:58.072+0000: 11604: debug : qemuMonitorIOProcess:354 : QEMU_MONITOR_IO_PROCESS: mon=0x7f1d58003d00 buf={"timestamp": {"seconds": 1349881498, "microseconds": 72708}, "event": "BLOCK_JOB_COMPLETE D", "data": {"device": "drive-virtio-disk0", "len": 1073741824, "offset": 1073741824, "speed": 0, "type": "stream"}} len=208 2012-10-10 15:04:58.072+0000: 11604: debug : qemuMonitorJSONIOProcessLine:144 : Line [{"timestamp": {"seconds": 1349881498, "microseconds": 72708}, "event": "BLOCK_JOB_COMPLETED", "data": {"device": "drive-virtio-disk0", "len": 1073741824, "offset": 1073741824, "speed": 0, "type": "stream"}}] 2012-10-10 15:04:58.073+0000: 11604: debug : qemuMonitorJSONIOProcessLine:159 : QEMU_MONITOR_RECV_EVENT: mon=0x7f1d58003d00 event={"timestamp": {"seconds": 1349881498, "microseconds": 72708}, "event": "BLOCK_JOB_COMPLETED", "data": {"device": "drive-virtio-disk0", "len": 1073741824, "offset": 1073741824, "speed": 0, "type": "stream"}} 2012-10-10 15:04:58.073+0000: 11604: debug : qemuMonitorJSONIOProcessEvent:116 : mon=0x7f1d58003d00 obj=0xe70490 2012-10-10 15:04:58.073+0000: 11604: debug : qemuMonitorJSONIOProcessEvent:130 : handle BLOCK_JOB_COMPLETED handler=0x7f1d75c10340 data=0xe7bbf0 2012-10-10 15:04:58.073+0000: 11604: debug : qemuMonitorEmitBlockJob:1120 : mon=0x7f1d58003d00 2012-10-10 15:04:58.073+0000: 11604: debug : qemuMonitorJSONIOProcess:215 : Total used 208 bytes out of 208 available in buffer 2012-10-10 15:04:58.272+0000: 11607: debug : qemuMonitorBlockJob:2900 : mon=0x7f1d58003d00, device=drive-virtio-disk0, base=(null), bandwidth=0M, info=0x7f1d7e10cb70, mode=1, modern=1 2012-10-10 15:04:58.272+0000: 11607: debug : qemuMonitorJSONCommandWithFd:257 : Send command '{"execute":"query-block-jobs","id":"libvirt-14"}' for write with FD -1 2012-10-10 15:04:58.272+0000: 11607: debug : qemuMonitorSend:904 : QEMU_MONITOR_SEND_MSG: mon=0x7f1d58003d00 msg={"execute":"query-block-jobs","id":"libvirt-14"} fd=-1 2012-10-10 15:04:58.272+0000: 11604: debug : qemuMonitorIOWrite:462 : QEMU_MONITOR_IO_WRITE: mon=0x7f1d58003d00 buf={"execute":"query-block-jobs","id":"libvirt-14"} len=50 ret=50 errno=0 2012-10-10 15:04:58.273+0000: 11604: debug : qemuMonitorIOProcess:354 : QEMU_MONITOR_IO_PROCESS: mon=0x7f1d58003d00 buf={"return": [], "id": "libvirt-14"} len=36 2012-10-10 15:04:58.273+0000: 11604: debug : qemuMonitorJSONIOProcessLine:144 : Line [{"return": [], "id": "libvirt-14"}] 2012-10-10 15:04:58.273+0000: 11604: debug : qemuMonitorJSONIOProcessLine:164 : QEMU_MONITOR_RECV_REPLY: mon=0x7f1d58003d00 reply={"return": [], "id": "libvirt-14"} 2012-10-10 15:04:58.273+0000: 11604: debug : qemuMonitorJSONIOProcess:215 : Total used 36 bytes out of 36 available in buffer 2012-10-10 15:04:58.273+0000: 11607: debug : qemuMonitorJSONCommandWithFd:262 : Receive command reply ret=0 rxObject=0xd60d80 2012-10-10 15:05:02.734+0000: 11609: debug : qemuMonitorBlockJob:2900 : mon=0x7f1d58003d00, device=drive-virtio-disk0, base=(null), bandwidth=0M, info=0x7f1d7d10ab70, mode=1, modern=1 2012-10-10 15:05:02.735+0000: 11609: debug : qemuMonitorSend:904 : QEMU_MONITOR_SEND_MSG: mon=0x7f1d58003d00 msg={"execute":"query-block-jobs","id":"libvirt-15"} fd=-1 2012-10-10 15:05:02.735+0000: 11604: debug : qemuMonitorIOWrite:462 : QEMU_MONITOR_IO_WRITE: mon=0x7f1d58003d00 buf={"execute":"query-block-jobs","id":"libvirt-15"} len=50 ret=50 errno=11 2012-10-10 15:05:02.736+0000: 11604: debug : qemuMonitorIOProcess:354 : QEMU_MONITOR_IO_PROCESS: mon=0x7f1d58003d00 buf={"return": [], "id": "libvirt-15"} len=36 2012-10-10 15:05:02.736+0000: 11604: debug : qemuMonitorJSONIOProcessLine:144 : Line [{"return": [], "id": "libvirt-15"}] 2012-10-10 15:05:02.736+0000: 11604: debug : qemuMonitorJSONIOProcessLine:164 : QEMU_MONITOR_RECV_REPLY: mon=0x7f1d58003d00 reply={"return": [], "id": "libvirt-15"} 2012-10-10 15:05:02.736+0000: 11604: debug : qemuMonitorJSONIOProcess:215 : Total used 36 bytes out of 36 available in buffer 2012-10-10 15:05:02.736+0000: 11609: debug : qemuMonitorJSONCommandWithFd:262 : Receive command reply ret=0 rxObject=0xd60c50 2012-10-10 15:05:48.249+0000: 11604: error : daemonStreamHandleAbort:609 : stream aborted at client request #-------------------------------------------------------------------------------# [TEST-2] actual state: [base] <- [sn1] <- [sn2] <- [sn3] <- [active] (here, we're pulling contents from base, sn1, sn2, sn3 into 'active', (with no 'backing-file' , so that the active-layer becomes a standalone image) desired state: [active] (a standalone image) #-------------------------------------------------------------------------------# [root@moon qemu]# virsh snapshot-create-as --domain ptest2-base snap1 snap1-desc --disk-only --diskspec vda,snapshot=external,file=/var/lib/libvirt/images/sn1-b-ptest2-base.qcow2 --atomic Domain snapshot snap1 created [root@moon qemu]# virsh console ptest2-base Connected to domain ptest2-base Escape character is ^] [root@dhcp201-148 ~]# ls anaconda-ks.cfg file1.txt install.log install.log.syslog [root@dhcp201-148 ~]# cp file1.txt file2.txt [root@dhcp201-148 ~]# [root@dhcp201-148 ~]# cp file1.txt file2.txt [root@dhcp201-148 ~]# [root@moon qemu]# virsh snapshot-create-as --domain ptest2-base snap2 snap2-desc --disk-only --diskspec vda,snapshot=external,file=/var/lib/libvirt/images/sn2-b-ptest2-base.qcow2 --atomic Domain snapshot snap2 created [root@moon qemu]# virsh console ptest2-base Connected to domain ptest2-base Escape character is ^] [root@dhcp201-148 ~]# cp file1.txt file3.txt [root@dhcp201-148 ~]# [root@moon qemu]# virsh snapshot-create-as --domain ptest2-base snap3 snap3-desc --disk-only --diskspec vda,snapshot=external,file=/var/lib/libvirt/images/sn3-b-ptest2-base.qcow2 --atomic Domain snapshot snap3 created [root@moon qemu]# virsh console ptest2-base Connected to domain ptest2-base Escape character is ^] [root@dhcp201-148 ~]# cp file1.txt file4.txt [root@dhcp201-148 ~]# ls anaconda-ks.cfg file2.txt file4.txt install.log.syslog file1.txt file3.txt install.log [root@dhcp201-148 ~]# [root@moon qemu]# virsh snapshot-create-as --domain ptest2-base snap4 snap4-desc --disk-only --diskspec vda,snapshot=external,file=/var/lib/libvirt/images/sn4-b-ptest2-base.qcow2 --atomic Domain snapshot snap4 created [root@moon qemu]# #-------------------------------------------------------------------------------# -before blockpull- ------------------ #-------------------------------------------------------------------------------# [root@moon vmimgs2]# ls -lash /export/vmimgs2/ptest2-base.img 608M -rw-r--r--. 1 qemu qemu 1.0G Oct 11 17:54 /export/vmimgs2/ptest2-base.img [root@moon vmimgs2]# [root@moon vmimgs2]# ls -lash /var/lib/libvirt/images/*ptest2* 840K -rw-------. 1 qemu qemu 896K Oct 11 17:56 /var/lib/libvirt/images/sn1-b-ptest2-base.qcow2 392K -rw-------. 1 qemu qemu 448K Oct 11 17:56 /var/lib/libvirt/images/sn2-b-ptest2-base.qcow2 456K -rw-------. 1 qemu qemu 512K Oct 11 17:56 /var/lib/libvirt/images/sn3-b-ptest2-base.qcow2 2.9M -rw-------. 1 qemu qemu 3.0M Oct 11 18:10 /var/lib/libvirt/images/sn4-b-ptest2-base.qcow2 [root@moon vmimgs2]# [root@moon vmimgs2]# qemu-img info /var/lib/libvirt/images/sn4-b-ptest2-base.qcow2 ; virsh domblklist ptest2-base image: /var/lib/libvirt/images/sn4-b-ptest2-base.qcow2 file format: qcow2 virtual size: 1.0G (1073741824 bytes) disk size: 2.9M cluster_size: 65536 backing file: /var/lib/libvirt/images/sn3-b-ptest2-base.qcow2 Target Source ------------------------------------------------ vda /var/lib/libvirt/images/sn4-b-ptest2-base.qcow2 [root@moon vmimgs2]# #-------------------------------------------------------------------------------# Let's do the blockpull operation 'w/o specifying the base' -- (while the guest is downloading some content) (NEGATIVE-TEST) -- try to give an invalid 'path' ------------ [root@moon qemu]# virsh blockpull --domain ptest2-base --path /export/vmimgs2/ptest2-base.img --wait --verbose error: invalid argument: No device found for specified path [root@moon qemu]# ------------ (POSITIVE-TEST) #-------------------------------------------------------------------------------# [root@moon ~]# virsh blockpull --domain ptest2-base --path /var/lib/libvirt/images/sn4-b-ptest2-base.qcow2 --wait --verbose Block Pull: [100 %] Pull complete #-------------------------------------------------------------------------------# -after blockpull- ------------------ #-------------------------------------------------------------------------------# [root@moon ~]# ls -lash /var/lib/libvirt/images/sn4-b-ptest2-base.qcow2 1011M -rw-------. 1 qemu qemu 1011M Oct 11 18:29 /var/lib/libvirt/images/sn4-b-ptest2-base.qcow2 [root@moon ~]# #-------------------------------------------------------------------------------# [root@moon ~]# ls -lash /var/lib/libvirt/images/sn4-b-ptest2-base.qcow2 1011M -rw-------. 1 qemu qemu 1011M Oct 11 18:29 /var/lib/libvirt/images/sn4-b-ptest2-base.qcow2 #-------------------------------------------------------------------------------# [root@moon ~]# ls -lash /var/lib/libvirt/images/*ptest2* 840K -rw-------. 1 qemu qemu 896K Oct 11 17:56 /var/lib/libvirt/images/sn1-b-ptest2-base.qcow2 392K -rw-------. 1 qemu qemu 448K Oct 11 17:56 /var/lib/libvirt/images/sn2-b-ptest2-base.qcow2 456K -rw-------. 1 qemu qemu 512K Oct 11 17:56 /var/lib/libvirt/images/sn3-b-ptest2-base.qcow2 1011M -rw-------. 1 qemu qemu 1011M Oct 11 18:29 /var/lib/libvirt/images/sn4-b-ptest2-base.qcow2 [root@moon ~]# ls -lash /export/vmimgs2/ptest2-base.img 608M -rw-r--r--. 1 qemu qemu 1.0G Oct 11 17:54 /export/vmimgs2/ptest2-base.img #-------------------------------------------------------------------------------# [root@moon ~]# qemu-img info /var/lib/libvirt/images/sn4-b-ptest2-base.qcow2 image: /var/lib/libvirt/images/sn4-b-ptest2-base.qcow2 file format: qcow2 virtual size: 1.0G (1073741824 bytes) disk size: 1.0G cluster_size: 65536 [root@moon ~]# #-------------------------------------------------------------------------------# Observations after blockpull: - It can be noticed that /after/ the blockpull, sn4-b-ptest2-base has become a standalone image with no backing file. - The existing snapshot chain of [base]<- sn1 <- sn2 <- sn3 is still intact (I guess?) QMP events for the above: #-------------------------------------------------------------------------------# 2012-10-11 12:58:34.948+0000: 11605: debug : qemuMonitorBlockJob:2900 : mon=0x7f1d58009570, device=drive-virtio-disk0, base=(null), bandwidth=0M, info=(nil), mode=3, modern=1 2012-10-11 12:58:34.949+0000: 11605: debug : qemuMonitorJSONCommandWithFd:257 : Send command '{"execute":"block-stream","arguments":{"device":"drive-virtio-disk0"},"id":"libvirt-12"}' for write with FD -1 2012-10-11 12:58:34.949+0000: 11605: debug : qemuMonitorSend:904 : QEMU_MONITOR_SEND_MSG: mon=0x7f1d58009570 msg={"execute":"block-stream","arguments":{"device":"drive-virtio-disk0"},"id":"libvirt-12"} fd=-1 2012-10-11 12:58:34.949+0000: 11604: debug : qemuMonitorIOWrite:462 : QEMU_MONITOR_IO_WRITE: mon=0x7f1d58009570 buf={"execute":"block-stream","arguments":{"device":"drive-virtio-disk0"},"id":"libvirt-12"} len=90 ret=90 errno=11 2012-10-11 12:58:34.950+0000: 11604: debug : qemuMonitorIOProcess:354 : QEMU_MONITOR_IO_PROCESS: mon=0x7f1d58009570 buf={"return": {}, "id": "libvirt-12"} len=36 2012-10-11 12:58:34.952+0000: 11604: debug : qemuMonitorIOWrite:462 : QEMU_MONITOR_IO_WRITE: mon=0x7f1d58009570 buf={"execute":"query-block-jobs","id":"libvirt-13"} len=50 ret=50 errno=11 2012-10-11 12:58:34.953+0000: 11604: debug : qemuMonitorIOProcess:354 : QEMU_MONITOR_IO_PROCESS: mon=0x7f1d58009570 buf={"return": [{"io-status": "ok", "device": "drive-virtio-disk0", "busy": true, "len": 1073741824, "offset": 0, "paused": false, "speed": 0, "type": "stream"}], "id": "libvirt-13"}