xref: /qemu/docs/tools/qemu-nbd.rst (revision 617017f8dce8d8f0cd4d175cbfaac0b4077b4a1e)
1a4340e7cSPierrick Bouvier.. _qemu-nbd:
2a4340e7cSPierrick Bouvier
38a1f7d29SPaolo Bonzini=====================================
487c0868fSPeter MaydellQEMU Disk Network Block Device Server
587c0868fSPeter Maydell=====================================
687c0868fSPeter Maydell
787c0868fSPeter MaydellSynopsis
887c0868fSPeter Maydell--------
987c0868fSPeter Maydell
1087c0868fSPeter Maydell**qemu-nbd** [*OPTION*]... *filename*
1187c0868fSPeter Maydell
1287c0868fSPeter Maydell**qemu-nbd** -L [*OPTION*]...
1387c0868fSPeter Maydell
1487c0868fSPeter Maydell**qemu-nbd** -d *dev*
1587c0868fSPeter Maydell
1687c0868fSPeter MaydellDescription
1787c0868fSPeter Maydell-----------
1887c0868fSPeter Maydell
1987c0868fSPeter MaydellExport a QEMU disk image using the NBD protocol.
2087c0868fSPeter Maydell
2187c0868fSPeter MaydellOther uses:
2287c0868fSPeter Maydell
2387c0868fSPeter Maydell- Bind a /dev/nbdX block device to a QEMU server (on Linux).
2487c0868fSPeter Maydell- As a client to query exports of a remote NBD server.
2587c0868fSPeter Maydell
2687c0868fSPeter MaydellOptions
2787c0868fSPeter Maydell-------
2887c0868fSPeter Maydell
2987c0868fSPeter Maydell.. program:: qemu-nbd
3087c0868fSPeter Maydell
3187c0868fSPeter Maydell*filename* is a disk image filename, or a set of block
32a2c2d44aSEric Blakedriver options if :option:`--image-opts` is specified.
3387c0868fSPeter Maydell
3487c0868fSPeter Maydell*dev* is an NBD device.
3587c0868fSPeter Maydell
368f75cae2SRao, Lei.. option:: --object type,id=ID,...
3787c0868fSPeter Maydell
3887c0868fSPeter Maydell  Define a new instance of the *type* object class identified by *ID*.
3987c0868fSPeter Maydell  See the :manpage:`qemu(1)` manual page for full details of the properties
4087c0868fSPeter Maydell  supported. The common object types that it makes sense to define are the
4187c0868fSPeter Maydell  ``secret`` object, which is used to supply passwords and/or encryption
4287c0868fSPeter Maydell  keys, and the ``tls-creds`` object, which is used to supply TLS
43c5ba6219SPhilippe Mathieu-Daudé  credentials for the ``qemu-nbd`` server or client.
4487c0868fSPeter Maydell
4587c0868fSPeter Maydell.. option:: -p, --port=PORT
4687c0868fSPeter Maydell
4787c0868fSPeter Maydell  TCP port to listen on as a server, or connect to as a client
4887c0868fSPeter Maydell  (default ``10809``).
4987c0868fSPeter Maydell
5087c0868fSPeter Maydell.. option:: -o, --offset=OFFSET
5187c0868fSPeter Maydell
5287c0868fSPeter Maydell  The offset into the image.
5387c0868fSPeter Maydell
5487c0868fSPeter Maydell.. option:: -b, --bind=IFACE
5587c0868fSPeter Maydell
5687c0868fSPeter Maydell  The interface to bind to as a server, or connect to as a client
5787c0868fSPeter Maydell  (default ``0.0.0.0``).
5887c0868fSPeter Maydell
5987c0868fSPeter Maydell.. option:: -k, --socket=PATH
6087c0868fSPeter Maydell
6187c0868fSPeter Maydell  Use a unix socket with path *PATH*.
6287c0868fSPeter Maydell
6387c0868fSPeter Maydell.. option:: --image-opts
6487c0868fSPeter Maydell
6587c0868fSPeter Maydell  Treat *filename* as a set of image options, instead of a plain
6687c0868fSPeter Maydell  filename. If this flag is specified, the ``-f`` flag should
6787c0868fSPeter Maydell  not be used, instead the :option:`format=` option should be set.
6887c0868fSPeter Maydell
6987c0868fSPeter Maydell.. option:: -f, --format=FMT
7087c0868fSPeter Maydell
7187c0868fSPeter Maydell  Force the use of the block driver for format *FMT* instead of
7287c0868fSPeter Maydell  auto-detecting.
7387c0868fSPeter Maydell
7487c0868fSPeter Maydell.. option:: -r, --read-only
7587c0868fSPeter Maydell
7687c0868fSPeter Maydell  Export the disk as read-only.
7787c0868fSPeter Maydell
78dbc7b014SEric Blake.. option:: -A, --allocation-depth
79dbc7b014SEric Blake
80dbc7b014SEric Blake  Expose allocation depth information via the
81dbc7b014SEric Blake  ``qemu:allocation-depth`` metadata context accessible through
82dbc7b014SEric Blake  NBD_OPT_SET_META_CONTEXT.
83dbc7b014SEric Blake
8487c0868fSPeter Maydell.. option:: -B, --bitmap=NAME
8587c0868fSPeter Maydell
8687c0868fSPeter Maydell  If *filename* has a qcow2 persistent bitmap *NAME*, expose
87dbc7b014SEric Blake  that bitmap via the ``qemu:dirty-bitmap:NAME`` metadata context
8887c0868fSPeter Maydell  accessible through NBD_OPT_SET_META_CONTEXT.
8987c0868fSPeter Maydell
9087c0868fSPeter Maydell.. option:: -s, --snapshot
9187c0868fSPeter Maydell
9287c0868fSPeter Maydell  Use *filename* as an external snapshot, create a temporary
9387c0868fSPeter Maydell  file with ``backing_file=``\ *filename*, redirect the write to
9487c0868fSPeter Maydell  the temporary one.
9587c0868fSPeter Maydell
9687c0868fSPeter Maydell.. option:: -l, --load-snapshot=SNAPSHOT_PARAM
9787c0868fSPeter Maydell
9887c0868fSPeter Maydell  Load an internal snapshot inside *filename* and export it
9987c0868fSPeter Maydell  as an read-only device, SNAPSHOT_PARAM format is
10087c0868fSPeter Maydell  ``snapshot.id=[ID],snapshot.name=[NAME]`` or ``[ID_OR_NAME]``
10187c0868fSPeter Maydell
10287c0868fSPeter Maydell.. option:: --cache=CACHE
10387c0868fSPeter Maydell
10409615257SNir Soffer  The cache mode to be used with the file. Valid values are:
10509615257SNir Soffer  ``none``, ``writeback`` (the default), ``writethrough``,
10609615257SNir Soffer  ``directsync`` and ``unsafe``. See the documentation of
10709615257SNir Soffer  the emulator's ``-drive cache=...`` option for more info.
10887c0868fSPeter Maydell
10987c0868fSPeter Maydell.. option:: -n, --nocache
11087c0868fSPeter Maydell
11187c0868fSPeter Maydell  Equivalent to :option:`--cache=none`.
11287c0868fSPeter Maydell
11387c0868fSPeter Maydell.. option:: --aio=AIO
11487c0868fSPeter Maydell
1157680274dSAarushi Mehta  Set the asynchronous I/O mode between ``threads`` (the default),
1167680274dSAarushi Mehta  ``native`` (Linux only), and ``io_uring`` (Linux 5.1+).
11787c0868fSPeter Maydell
11887c0868fSPeter Maydell.. option:: --discard=DISCARD
11987c0868fSPeter Maydell
12087c0868fSPeter Maydell  Control whether ``discard`` (also known as ``trim`` or ``unmap``)
12187c0868fSPeter Maydell  requests are ignored or passed to the filesystem. *DISCARD* is one of
12287c0868fSPeter Maydell  ``ignore`` (or ``off``), ``unmap`` (or ``on``).  The default is
12387c0868fSPeter Maydell  ``ignore``.
12487c0868fSPeter Maydell
12587c0868fSPeter Maydell.. option:: --detect-zeroes=DETECT_ZEROES
12687c0868fSPeter Maydell
12787c0868fSPeter Maydell  Control the automatic conversion of plain zero writes by the OS to
12887c0868fSPeter Maydell  driver-specific optimized zero write commands.  *DETECT_ZEROES* is one of
12987c0868fSPeter Maydell  ``off``, ``on``, or ``unmap``.  ``unmap``
13087c0868fSPeter Maydell  converts a zero write to an unmap operation and can only be used if
13187c0868fSPeter Maydell  *DISCARD* is set to ``unmap``.  The default is ``off``.
13287c0868fSPeter Maydell
13387c0868fSPeter Maydell.. option:: -c, --connect=DEV
13487c0868fSPeter Maydell
13587c0868fSPeter Maydell  Connect *filename* to NBD device *DEV* (Linux only).
13687c0868fSPeter Maydell
13787c0868fSPeter Maydell.. option:: -d, --disconnect
13887c0868fSPeter Maydell
13987c0868fSPeter Maydell  Disconnect the device *DEV* (Linux only).
14087c0868fSPeter Maydell
14187c0868fSPeter Maydell.. option:: -e, --shared=NUM
14287c0868fSPeter Maydell
14387c0868fSPeter Maydell  Allow up to *NUM* clients to share the device (default
14458a6fdccSEric Blake  ``1``), 0 for unlimited.
14587c0868fSPeter Maydell
14687c0868fSPeter Maydell.. option:: -t, --persistent
14787c0868fSPeter Maydell
14887c0868fSPeter Maydell  Don't exit on the last connection.
14987c0868fSPeter Maydell
15087c0868fSPeter Maydell.. option:: -x, --export-name=NAME
15187c0868fSPeter Maydell
15287c0868fSPeter Maydell  Set the NBD volume export name (default of a zero-length string).
15387c0868fSPeter Maydell
15487c0868fSPeter Maydell.. option:: -D, --description=DESCRIPTION
15587c0868fSPeter Maydell
15687c0868fSPeter Maydell  Set the NBD volume export description, as a human-readable
15787c0868fSPeter Maydell  string.
15887c0868fSPeter Maydell
159*617017f8SEric Blake.. option:: --handshake-limit=N
160*617017f8SEric Blake
161*617017f8SEric Blake  Set the timeout for a client to successfully complete its handshake
162*617017f8SEric Blake  to N seconds (default 10), or 0 for no limit.
163*617017f8SEric Blake
16487c0868fSPeter Maydell.. option:: -L, --list
16587c0868fSPeter Maydell
16687c0868fSPeter Maydell  Connect as a client and list all details about the exports exposed by
16787c0868fSPeter Maydell  a remote NBD server.  This enables list mode, and is incompatible
16887c0868fSPeter Maydell  with options that change behavior related to a specific export (such as
16987c0868fSPeter Maydell  :option:`--export-name`, :option:`--offset`, ...).
17087c0868fSPeter Maydell
17187c0868fSPeter Maydell.. option:: --tls-creds=ID
17287c0868fSPeter Maydell
17387c0868fSPeter Maydell  Enable mandatory TLS encryption for the server by setting the ID
174a2c2d44aSEric Blake  of the TLS credentials object previously created with the
175a2c2d44aSEric Blake  :option:`--object` option; or provide the credentials needed for
176a2c2d44aSEric Blake  connecting as a client in list mode.
17787c0868fSPeter Maydell
178003b2b25SDaniel P. Berrangé.. option:: --tls-hostname=hostname
179003b2b25SDaniel P. Berrangé
180003b2b25SDaniel P. Berrangé  When validating an x509 certificate received over a TLS connection,
181003b2b25SDaniel P. Berrangé  the hostname that the NBD client used to connect will be checked
182003b2b25SDaniel P. Berrangé  against information in the server provided certificate. Sometimes
183003b2b25SDaniel P. Berrangé  it might be required to override the hostname used to perform this
184003b2b25SDaniel P. Berrangé  check. For example, if the NBD client is using a tunnel from localhost
185a2c2d44aSEric Blake  to connect to the remote server, the :option:`--tls-hostname` option should
186003b2b25SDaniel P. Berrangé  be used to set the officially expected hostname of the remote NBD
187003b2b25SDaniel P. Berrangé  server. This can also be used if accessing NBD over a UNIX socket
188003b2b25SDaniel P. Berrangé  where there is no inherent hostname available. This is only permitted
189a2c2d44aSEric Blake  when acting as a NBD client with the :option:`--list` option.
190003b2b25SDaniel P. Berrangé
19187c0868fSPeter Maydell.. option:: --fork
19287c0868fSPeter Maydell
19387c0868fSPeter Maydell  Fork off the server process and exit the parent once the server is running.
19487c0868fSPeter Maydell
19587c0868fSPeter Maydell.. option:: --pid-file=PATH
19687c0868fSPeter Maydell
19787c0868fSPeter Maydell  Store the server's process ID in the given file.
19887c0868fSPeter Maydell
19987c0868fSPeter Maydell.. option:: --tls-authz=ID
20087c0868fSPeter Maydell
20187c0868fSPeter Maydell  Specify the ID of a qauthz object previously created with the
20287c0868fSPeter Maydell  :option:`--object` option. This will be used to authorize connecting users
20387c0868fSPeter Maydell  against their x509 distinguished name.
20487c0868fSPeter Maydell
20587c0868fSPeter Maydell.. option:: -v, --verbose
20687c0868fSPeter Maydell
20735e087deSDenis V. Lunev  Display extra debugging information. This option also keeps the original
20835e087deSDenis V. Lunev  *STDERR* stream open if the ``qemu-nbd`` process is daemonized due to
20935e087deSDenis V. Lunev  other options like :option:`--fork` or :option:`-c`.
21087c0868fSPeter Maydell
21187c0868fSPeter Maydell.. option:: -h, --help
21287c0868fSPeter Maydell
21387c0868fSPeter Maydell  Display this help and exit.
21487c0868fSPeter Maydell
21587c0868fSPeter Maydell.. option:: -V, --version
21687c0868fSPeter Maydell
21787c0868fSPeter Maydell  Display version information and exit.
21887c0868fSPeter Maydell
21987c0868fSPeter Maydell.. option:: -T, --trace [[enable=]PATTERN][,events=FILE][,file=FILE]
22087c0868fSPeter Maydell
221bb43ee6cSPeter Maydell  .. include:: ../qemu-option-trace.rst.inc
22287c0868fSPeter Maydell
22387c0868fSPeter MaydellExamples
22487c0868fSPeter Maydell--------
22587c0868fSPeter Maydell
22687c0868fSPeter MaydellStart a server listening on port 10809 that exposes only the
22787c0868fSPeter Maydellguest-visible contents of a qcow2 file, with no TLS encryption, and
22887c0868fSPeter Maydellwith the default export name (an empty string). The command is
22987c0868fSPeter Maydellone-shot, and will block until the first successful client
23087c0868fSPeter Maydelldisconnects:
23187c0868fSPeter Maydell
23287c0868fSPeter Maydell::
23387c0868fSPeter Maydell
23487c0868fSPeter Maydell  qemu-nbd -f qcow2 file.qcow2
23587c0868fSPeter Maydell
23687c0868fSPeter MaydellStart a long-running server listening with encryption on port 10810,
2372d2e4843SThomas Huthand allow clients with a specific X.509 certificate to connect to
23887c0868fSPeter Maydella 1 megabyte subset of a raw file, using the export name 'subset':
23987c0868fSPeter Maydell
24087c0868fSPeter Maydell::
24187c0868fSPeter Maydell
24287c0868fSPeter Maydell  qemu-nbd \
24387c0868fSPeter Maydell    --object tls-creds-x509,id=tls0,endpoint=server,dir=/path/to/qemutls \
24487c0868fSPeter Maydell    --object 'authz-simple,id=auth0,identity=CN=laptop.example.com,,\
24587c0868fSPeter Maydell              O=Example Org,,L=London,,ST=London,,C=GB' \
24687c0868fSPeter Maydell    --tls-creds tls0 --tls-authz auth0 \
24787c0868fSPeter Maydell    -t -x subset -p 10810 \
24887c0868fSPeter Maydell    --image-opts driver=raw,offset=1M,size=1M,file.driver=file,file.filename=file.raw
24987c0868fSPeter Maydell
2500bc16997SEric BlakeServe a read-only copy of a guest image over a Unix socket with as
2510bc16997SEric Blakemany as 5 simultaneous readers, with a persistent process forked as a
2520bc16997SEric Blakedaemon:
25387c0868fSPeter Maydell
25487c0868fSPeter Maydell::
25587c0868fSPeter Maydell
25687c0868fSPeter Maydell  qemu-nbd --fork --persistent --shared=5 --socket=/path/to/sock \
2570bc16997SEric Blake    --read-only --format=qcow2 file.qcow2
25887c0868fSPeter Maydell
25987c0868fSPeter MaydellExpose the guest-visible contents of a qcow2 file via a block device
26087c0868fSPeter Maydell/dev/nbd0 (and possibly creating /dev/nbd0p1 and friends for
26187c0868fSPeter Maydellpartitions found within), then disconnect the device when done.
262c5ba6219SPhilippe Mathieu-DaudéAccess to bind ``qemu-nbd`` to a /dev/nbd device generally requires root
26387c0868fSPeter Maydellprivileges, and may also require the execution of ``modprobe nbd``
26487c0868fSPeter Maydellto enable the kernel NBD client module.  *CAUTION*: Do not use
26587c0868fSPeter Maydellthis method to mount filesystems from an untrusted guest image - a
26687c0868fSPeter Maydellmalicious guest may have prepared the image to attempt to trigger
26787c0868fSPeter Maydellkernel bugs in partition probing or file system mounting.
26887c0868fSPeter Maydell
26987c0868fSPeter Maydell::
27087c0868fSPeter Maydell
27187c0868fSPeter Maydell  qemu-nbd -c /dev/nbd0 -f qcow2 file.qcow2
27287c0868fSPeter Maydell  qemu-nbd -d /dev/nbd0
27387c0868fSPeter Maydell
27487c0868fSPeter MaydellQuery a remote server to see details about what export(s) it is
27587c0868fSPeter Maydellserving on port 10809, and authenticating via PSK:
27687c0868fSPeter Maydell
27787c0868fSPeter Maydell::
27887c0868fSPeter Maydell
27987c0868fSPeter Maydell  qemu-nbd \
28087c0868fSPeter Maydell    --object tls-creds-psk,id=tls0,dir=/tmp/keys,username=eblake,endpoint=client \
28187c0868fSPeter Maydell    --tls-creds tls0 -L -b remote.example.com
28287c0868fSPeter Maydell
28387c0868fSPeter MaydellSee also
28487c0868fSPeter Maydell--------
28587c0868fSPeter Maydell
28687c0868fSPeter Maydell:manpage:`qemu(1)`, :manpage:`qemu-img(1)`
287