|  | ===================================== | 
|  | 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)` |