pub struct BlockDev {
pub driver: String,
pub node_name: Option<String>,
pub discard: Option<IgnoreUnmap>,
pub cache_direct: Option<OnOff>,
pub cache_no_flush: Option<OnOff>,
pub read_only: Option<OnOff>,
pub auto_read_only: Option<OnOff>,
pub force_share: Option<OnOff>,
pub detect_zeroes: Option<OnOffUnmap>,
pub driver_opts: Option<HashMap<String, String>>,
}
Expand description
Define a new block driver node. Some of the options apply to all block drivers, other options are only accepted for a specific block driver. See below for a list of generic options and options for the most common block drivers.
Options that expect a reference to another node (e.g. file
) can
be given in two ways. Either you specify the node name of an already
existing node (file=node-name), or you define a new node inline,
adding options for the referenced node after a dot
(file.filename=path,file.aio=native).
A block driver node created with -blockdev
can be used for a
guest device by specifying its node name for the drive
property
in a -device
argument that defines a block device.
TODO
- constrain driver opts
Fields§
§driver: String
Specifies the block driver to use for the given node.
node_name: Option<String>
This defines the name of the block driver node by which it
will be referenced later. The name must be unique, i.e. it
must not match the name of a different block driver node, or
(if you use -drive
as well) the ID of a drive.
If no node name is specified, it is automatically generated. The generated node name is not intended to be predictable and changes between QEMU invocations. For the top level, an explicit node name must be specified.
discard: Option<IgnoreUnmap>
discard is one of “ignore” (or “off”) or “unmap” (or “on”)
and controls whether discard
(also known as trim
or
unmap
) requests are ignored or passed to the filesystem.
Some machine types may not support discard requests.
cache_direct: Option<OnOff>
The host page cache can be avoided with cache.direct=on
.
This will attempt to do disk IO directly to the guest’s
memory. QEMU may still perform an internal copy of the data.
cache_no_flush: Option<OnOff>
In case you don’t care about data integrity over host
failures, you can use cache.no-flush=on
. This option
tells QEMU that it never needs to write any data to the disk
but can instead keep things in cache. If anything goes
wrong, like your host losing power, the disk storage getting
disconnected accidentally, etc. your image will most
probably be rendered unusable.
read_only: Option<OnOff>
Open the node read-only. Guest write attempts will fail.
Note that some block drivers support only read-only access,
either generally or in certain configurations. In this case,
the default value read-only=off
does not work and the
option must be specified explicitly.
auto_read_only: Option<OnOff>
If auto-read-only=on
is set, QEMU may fall back to
read-only usage even when read-only=off
is requested, or
even switch between modes as needed, e.g. depending on
whether the image file is writable or whether a writing user
is attached to the node.
Override the image locking system of QEMU by forcing the node to utilize weaker shared access for permissions where it would normally request exclusive access. When there is the potential for multiple instances to have the same file open (whether this invocation of QEMU is the first or the second instance), both instances must permit shared access for the second instance to succeed at opening the file.
Enabling force-share=on
requires read-only=on
.
detect_zeroes: Option<OnOffUnmap>
detect-zeroes is “off”, “on” or “unmap” and enables the
automatic conversion of plain zero writes by the OS to
driver specific optimized zero write commands. You may even
choose “unmap” if discard is set to “unmap” to allow a zero
write to be converted to an unmap
operation.
driver_opts: Option<HashMap<String, String>>