| QEMU Storage Daemon |
| =================== |
| |
| Synopsis |
| -------- |
| |
| **qemu-storage-daemon** [options] |
| |
| Description |
| ----------- |
| |
| qemu-storage-daemon provides disk image functionality from QEMU, qemu-img, and |
| qemu-nbd in a long-running process controlled via QMP commands without running |
| a virtual machine. It can export disk images, run block job operations, and |
| perform other disk-related operations. The daemon is controlled via a QMP |
| monitor and initial configuration from the command-line. |
| |
| The daemon offers the following subset of QEMU features: |
| |
| * Block nodes |
| * Block jobs |
| * Block exports |
| * Throttle groups |
| * Character devices |
| * Crypto and secrets |
| * QMP |
| * IOThreads |
| |
| Commands can be sent over a QEMU Monitor Protocol (QMP) connection. See the |
| :manpage:`qemu-storage-daemon-qmp-ref(7)` manual page for a description of the |
| commands. |
| |
| The daemon runs until it is stopped using the ``quit`` QMP command or |
| SIGINT/SIGHUP/SIGTERM. |
| |
| **Warning:** Never modify images in use by a running virtual machine or any |
| other process; this may destroy the image. Also, be aware that querying an |
| image that is being modified by another process may encounter inconsistent |
| state. |
| |
| Options |
| ------- |
| |
| .. program:: qemu-storage-daemon |
| |
| Standard options: |
| |
| .. option:: -h, --help |
| |
| Display help and exit |
| |
| .. option:: -V, --version |
| |
| Display version information and exit |
| |
| .. option:: -T, --trace [[enable=]PATTERN][,events=FILE][,file=FILE] |
| |
| .. include:: ../qemu-option-trace.rst.inc |
| |
| .. option:: --blockdev BLOCKDEVDEF |
| |
| is a block node definition. See the :manpage:`qemu(1)` manual page for a |
| description of block node properties and the :manpage:`qemu-block-drivers(7)` |
| manual page for a description of driver-specific parameters. |
| |
| .. option:: --chardev CHARDEVDEF |
| |
| is a character device definition. See the :manpage:`qemu(1)` manual page for |
| a description of character device properties. A common character device |
| definition configures a UNIX domain socket:: |
| |
| --chardev socket,id=char1,path=/tmp/qmp.sock,server,nowait |
| |
| .. option:: --export [type=]nbd,id=<id>,node-name=<node-name>[,name=<export-name>][,writable=on|off][,bitmap=<name>] |
| --export [type=]vhost-user-blk,id=<id>,node-name=<node-name>,addr.type=unix,addr.path=<socket-path>[,writable=on|off][,logical-block-size=<block-size>][,num-queues=<num-queues>] |
| --export [type=]vhost-user-blk,id=<id>,node-name=<node-name>,addr.type=fd,addr.str=<fd>[,writable=on|off][,logical-block-size=<block-size>][,num-queues=<num-queues>] |
| |
| is a block export definition. ``node-name`` is the block node that should be |
| exported. ``writable`` determines whether or not the export allows write |
| requests for modifying data (the default is off). |
| |
| The ``nbd`` export type requires ``--nbd-server`` (see below). ``name`` is |
| the NBD export name. ``bitmap`` is the name of a dirty bitmap reachable from |
| the block node, so the NBD client can use NBD_OPT_SET_META_CONTEXT with the |
| metadata context name "qemu:dirty-bitmap:BITMAP" to inspect the bitmap. |
| |
| The ``vhost-user-blk`` export type takes a vhost-user socket address on which |
| it accept incoming connections. Both |
| ``addr.type=unix,addr.path=<socket-path>`` for UNIX domain sockets and |
| ``addr.type=fd,addr.str=<fd>`` for file descriptor passing are supported. |
| ``logical-block-size`` sets the logical block size in bytes (the default is |
| 512). ``num-queues`` sets the number of virtqueues (the default is 1). |
| |
| .. option:: --monitor MONITORDEF |
| |
| is a QMP monitor definition. See the :manpage:`qemu(1)` manual page for |
| a description of QMP monitor properties. A common QMP monitor definition |
| configures a monitor on character device ``char1``:: |
| |
| --monitor chardev=char1 |
| |
| .. option:: --nbd-server addr.type=inet,addr.host=<host>,addr.port=<port>[,tls-creds=<id>][,tls-authz=<id>][,max-connections=<n>] |
| --nbd-server addr.type=unix,addr.path=<path>[,tls-creds=<id>][,tls-authz=<id>][,max-connections=<n>] |
| |
| is a server for NBD exports. Both TCP and UNIX domain sockets are supported. |
| TLS encryption can be configured using ``--object`` tls-creds-* and authz-* |
| secrets (see below). |
| |
| To configure an NBD server on UNIX domain socket path ``/tmp/nbd.sock``:: |
| |
| --nbd-server addr.type=unix,addr.path=/tmp/nbd.sock |
| |
| .. option:: --object help |
| --object <type>,help |
| --object <type>[,<property>=<value>...] |
| |
| is a QEMU user creatable object definition. List object types with ``help``. |
| List object properties with ``<type>,help``. See the :manpage:`qemu(1)` |
| manual page for a description of the object properties. |
| |
| Examples |
| -------- |
| Launch the daemon with QMP monitor socket ``qmp.sock`` so clients can execute |
| QMP commands:: |
| |
| $ qemu-storage-daemon \ |
| --chardev socket,path=qmp.sock,server,nowait,id=char1 \ |
| --monitor chardev=char1 |
| |
| Export raw image file ``disk.img`` over NBD UNIX domain socket ``nbd.sock``:: |
| |
| $ qemu-storage-daemon \ |
| --blockdev driver=file,node-name=disk,filename=disk.img \ |
| --nbd-server addr.type=unix,addr.path=nbd.sock \ |
| --export type=nbd,id=export,node-name=disk,writable=on |
| |
| Export a qcow2 image file ``disk.qcow2`` as a vhosts-user-blk device over UNIX |
| domain socket ``vhost-user-blk.sock``:: |
| |
| $ qemu-storage-daemon \ |
| --blockdev driver=file,node-name=file,filename=disk.qcow2 \ |
| --blockdev driver=qcow2,node-name=qcow2,file=file \ |
| --export type=vhost-user-blk,id=export,addr.type=unix,addr.path=vhost-user-blk.sock,node-name=qcow2 |
| |
| See also |
| -------- |
| |
| :manpage:`qemu(1)`, :manpage:`qemu-block-drivers(7)`, :manpage:`qemu-storage-daemon-qmp-ref(7)` |