Add the block device via QMP command 'blockdev-add': QMP> { "execute": "blockdev-add", "arguments": { "options" : { "driver": "qcow2", "id": "drive-ide2-0-0", "file": { "driver": "file", "filename": "/export/backup1.qcow2"} } } } What is the difference between the outer "driver" and inner "driver" arguments in the above command? From a discussion with Eric Blake on IRC [15-JUN-2016] ----------------------------------------------------------------------- [In the 'blockdev-add' command invocation above, the outer 'driver' is the format driver, qcow2, that says how the host data is arranged; the inner 'driver' is protocol, in this case, 'file' that says to read it straight off a file system.] The format driver says how to interpret bytes, regardless of how those bytes are obtained (raw, qcow2, qed); the protocol driver says how to grab bytes regardless of how they are intepreted (file, nbd, gluster, sheepdog). QEMU is written in layers, so that it can reuse code between the drivers. With a format driver, 'read 64k bytes at offset 0' means 'read what the guest would see at offset 0, no matter what offset the host sees it at'. With a protocol driver, 'read 64k bytes at offset 0' means 'read at host offset 0, whether those bytes are guest visible or merely metadata that only the host can use'. With the raw format driver, host offset 0 is guest offset 0. But with the qcow2 format driver, guest offset 0 is at a non-zero host offset, because host offset 0 is qcow2 metadata not touchable by the guest. -----------------------------------------------------------------------