| ===================================== | 
 | QEMU Disk Network Block Device Server | 
 | ===================================== | 
 |  | 
 | Synopsis | 
 | -------- | 
 |  | 
 | **qemu-nbd** [*OPTION*]... *filename* | 
 |  | 
 | **qemu-nbd** -L [*OPTION*]... | 
 |  | 
 | **qemu-nbd** -d *dev* | 
 |  | 
 | Description | 
 | ----------- | 
 |  | 
 | Export a QEMU disk image using the NBD protocol. | 
 |  | 
 | Other uses: | 
 |  | 
 | - Bind a /dev/nbdX block device to a QEMU server (on Linux). | 
 | - As a client to query exports of a remote NBD server. | 
 |  | 
 | Options | 
 | ------- | 
 |  | 
 | .. program:: qemu-nbd | 
 |  | 
 | *filename* is a disk image filename, or a set of block | 
 | driver options if :option:`--image-opts` is specified. | 
 |  | 
 | *dev* is an NBD device. | 
 |  | 
 | .. option:: --object type,id=ID,... | 
 |  | 
 |   Define a new instance of the *type* object class identified by *ID*. | 
 |   See the :manpage:`qemu(1)` manual page for full details of the properties | 
 |   supported. The common object types that it makes sense to define are the | 
 |   ``secret`` object, which is used to supply passwords and/or encryption | 
 |   keys, and the ``tls-creds`` object, which is used to supply TLS | 
 |   credentials for the ``qemu-nbd`` server or client. | 
 |  | 
 | .. option:: -p, --port=PORT | 
 |  | 
 |   TCP port to listen on as a server, or connect to as a client | 
 |   (default ``10809``). | 
 |  | 
 | .. option:: -o, --offset=OFFSET | 
 |  | 
 |   The offset into the image. | 
 |  | 
 | .. option:: -b, --bind=IFACE | 
 |  | 
 |   The interface to bind to as a server, or connect to as a client | 
 |   (default ``0.0.0.0``). | 
 |  | 
 | .. option:: -k, --socket=PATH | 
 |  | 
 |   Use a unix socket with path *PATH*. | 
 |  | 
 | .. option:: --image-opts | 
 |  | 
 |   Treat *filename* as a set of image options, instead of a plain | 
 |   filename. If this flag is specified, the ``-f`` flag should | 
 |   not be used, instead the :option:`format=` option should be set. | 
 |  | 
 | .. option:: -f, --format=FMT | 
 |  | 
 |   Force the use of the block driver for format *FMT* instead of | 
 |   auto-detecting. | 
 |  | 
 | .. option:: -r, --read-only | 
 |  | 
 |   Export the disk as read-only. | 
 |  | 
 | .. option:: -A, --allocation-depth | 
 |  | 
 |   Expose allocation depth information via the | 
 |   ``qemu:allocation-depth`` metadata context accessible through | 
 |   NBD_OPT_SET_META_CONTEXT. | 
 |  | 
 | .. option:: -B, --bitmap=NAME | 
 |  | 
 |   If *filename* has a qcow2 persistent bitmap *NAME*, expose | 
 |   that bitmap via the ``qemu:dirty-bitmap:NAME`` metadata context | 
 |   accessible through NBD_OPT_SET_META_CONTEXT. | 
 |  | 
 | .. option:: -s, --snapshot | 
 |  | 
 |   Use *filename* as an external snapshot, create a temporary | 
 |   file with ``backing_file=``\ *filename*, redirect the write to | 
 |   the temporary one. | 
 |  | 
 | .. option:: -l, --load-snapshot=SNAPSHOT_PARAM | 
 |  | 
 |   Load an internal snapshot inside *filename* and export it | 
 |   as an read-only device, SNAPSHOT_PARAM format is | 
 |   ``snapshot.id=[ID],snapshot.name=[NAME]`` or ``[ID_OR_NAME]`` | 
 |  | 
 | .. option:: --cache=CACHE | 
 |  | 
 |   The cache mode to be used with the file. Valid values are: | 
 |   ``none``, ``writeback`` (the default), ``writethrough``, | 
 |   ``directsync`` and ``unsafe``. See the documentation of | 
 |   the emulator's ``-drive cache=...`` option for more info. | 
 |  | 
 | .. option:: -n, --nocache | 
 |  | 
 |   Equivalent to :option:`--cache=none`. | 
 |  | 
 | .. option:: --aio=AIO | 
 |  | 
 |   Set the asynchronous I/O mode between ``threads`` (the default), | 
 |   ``native`` (Linux only), and ``io_uring`` (Linux 5.1+). | 
 |  | 
 | .. option:: --discard=DISCARD | 
 |  | 
 |   Control whether ``discard`` (also known as ``trim`` or ``unmap``) | 
 |   requests are ignored or passed to the filesystem. *DISCARD* is one of | 
 |   ``ignore`` (or ``off``), ``unmap`` (or ``on``).  The default is | 
 |   ``ignore``. | 
 |  | 
 | .. option:: --detect-zeroes=DETECT_ZEROES | 
 |  | 
 |   Control the automatic conversion of plain zero writes by the OS to | 
 |   driver-specific optimized zero write commands.  *DETECT_ZEROES* is one of | 
 |   ``off``, ``on``, or ``unmap``.  ``unmap`` | 
 |   converts a zero write to an unmap operation and can only be used if | 
 |   *DISCARD* is set to ``unmap``.  The default is ``off``. | 
 |  | 
 | .. option:: -c, --connect=DEV | 
 |  | 
 |   Connect *filename* to NBD device *DEV* (Linux only). | 
 |  | 
 | .. option:: -d, --disconnect | 
 |  | 
 |   Disconnect the device *DEV* (Linux only). | 
 |  | 
 | .. option:: -e, --shared=NUM | 
 |  | 
 |   Allow up to *NUM* clients to share the device (default | 
 |   ``1``), 0 for unlimited. | 
 |  | 
 | .. option:: -t, --persistent | 
 |  | 
 |   Don't exit on the last connection. | 
 |  | 
 | .. option:: -x, --export-name=NAME | 
 |  | 
 |   Set the NBD volume export name (default of a zero-length string). | 
 |  | 
 | .. option:: -D, --description=DESCRIPTION | 
 |  | 
 |   Set the NBD volume export description, as a human-readable | 
 |   string. | 
 |  | 
 | .. option:: -L, --list | 
 |  | 
 |   Connect as a client and list all details about the exports exposed by | 
 |   a remote NBD server.  This enables list mode, and is incompatible | 
 |   with options that change behavior related to a specific export (such as | 
 |   :option:`--export-name`, :option:`--offset`, ...). | 
 |  | 
 | .. option:: --tls-creds=ID | 
 |  | 
 |   Enable mandatory TLS encryption for the server by setting the ID | 
 |   of the TLS credentials object previously created with the | 
 |   :option:`--object` option; or provide the credentials needed for | 
 |   connecting as a client in list mode. | 
 |  | 
 | .. option:: --tls-hostname=hostname | 
 |  | 
 |   When validating an x509 certificate received over a TLS connection, | 
 |   the hostname that the NBD client used to connect will be checked | 
 |   against information in the server provided certificate. Sometimes | 
 |   it might be required to override the hostname used to perform this | 
 |   check. For example, if the NBD client is using a tunnel from localhost | 
 |   to connect to the remote server, the :option:`--tls-hostname` option should | 
 |   be used to set the officially expected hostname of the remote NBD | 
 |   server. This can also be used if accessing NBD over a UNIX socket | 
 |   where there is no inherent hostname available. This is only permitted | 
 |   when acting as a NBD client with the :option:`--list` option. | 
 |  | 
 | .. option:: --fork | 
 |  | 
 |   Fork off the server process and exit the parent once the server is running. | 
 |  | 
 | .. option:: --pid-file=PATH | 
 |  | 
 |   Store the server's process ID in the given file. | 
 |  | 
 | .. option:: --tls-authz=ID | 
 |  | 
 |   Specify the ID of a qauthz object previously created with the | 
 |   :option:`--object` option. This will be used to authorize connecting users | 
 |   against their x509 distinguished name. | 
 |  | 
 | .. option:: -v, --verbose | 
 |  | 
 |   Display extra debugging information. This option also keeps the original | 
 |   *STDERR* stream open if the ``qemu-nbd`` process is daemonized due to | 
 |   other options like :option:`--fork` or :option:`-c`. | 
 |  | 
 | .. option:: -h, --help | 
 |  | 
 |   Display this 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 | 
 |  | 
 | Examples | 
 | -------- | 
 |  | 
 | Start a server listening on port 10809 that exposes only the | 
 | guest-visible contents of a qcow2 file, with no TLS encryption, and | 
 | with the default export name (an empty string). The command is | 
 | one-shot, and will block until the first successful client | 
 | disconnects: | 
 |  | 
 | :: | 
 |  | 
 |   qemu-nbd -f qcow2 file.qcow2 | 
 |  | 
 | Start a long-running server listening with encryption on port 10810, | 
 | and allow clients with a specific X.509 certificate to connect to | 
 | a 1 megabyte subset of a raw file, using the export name 'subset': | 
 |  | 
 | :: | 
 |  | 
 |   qemu-nbd \ | 
 |     --object tls-creds-x509,id=tls0,endpoint=server,dir=/path/to/qemutls \ | 
 |     --object 'authz-simple,id=auth0,identity=CN=laptop.example.com,,\ | 
 |               O=Example Org,,L=London,,ST=London,,C=GB' \ | 
 |     --tls-creds tls0 --tls-authz auth0 \ | 
 |     -t -x subset -p 10810 \ | 
 |     --image-opts driver=raw,offset=1M,size=1M,file.driver=file,file.filename=file.raw | 
 |  | 
 | Serve a read-only copy of a guest image over a Unix socket with as | 
 | many as 5 simultaneous readers, with a persistent process forked as a | 
 | daemon: | 
 |  | 
 | :: | 
 |  | 
 |   qemu-nbd --fork --persistent --shared=5 --socket=/path/to/sock \ | 
 |     --read-only --format=qcow2 file.qcow2 | 
 |  | 
 | Expose the guest-visible contents of a qcow2 file via a block device | 
 | /dev/nbd0 (and possibly creating /dev/nbd0p1 and friends for | 
 | partitions found within), then disconnect the device when done. | 
 | Access to bind ``qemu-nbd`` to a /dev/nbd device generally requires root | 
 | privileges, and may also require the execution of ``modprobe nbd`` | 
 | to enable the kernel NBD client module.  *CAUTION*: Do not use | 
 | this method to mount filesystems from an untrusted guest image - a | 
 | malicious guest may have prepared the image to attempt to trigger | 
 | kernel bugs in partition probing or file system mounting. | 
 |  | 
 | :: | 
 |  | 
 |   qemu-nbd -c /dev/nbd0 -f qcow2 file.qcow2 | 
 |   qemu-nbd -d /dev/nbd0 | 
 |  | 
 | Query a remote server to see details about what export(s) it is | 
 | serving on port 10809, and authenticating via PSK: | 
 |  | 
 | :: | 
 |  | 
 |   qemu-nbd \ | 
 |     --object tls-creds-psk,id=tls0,dir=/tmp/keys,username=eblake,endpoint=client \ | 
 |     --tls-creds tls0 -L -b remote.example.com | 
 |  | 
 | See also | 
 | -------- | 
 |  | 
 | :manpage:`qemu(1)`, :manpage:`qemu-img(1)` |