Launch QEMU this way: $ ./x86_64-softmmu/qemu-system-x86_64 -display none -nodefconfig \ -M q35 -nodefaults -m 512 \ -blockdev node-name=node-A,driver=qcow2,file.driver=file,file.filename=./a.qcow2 \ -device virtio-blk,drive=node-A,id=virtio0 \ -monitor stdio -qmp unix:/tmp/qmp-sock,server,nowait Interact with the QEMU via `qmp-shell`: $ ./qmp-shell -v -p /tmp/qmp-sock (QEMU) (QEMU) blockdev-snapshot-sync node-name=node-A snapshot-file=b.qcow2 snapshot-node-name=node-B format=qcow2 (QEMU) block-commit device=node-B base=a.qcow2 top=b.qcow2 job-id=job0 # Here's The Glitch: you won't see the BLOCK_JOB_{COMPLETED,READY} # events *until* you hit the enter key right after `block-commit` # completes. (QEMU) query-block-jobs (QEMU) block-job-complete device=job0