mirror of
https://github.com/qemu/qemu.git
synced 2024-12-11 12:43:55 +08:00
b66ff2c298
There are many existing qcow2 images that specify a backing file but no format. This has been the source of CVEs in the past, but has become more prominent of a problem now that libvirt has switched to -blockdev. With older -drive, at least the probing was always done by qemu (so the only risk of a changed format between successive boots of a guest was if qemu was upgraded and probed differently). But with newer -blockdev, libvirt must specify a format; if libvirt guesses raw where the image was formatted, this results in data corruption visible to the guest; conversely, if libvirt guesses qcow2 where qemu was using raw, this can result in potential security holes, so modern libvirt instead refuses to use images without explicit backing format. The change in libvirt to reject images without explicit backing format has pointed out that a number of tools have been far too reliant on probing in the past. It's time to set a better example in our own iotests of properly setting this parameter. iotest calls to create, rebase, and convert are all impacted to some degree. It's a bit annoying that we are inconsistent on command line - while all of those accept -o backing_file=...,backing_fmt=..., the shortcuts are different: create and rebase have -b and -F, while convert has -B but no -F. (amend has no shortcuts, but the previous patch just deprecated the use of amend to change backing chains). Signed-off-by: Eric Blake <eblake@redhat.com> Message-Id: <20200706203954.341758-9-eblake@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
574 lines
27 KiB
Plaintext
574 lines
27 KiB
Plaintext
QA output created by 051
|
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728
|
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 backing_file=TEST_DIR/t.IMGFMT.base backing_fmt=IMGFMT
|
|
|
|
=== Unknown option ===
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=,if=none,id=drive0
|
|
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=,if=none,id=drive0: Block format 'qcow2' does not support the option 'unknown_opt'
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=on,if=none,id=drive0
|
|
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=on,if=none,id=drive0: Block format 'qcow2' does not support the option 'unknown_opt'
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=1234,if=none,id=drive0
|
|
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=1234,if=none,id=drive0: Block format 'qcow2' does not support the option 'unknown_opt'
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=foo,if=none,id=drive0
|
|
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=foo,if=none,id=drive0: Block format 'qcow2' does not support the option 'unknown_opt'
|
|
|
|
|
|
=== Unknown protocol option ===
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,file.unknown_opt=
|
|
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,file.unknown_opt=: Block protocol 'file' doesn't support the option 'unknown_opt'
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,file.unknown_opt=on
|
|
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,file.unknown_opt=on: Block protocol 'file' doesn't support the option 'unknown_opt'
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,file.unknown_opt=1234
|
|
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,file.unknown_opt=1234: Block protocol 'file' doesn't support the option 'unknown_opt'
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,file.unknown_opt=foo
|
|
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,file.unknown_opt=foo: Block protocol 'file' doesn't support the option 'unknown_opt'
|
|
|
|
|
|
=== Invalid format ===
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,format=foo
|
|
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=foo: Unknown driver 'foo'
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,driver=foo
|
|
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,driver=foo: Unknown driver 'foo'
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,driver=raw,format=qcow2
|
|
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,driver=raw,format=qcow2: Cannot specify both 'driver' and 'format'
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,driver=qcow2,format=qcow2
|
|
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,driver=qcow2,format=qcow2: Cannot specify both 'driver' and 'format'
|
|
|
|
|
|
=== Node names ===
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,node-name=x123456789012345678901234567890
|
|
QEMU X.Y.Z monitor - type 'help' for more information
|
|
(qemu) quit
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,node-name=x1234567890123456789012345678901
|
|
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,node-name=x1234567890123456789012345678901: Node name too long
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,node-name=All-Types.of_all0wed_chars
|
|
QEMU X.Y.Z monitor - type 'help' for more information
|
|
(qemu) quit
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,node-name=123foo
|
|
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,node-name=123foo: Invalid node name
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,node-name=_foo
|
|
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,node-name=_foo: Invalid node name
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,node-name=foo#12
|
|
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,node-name=foo#12: Invalid node name
|
|
|
|
|
|
=== Device without drive ===
|
|
|
|
Testing: -device VIRTIO_SCSI -device scsi-hd
|
|
QEMU X.Y.Z monitor - type 'help' for more information
|
|
(qemu) QEMU_PROG: -device scsi-hd: drive property not set
|
|
|
|
|
|
=== Overriding backing file ===
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,driver=qcow2,backing.file.filename=TEST_DIR/t.qcow2.orig,if=none,id=drive0 -nodefaults
|
|
QEMU X.Y.Z monitor - type 'help' for more information
|
|
(qemu) info block
|
|
drive0 (NODE_NAME): json:{"backing": {"driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/t.qcow2.orig"}}, "driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/t.qcow2"}} (qcow2)
|
|
Removable device: not locked, tray closed
|
|
Cache mode: writeback
|
|
Backing file: TEST_DIR/t.qcow2.orig (chain depth: 1)
|
|
(qemu) quit
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,driver=raw,backing.file.filename=TEST_DIR/t.qcow2.orig
|
|
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,driver=raw,backing.file.filename=TEST_DIR/t.qcow2.orig: Driver doesn't support backing files
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,file.backing.driver=file,file.backing.filename=TEST_DIR/t.qcow2.orig
|
|
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,file.backing.driver=file,file.backing.filename=TEST_DIR/t.qcow2.orig: Driver doesn't support backing files
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,file.backing.driver=qcow2,file.backing.file.filename=TEST_DIR/t.qcow2.orig
|
|
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,file.backing.driver=qcow2,file.backing.file.filename=TEST_DIR/t.qcow2.orig: Driver doesn't support backing files
|
|
|
|
|
|
=== Enable and disable lazy refcounting on the command line, plus some invalid values ===
|
|
|
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728
|
|
Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy-refcounts=on
|
|
QEMU X.Y.Z monitor - type 'help' for more information
|
|
(qemu) quit
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy-refcounts=off
|
|
QEMU X.Y.Z monitor - type 'help' for more information
|
|
(qemu) quit
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy-refcounts=
|
|
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy-refcounts=: Parameter 'lazy-refcounts' expects 'on' or 'off'
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy-refcounts=42
|
|
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy-refcounts=42: Parameter 'lazy-refcounts' expects 'on' or 'off'
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy-refcounts=foo
|
|
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy-refcounts=foo: Parameter 'lazy-refcounts' expects 'on' or 'off'
|
|
|
|
|
|
=== With version 2 images enabling lazy refcounts must fail ===
|
|
|
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728
|
|
Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy-refcounts=on
|
|
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy-refcounts=on: Lazy refcounts require a qcow2 image with at least qemu 1.1 compatibility level
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy-refcounts=off
|
|
QEMU X.Y.Z monitor - type 'help' for more information
|
|
(qemu) quit
|
|
|
|
|
|
=== No medium ===
|
|
|
|
Testing: -drive if=floppy
|
|
QEMU X.Y.Z monitor - type 'help' for more information
|
|
(qemu) quit
|
|
|
|
Testing: -drive if=ide,media=cdrom
|
|
QEMU X.Y.Z monitor - type 'help' for more information
|
|
(qemu) quit
|
|
|
|
Testing: -drive if=ide
|
|
QEMU X.Y.Z monitor - type 'help' for more information
|
|
(qemu) QEMU_PROG: Device needs media, but drive is empty
|
|
|
|
Testing: -drive if=virtio
|
|
QEMU X.Y.Z monitor - type 'help' for more information
|
|
(qemu) QEMU_PROG: -drive if=virtio: Device needs media, but drive is empty
|
|
|
|
Testing: -drive if=none,id=disk -device ide-cd,drive=disk
|
|
QEMU X.Y.Z monitor - type 'help' for more information
|
|
(qemu) quit
|
|
|
|
Testing: -drive if=none,id=disk -device lsi53c895a -device scsi-cd,drive=disk
|
|
QEMU X.Y.Z monitor - type 'help' for more information
|
|
(qemu) quit
|
|
|
|
Testing: -drive if=none,id=disk -device ide-drive,drive=disk
|
|
QEMU X.Y.Z monitor - type 'help' for more information
|
|
(qemu) QEMU_PROG: -device ide-drive,drive=disk: warning: 'ide-drive' is deprecated, please use 'ide-hd' or 'ide-cd' instead
|
|
QEMU_PROG: -device ide-drive,drive=disk: Device needs media, but drive is empty
|
|
|
|
Testing: -drive if=none,id=disk -device ide-hd,drive=disk
|
|
QEMU X.Y.Z monitor - type 'help' for more information
|
|
(qemu) QEMU_PROG: -device ide-hd,drive=disk: Device needs media, but drive is empty
|
|
|
|
Testing: -drive if=none,id=disk -device lsi53c895a -device scsi-disk,drive=disk
|
|
QEMU X.Y.Z monitor - type 'help' for more information
|
|
(qemu) QEMU_PROG: -device scsi-disk,drive=disk: warning: 'scsi-disk' is deprecated, please use 'scsi-hd' or 'scsi-cd' instead
|
|
QEMU_PROG: -device scsi-disk,drive=disk: Device needs media, but drive is empty
|
|
|
|
Testing: -drive if=none,id=disk -device lsi53c895a -device scsi-hd,drive=disk
|
|
QEMU X.Y.Z monitor - type 'help' for more information
|
|
(qemu) QEMU_PROG: -device scsi-hd,drive=disk: Device needs media, but drive is empty
|
|
|
|
|
|
=== Attach to node in non-default iothread ===
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,if=none,node-name=disk -object iothread,id=thread0 -device virtio-scsi,iothread=thread0,id=virtio-scsi0 -device scsi-hd,bus=virtio-scsi0.0,drive=disk,share-rw=on -device ide-hd,drive=disk,share-rw=on
|
|
QEMU X.Y.Z monitor - type 'help' for more information
|
|
(qemu) QEMU_PROG: -device ide-hd,drive=disk,share-rw=on: Cannot change iothread of active block backend
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,if=none,node-name=disk -object iothread,id=thread0 -device virtio-scsi,iothread=thread0,id=virtio-scsi0 -device scsi-hd,bus=virtio-scsi0.0,drive=disk,share-rw=on -device virtio-blk-pci,drive=disk,share-rw=on
|
|
QEMU X.Y.Z monitor - type 'help' for more information
|
|
(qemu) QEMU_PROG: -device virtio-blk-pci,drive=disk,share-rw=on: Cannot change iothread of active block backend
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,if=none,node-name=disk -object iothread,id=thread0 -device virtio-scsi,iothread=thread0,id=virtio-scsi0 -device scsi-hd,bus=virtio-scsi0.0,drive=disk,share-rw=on -device lsi53c895a,id=lsi0 -device scsi-hd,bus=lsi0.0,drive=disk,share-rw=on
|
|
QEMU X.Y.Z monitor - type 'help' for more information
|
|
(qemu) QEMU_PROG: -device scsi-hd,bus=lsi0.0,drive=disk,share-rw=on: HBA does not support iothreads
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,if=none,node-name=disk -object iothread,id=thread0 -device virtio-scsi,iothread=thread0,id=virtio-scsi0 -device scsi-hd,bus=virtio-scsi0.0,drive=disk,share-rw=on -device virtio-scsi,id=virtio-scsi1 -device scsi-hd,bus=virtio-scsi1.0,drive=disk,share-rw=on
|
|
QEMU X.Y.Z monitor - type 'help' for more information
|
|
(qemu) QEMU_PROG: -device scsi-hd,bus=virtio-scsi1.0,drive=disk,share-rw=on: Cannot change iothread of active block backend
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,if=none,node-name=disk -object iothread,id=thread0 -device virtio-scsi,iothread=thread0,id=virtio-scsi0 -device scsi-hd,bus=virtio-scsi0.0,drive=disk,share-rw=on -device virtio-blk-pci,drive=disk,iohtread=iothread0,share-rw=on
|
|
QEMU X.Y.Z monitor - type 'help' for more information
|
|
(qemu) QEMU_PROG: -device virtio-blk-pci,drive=disk,iohtread=iothread0,share-rw=on: Cannot change iothread of active block backend
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,if=none,node-name=disk -object iothread,id=thread0 -device virtio-scsi,iothread=thread0,id=virtio-scsi0 -device scsi-hd,bus=virtio-scsi0.0,drive=disk,share-rw=on -device virtio-scsi,id=virtio-scsi1,iothread=thread0 -device scsi-hd,bus=virtio-scsi1.0,drive=disk,share-rw=on
|
|
QEMU X.Y.Z monitor - type 'help' for more information
|
|
(qemu) quit
|
|
|
|
|
|
=== Read-only ===
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,if=floppy,readonly=on
|
|
QEMU X.Y.Z monitor - type 'help' for more information
|
|
(qemu) quit
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,if=ide,media=cdrom,readonly=on
|
|
QEMU X.Y.Z monitor - type 'help' for more information
|
|
(qemu) quit
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,if=ide,readonly=on
|
|
QEMU X.Y.Z monitor - type 'help' for more information
|
|
(qemu) QEMU_PROG: Block node is read-only
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,if=virtio,readonly=on
|
|
QEMU X.Y.Z monitor - type 'help' for more information
|
|
(qemu) quit
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,if=none,id=disk,readonly=on -device ide-cd,drive=disk
|
|
QEMU X.Y.Z monitor - type 'help' for more information
|
|
(qemu) quit
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,if=none,id=disk,readonly=on -device lsi53c895a -device scsi-cd,drive=disk
|
|
QEMU X.Y.Z monitor - type 'help' for more information
|
|
(qemu) quit
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,if=none,id=disk,readonly=on -device ide-drive,drive=disk
|
|
QEMU X.Y.Z monitor - type 'help' for more information
|
|
(qemu) QEMU_PROG: -device ide-drive,drive=disk: warning: 'ide-drive' is deprecated, please use 'ide-hd' or 'ide-cd' instead
|
|
QEMU_PROG: -device ide-drive,drive=disk: Block node is read-only
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,if=none,id=disk,readonly=on -device ide-hd,drive=disk
|
|
QEMU X.Y.Z monitor - type 'help' for more information
|
|
(qemu) QEMU_PROG: -device ide-hd,drive=disk: Block node is read-only
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,if=none,id=disk,readonly=on -device lsi53c895a -device scsi-disk,drive=disk
|
|
QEMU X.Y.Z monitor - type 'help' for more information
|
|
(qemu) QEMU_PROG: -device scsi-disk,drive=disk: warning: 'scsi-disk' is deprecated, please use 'scsi-hd' or 'scsi-cd' instead
|
|
quit
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,if=none,id=disk,readonly=on -device lsi53c895a -device scsi-hd,drive=disk
|
|
QEMU X.Y.Z monitor - type 'help' for more information
|
|
(qemu) quit
|
|
|
|
|
|
=== Cache modes ===
|
|
|
|
Testing: -drive driver=null-co,read-zeroes=on,cache=none
|
|
QEMU X.Y.Z monitor - type 'help' for more information
|
|
(qemu) quit
|
|
|
|
Testing: -drive driver=null-co,read-zeroes=on,cache=directsync
|
|
QEMU X.Y.Z monitor - type 'help' for more information
|
|
(qemu) quit
|
|
|
|
Testing: -drive driver=null-co,read-zeroes=on,cache=writeback
|
|
QEMU X.Y.Z monitor - type 'help' for more information
|
|
(qemu) quit
|
|
|
|
Testing: -drive driver=null-co,read-zeroes=on,cache=writethrough
|
|
QEMU X.Y.Z monitor - type 'help' for more information
|
|
(qemu) quit
|
|
|
|
Testing: -drive driver=null-co,read-zeroes=on,cache=unsafe
|
|
QEMU X.Y.Z monitor - type 'help' for more information
|
|
(qemu) quit
|
|
|
|
Testing: -drive driver=null-co,cache=invalid_value
|
|
QEMU_PROG: -drive driver=null-co,cache=invalid_value: invalid cache option
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,cache=writeback,backing.file.filename=TEST_DIR/t.qcow2.base,backing.cache.no-flush=on,backing.node-name=backing,backing.file.node-name=backing-file,file.node-name=file,if=none,id=drive0 -nodefaults
|
|
QEMU X.Y.Z monitor - type 'help' for more information
|
|
(qemu) info block
|
|
drive0 (NODE_NAME): json:{"backing": {"driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/t.qcow2.base"}}, "driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/t.qcow2"}} (qcow2)
|
|
Removable device: not locked, tray closed
|
|
Cache mode: writeback
|
|
Backing file: TEST_DIR/t.qcow2.base (chain depth: 1)
|
|
(qemu) info block file
|
|
|
|
file: TEST_DIR/t.qcow2 (file)
|
|
Cache mode: writeback
|
|
(qemu) info block backing
|
|
backing: TEST_DIR/t.qcow2.base (qcow2, read-only)
|
|
Cache mode: writeback, ignore flushes
|
|
(qemu) info block backing-file
|
|
|
|
backing-file: TEST_DIR/t.qcow2.base (file, read-only)
|
|
Cache mode: writeback, ignore flushes
|
|
(qemu) quit
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,cache=writethrough,backing.file.filename=TEST_DIR/t.qcow2.base,backing.cache.no-flush=on,backing.node-name=backing,backing.file.node-name=backing-file,file.node-name=file,if=none,id=drive0 -nodefaults
|
|
QEMU X.Y.Z monitor - type 'help' for more information
|
|
(qemu) info block
|
|
drive0 (NODE_NAME): json:{"backing": {"driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/t.qcow2.base"}}, "driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/t.qcow2"}} (qcow2)
|
|
Removable device: not locked, tray closed
|
|
Cache mode: writethrough
|
|
Backing file: TEST_DIR/t.qcow2.base (chain depth: 1)
|
|
(qemu) info block file
|
|
|
|
file: TEST_DIR/t.qcow2 (file)
|
|
Cache mode: writeback
|
|
(qemu) info block backing
|
|
backing: TEST_DIR/t.qcow2.base (qcow2, read-only)
|
|
Cache mode: writeback, ignore flushes
|
|
(qemu) info block backing-file
|
|
|
|
backing-file: TEST_DIR/t.qcow2.base (file, read-only)
|
|
Cache mode: writeback, ignore flushes
|
|
(qemu) quit
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,cache=unsafe,backing.file.filename=TEST_DIR/t.qcow2.base,backing.cache.no-flush=on,backing.node-name=backing,backing.file.node-name=backing-file,file.node-name=file,if=none,id=drive0 -nodefaults
|
|
QEMU X.Y.Z monitor - type 'help' for more information
|
|
(qemu) info block
|
|
drive0 (NODE_NAME): json:{"backing": {"driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/t.qcow2.base"}}, "driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/t.qcow2"}} (qcow2)
|
|
Removable device: not locked, tray closed
|
|
Cache mode: writeback, ignore flushes
|
|
Backing file: TEST_DIR/t.qcow2.base (chain depth: 1)
|
|
(qemu) info block file
|
|
|
|
file: TEST_DIR/t.qcow2 (file)
|
|
Cache mode: writeback, ignore flushes
|
|
(qemu) info block backing
|
|
backing: TEST_DIR/t.qcow2.base (qcow2, read-only)
|
|
Cache mode: writeback, ignore flushes
|
|
(qemu) info block backing-file
|
|
|
|
backing-file: TEST_DIR/t.qcow2.base (file, read-only)
|
|
Cache mode: writeback, ignore flushes
|
|
(qemu) quit
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,cache=invalid_value,backing.file.filename=TEST_DIR/t.qcow2.base,backing.cache.no-flush=on,backing.node-name=backing,backing.file.node-name=backing-file,file.node-name=file,if=none,id=drive0 -nodefaults
|
|
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,cache=invalid_value,backing.file.filename=TEST_DIR/t.qcow2.base,backing.cache.no-flush=on,backing.node-name=backing,backing.file.node-name=backing-file,file.node-name=file,if=none,id=drive0: invalid cache option
|
|
|
|
|
|
=== Specifying the protocol layer ===
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,file.driver=file
|
|
QEMU X.Y.Z monitor - type 'help' for more information
|
|
(qemu) quit
|
|
|
|
|
|
=== Leaving out required options ===
|
|
|
|
Testing: -drive driver=file
|
|
QEMU_PROG: -drive driver=file: The 'file' block driver requires a file name
|
|
|
|
Testing: -drive driver=file,filename=
|
|
QEMU_PROG: -drive driver=file,filename=: The 'file' block driver requires a file name
|
|
|
|
Testing: -drive driver=nbd
|
|
QEMU_PROG: -drive driver=nbd: NBD server address missing
|
|
|
|
Testing: -drive driver=raw
|
|
QEMU_PROG: -drive driver=raw: A block device must be specified for "file"
|
|
|
|
Testing: -drive file.driver=file
|
|
QEMU_PROG: -drive file.driver=file: The 'file' block driver requires a file name
|
|
|
|
Testing: -drive file.driver=nbd
|
|
QEMU_PROG: -drive file.driver=nbd: NBD server address missing
|
|
|
|
Testing: -drive file.driver=raw
|
|
QEMU_PROG: -drive file.driver=raw: A block device must be specified for "file"
|
|
|
|
Testing: -drive foo=bar
|
|
QEMU_PROG: -drive foo=bar: Must specify either driver or file
|
|
|
|
|
|
=== Specifying both an option and its legacy alias ===
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,iops=1234,throttling.iops-total=5678
|
|
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,iops=1234,throttling.iops-total=5678: 'throttling.iops-total' and its alias 'iops' can't be used at the same time
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,iops_rd=1234,throttling.iops-read=5678
|
|
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,iops_rd=1234,throttling.iops-read=5678: 'throttling.iops-read' and its alias 'iops_rd' can't be used at the same time
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,iops_wr=1234,throttling.iops-write=5678
|
|
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,iops_wr=1234,throttling.iops-write=5678: 'throttling.iops-write' and its alias 'iops_wr' can't be used at the same time
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,bps=1234,throttling.bps-total=5678
|
|
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,bps=1234,throttling.bps-total=5678: 'throttling.bps-total' and its alias 'bps' can't be used at the same time
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,bps_rd=1234,throttling.bps-read=5678
|
|
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,bps_rd=1234,throttling.bps-read=5678: 'throttling.bps-read' and its alias 'bps_rd' can't be used at the same time
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,bps_wr=1234,throttling.bps-write=5678
|
|
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,bps_wr=1234,throttling.bps-write=5678: 'throttling.bps-write' and its alias 'bps_wr' can't be used at the same time
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,iops_max=1234,throttling.iops-total-max=5678
|
|
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,iops_max=1234,throttling.iops-total-max=5678: 'throttling.iops-total-max' and its alias 'iops_max' can't be used at the same time
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,iops_rd_max=1234,throttling.iops-read-max=5678
|
|
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,iops_rd_max=1234,throttling.iops-read-max=5678: 'throttling.iops-read-max' and its alias 'iops_rd_max' can't be used at the same time
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,iops_wr_max=1234,throttling.iops-write-max=5678
|
|
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,iops_wr_max=1234,throttling.iops-write-max=5678: 'throttling.iops-write-max' and its alias 'iops_wr_max' can't be used at the same time
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,bps_max=1234,throttling.bps-total-max=5678
|
|
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,bps_max=1234,throttling.bps-total-max=5678: 'throttling.bps-total-max' and its alias 'bps_max' can't be used at the same time
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,bps_rd_max=1234,throttling.bps-read-max=5678
|
|
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,bps_rd_max=1234,throttling.bps-read-max=5678: 'throttling.bps-read-max' and its alias 'bps_rd_max' can't be used at the same time
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,bps_wr_max=1234,throttling.bps-write-max=5678
|
|
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,bps_wr_max=1234,throttling.bps-write-max=5678: 'throttling.bps-write-max' and its alias 'bps_wr_max' can't be used at the same time
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,iops_size=1234,throttling.iops-size=5678
|
|
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,iops_size=1234,throttling.iops-size=5678: 'throttling.iops-size' and its alias 'iops_size' can't be used at the same time
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,readonly=on,read-only=off
|
|
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,readonly=on,read-only=off: 'read-only' and its alias 'readonly' can't be used at the same time
|
|
|
|
|
|
=== Catching negative/large throttling values ===
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,iops=-1
|
|
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,iops=-1: bps/iops/max values must be within [0, 1000000000000000]
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,bps=-2
|
|
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,bps=-2: bps/iops/max values must be within [0, 1000000000000000]
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,bps_rd=-3
|
|
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,bps_rd=-3: bps/iops/max values must be within [0, 1000000000000000]
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,bps_rd_max=-3
|
|
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,bps_rd_max=-3: bps/iops/max values must be within [0, 1000000000000000]
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,throttling.iops-total=-4
|
|
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,throttling.iops-total=-4: bps/iops/max values must be within [0, 1000000000000000]
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,throttling.bps-total=-5
|
|
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,throttling.bps-total=-5: bps/iops/max values must be within [0, 1000000000000000]
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,bps=0
|
|
QEMU X.Y.Z monitor - type 'help' for more information
|
|
(qemu) quit
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,bps=1
|
|
QEMU X.Y.Z monitor - type 'help' for more information
|
|
(qemu) quit
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,bps=1000000000000000
|
|
QEMU X.Y.Z monitor - type 'help' for more information
|
|
(qemu) quit
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,bps=1000000000000001
|
|
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,bps=1000000000000001: bps/iops/max values must be within [0, 1000000000000000]
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,bps=9999999999999999
|
|
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,bps=9999999999999999: bps/iops/max values must be within [0, 1000000000000000]
|
|
|
|
|
|
=== Parsing protocol from file name ===
|
|
|
|
Testing: -hda foo:bar
|
|
QEMU_PROG: -hda foo:bar: Unknown protocol 'foo'
|
|
|
|
Testing: -drive file=foo:bar
|
|
QEMU_PROG: -drive file=foo:bar: Unknown protocol 'foo'
|
|
|
|
Testing: -drive file.filename=foo:bar
|
|
QEMU_PROG: -drive file.filename=foo:bar: Could not open 'foo:bar': No such file or directory
|
|
|
|
Testing: -hda file:TEST_DIR/t.qcow2
|
|
QEMU X.Y.Z monitor - type 'help' for more information
|
|
(qemu) quit
|
|
|
|
Testing: -drive file=file:TEST_DIR/t.qcow2
|
|
QEMU X.Y.Z monitor - type 'help' for more information
|
|
(qemu) quit
|
|
|
|
Testing: -drive file.filename=file:TEST_DIR/t.qcow2
|
|
QEMU_PROG: -drive file.filename=file:TEST_DIR/t.qcow2: Could not open 'file:TEST_DIR/t.qcow2': No such file or directory
|
|
|
|
|
|
=== Snapshot mode ===
|
|
|
|
wrote 4096/4096 bytes at offset 0
|
|
4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
Testing: -drive file=TEST_DIR/t.qcow2,if=none,id=drive0 -snapshot
|
|
QEMU X.Y.Z monitor - type 'help' for more information
|
|
(qemu) qemu-io drive0 "write -P 0x22 0 4k"
|
|
wrote 4096/4096 bytes at offset 0
|
|
4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
(qemu) quit
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,snapshot=on,if=none,id=drive0
|
|
QEMU X.Y.Z monitor - type 'help' for more information
|
|
(qemu) qemu-io drive0 "write -P 0x22 0 4k"
|
|
wrote 4096/4096 bytes at offset 0
|
|
4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
(qemu) quit
|
|
|
|
Testing: -drive file.filename=TEST_DIR/t.qcow2,driver=qcow2,snapshot=on,if=none,id=drive0
|
|
QEMU X.Y.Z monitor - type 'help' for more information
|
|
(qemu) qemu-io drive0 "write -P 0x22 0 4k"
|
|
wrote 4096/4096 bytes at offset 0
|
|
4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
(qemu) quit
|
|
|
|
Testing: -drive file.filename=TEST_DIR/t.qcow2,driver=qcow2,if=none,id=drive0 -snapshot
|
|
QEMU X.Y.Z monitor - type 'help' for more information
|
|
(qemu) qemu-io drive0 "write -P 0x22 0 4k"
|
|
wrote 4096/4096 bytes at offset 0
|
|
4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
(qemu) quit
|
|
|
|
Testing: -drive file=file:TEST_DIR/t.qcow2,if=none,id=drive0 -snapshot
|
|
QEMU X.Y.Z monitor - type 'help' for more information
|
|
(qemu) qemu-io drive0 "write -P 0x22 0 4k"
|
|
wrote 4096/4096 bytes at offset 0
|
|
4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
(qemu) quit
|
|
|
|
Testing: -drive file=file:TEST_DIR/t.qcow2,snapshot=on,if=none,id=drive0
|
|
QEMU X.Y.Z monitor - type 'help' for more information
|
|
(qemu) qemu-io drive0 "write -P 0x22 0 4k"
|
|
wrote 4096/4096 bytes at offset 0
|
|
4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
(qemu) quit
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,if=none,id=drive0 -snapshot
|
|
QEMU X.Y.Z monitor - type 'help' for more information
|
|
(qemu) qemu-io drive0 "write -P 0x22 0 4k"
|
|
wrote 4096/4096 bytes at offset 0
|
|
4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
(qemu) quit
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,snapshot=on,if=none,id=drive0
|
|
QEMU X.Y.Z monitor - type 'help' for more information
|
|
(qemu) qemu-io drive0 "write -P 0x22 0 4k"
|
|
wrote 4096/4096 bytes at offset 0
|
|
4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
(qemu) quit
|
|
|
|
read 4096/4096 bytes at offset 0
|
|
4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
Testing: -drive file=TEST_DIR/t.qcow2,snapshot=off,if=none,id=drive0
|
|
QEMU X.Y.Z monitor - type 'help' for more information
|
|
(qemu) qemu-io drive0 "write -P 0x22 0 4k"
|
|
wrote 4096/4096 bytes at offset 0
|
|
4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
(qemu) quit
|
|
|
|
read 4096/4096 bytes at offset 0
|
|
4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
Testing: -drive file=TEST_DIR/t.qcow2,snapshot=on,if=none,id=drive0
|
|
QEMU X.Y.Z monitor - type 'help' for more information
|
|
(qemu) qemu-io drive0 "write -P 0x33 0 4k"
|
|
wrote 4096/4096 bytes at offset 0
|
|
4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
(qemu) commit drive0
|
|
(qemu) quit
|
|
|
|
read 4096/4096 bytes at offset 0
|
|
4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
Testing: -drive driver=null-co,snapshot=on
|
|
QEMU_PROG: -drive driver=null-co,snapshot=on: Could not get temporary filename: No such file or directory
|
|
|
|
Testing: -drive file=TEST_DIR/t.qcow2,snapshot=on,read-only=on,if=none,id=drive0
|
|
QEMU X.Y.Z monitor - type 'help' for more information
|
|
(qemu) info block
|
|
drive0 (NODE_NAME): json:{"backing": {"driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/t.qcow2"}}, "driver": "qcow2", "file": {"driver": "file", "filename": SNAPSHOT_PATH}} (qcow2, read-only)
|
|
Removable device: not locked, tray closed
|
|
Cache mode: writeback, ignore flushes
|
|
Backing file: TEST_DIR/t.qcow2 (chain depth: 1)
|
|
(qemu) quit
|
|
|
|
*** done
|