Provided by: nbd-client_3.23-3ubuntu1.22.04.1_amd64 bug

NAME

       nbd-client - connect to a server running nbd-server(1), to use its    exported block device

SYNOPSIS

       nbd-client  host  [  port ] nbd-device [ -connections num ] [ -sdp ] [ -swap ] [ -persist ] [ -nofork ] [
       -nonetlink ] [ -systemd-mark ] [ -readonly ] [ -preinit ] [ -block-size block size ] [ -size  bytes  ]  [
       -timeout  seconds ] [ -name name ] [ -certfile certfile ] [ -keyfile keyfile ] [ -cacertfile cacertfile ]
       [ -tlshostname hostname ]

       nbd-client -unix path nbd-device [ -connections num ] [ -sdp ] [ -swap ] [  -persist  ]  [  -nofork  ]  [
       -nonetlink  ]  [  -systemd-mark ] [ -readonly ] [ -preinit ] [ -block-size block size ] [ -size bytes ] [
       -timeout seconds ] [ -name name ]

       nbd-client nbd-device

       nbd-client -d nbd-device

       nbd-client -c nbd-device

       nbd-client -l host [ port ]

       nbd-client [ -netlink ] -l host

DESCRIPTION

       With nbd-client, you can connect to a server running nbd-server,  thus  using  raw  diskspace  from  that
       server as a blockdevice on the local client.

       To  do  this,  support from the Linux Kernel is necessary, in the form of the Network Block Device (NBD).
       When you have that, either in the kernel, or as a module, you can connect to an NBD server  and  use  its
       exported file through a block special file with major mode 43.

       Optionally, long options can also be specified with two leading dashes.

OPTIONS

       The following options are supported:

       -block-size block size

       -b     Use  a  blocksize  of  "block size". Default is 1024; allowed values are either 512, 1024, 2048 or
              4096

       -connections num

       -C     Use num connections to the server, to allow speeding up request handling, at the  cost  of  higher
              resource  usage  on  the  server.  Use of this option requires kernel support available first with
              Linux 4.9.

       host   The hostname or IP address of the machine running nbd-server.  Since  2.9.15,  the  NBD  utilities
              support IPv6.

       -timeout seconds

       -t     Set  the connection timeout to "seconds". For this to work, you need a kernel with support for the
              NBD_SET_TIMEOUT ioctl; this was introduced into Linus' tree on 2007-10-11, and  will  be  part  of
              kernel 2.6.24.

       port   The TCP port on which nbd-server is running at the server.

              The port number defaults to 10809, the IANA-assigned port number for the NBD protocol.

              Previous versions of the nbd tools supported an older version of the negotiation protocol known as
              "oldstyle".  This protocol version is no longer supported as of version 3.11 of  the  nbd  support
              tools.

       nbd-device
              The  block  special file (/dev entry) which this nbd-client should connect to, specified as a full
              path.

              When the mode is used wherein no hostname or export name is specified, nbd-client will look up the
              necessary configuration in the nbdtab file. For more information, see nbdtab(5).

       -check

       -c     Check whether the specified nbd device is connected.

              If  the device is connected, nbd-client will exit with an exit state of 0 and print the PID of the
              nbd-client instance that connected it to stdout.

              If the device is not connected or does not exist (for example  because  the  nbd  module  was  not
              loaded), nbd-client will exit with an exit state of 1 and not print anything on stdout.

              If  an  error  occurred,  nbd-client  will exit with an exit state of 2, and not print anything on
              stdout either.

       -disconnect

       -d     Disconnect the specified nbd device from the server

       -list

       -l     Ask the server for a list of available exports. If the server is exporting over IPv6  as  well  as
              over IPv4, this will list all exports twice; otherwise, it should list them all only once.

              Note  that this option only works with nbd-server processes running version 3.1 or above, and must
              be enabled in server configuration (with the "allowlist" option) before it can be used.

       -nonetlink

       -L     Starting with version 3.17, nbd-client will default to using the netlink interface to configure an
              NBD device. This option allows to use the older ioctl() interface to configure the device.

              This  option  is  only available if nbd-client was compiled against libnl-genl. If that is not the
              case, nbd-client will only be able to use  the  ioctl  interface  (and  the  option  will  not  be
              available).

              Note  that a future version of nbd-client will require the use of netlink, but it has not yet been
              decided when that will be the case.

       -persist

       -p     When this option is specified, nbd-client will immediately try to reconnect an nbd device  if  the
              connection ever drops unexpectedly due to a lost server or something similar.

       -preinit

       -P     When  this  option  is  specified, nbd-client will skip the usual negotiation with the server, and
              hand the socket to the kernel immediately after connecting.  Only  use  this  when  connecting  to
              specialized  NBD  servers  specifically  designed for it. This requires specifying the size of the
              device via the -B option, and does not support TLS.

       -readonly

       -R     When this option is specified, nbd-client will tell the kernel to treat the device  as  read-only,
              even if the server would allow writes.

       -size bytes

       -B bytes
              Force  the  device  size to the specified number of bytes, rather than using the value from server
              negotiation. Must be a multiple of the block size. If using preinit (-P) to skip negotiation, this
              option is required.

       -sdp

       -S     Connect  to  the  server using the Socket Direct Protocol (SDP), rather than IP. See nbd-server(5)
              for details.

       -swap

       -s     Specifies that this NBD device will  be  used  as  swapspace.  This  option  attempts  to  prevent
              deadlocks  by  performing mlockall() and adjusting the oom-killer score at an appropriate time. It
              does not however guarantee that such deadlocks can be avoided.

       -systemd-mark

       -m     The systemd init system requires that processes which should not be killed  at  shutdown  time  be
              marked appropriately by replacing the first letter of their argv[0] with an '@' sign.

              This option will cause nbd-client to do so.

              Note  that  this  only works if nbd-client is run from an initrd; i.e., systemd will ignore such a
              mark if run from a systemd unit file or from the command line.

       -nofork

       -n     Specifies that the NBD client should not detach and daemonize itself. This is  mostly  useful  for
              debugging.

              Note  that  nbd-client  will  still  fork once to trigger an update to the device node's partition
              table. It is not possible to disable this.

       -no-optgo

       -g     Disable the use of the NBD_OPT_GO protocol message,  and  force  the  use  of  NBD_OPT_EXPORT_NAME
              instead.

              The  NBD  protocol has two phases: the negotiation phase, and the transmission phase. To move from
              negotation to transmission, older clients sent the  NBD_OPT_EXPORT_NAME  message,  for  which  the
              server could not produce an error message in case the export name did not exist (or the client had
              insufficient permissions to access it). Due to those limitations, a replacement message NBD_OPT_GO
              was created instead, which allows the server to reply with an error in case of any problems.

              The  protocol  allows  for  a  server  to discard a message which it does not understand; however,
              unfortunately some implementations (including older versions of nbd-server) did  not  handle  that
              situation  correctly  and  would  get out of sync with the client when it sent a message which the
              server did not understand.

              When  sending  NBD_OPT_GO,  nbd-client  will  try  to  do  the  right  thing  and  fall  back   to
              NBD_OPT_EXPORT_NAME.  However,  when  the  server  has the above-described bug, then this does not
              work. In such a situation, the client will issue a diagnostic suggesting the use of this option.

              Note that there is a corresponding option for nbdtab, too.

       -name

       -N     Specifies the name of the export that we want to use. If not specified, nbd-client will ask for  a
              "default" export, if one exists on the server.

       -unix

       -u     Connect  to  the  server  over  a  unix  domain socket at path, rather than to a server over a TCP
              socket. The server must be listening on the given socket.

       -certfile file

       -F     Use the specified file as the client certificate for TLS authentication to the server.

       -keyfile file

       -K     Use the specified file as the private key for the client cerificate.

       -cacertfile file

       -A     Use the specified file as the CA certificate for TLS authentication to the server.

       -tlshostname hostname

       -H     Use the specified hostname for the TLS context. If not specified, the hostname used to connect  to
              the server will be used.

   TLS SUPPORT
       Enabling  any of the TLS-related options causes the client to use the NBD_OPT_STARTTLS command to upgrade
       the connection to TLS. Since negotiating TLS support from userspace for a kernel  socket  would  be  very
       involved  (if  passing  keys  to  kernel  space  were  even  possible,  which  it isn't), the way this is
       implemented is that the nbd-client process creates a socketpair, one  side  of  which  it  hands  to  the
       kernel, and the other side of which is handed to an encrypting/decrypting proxy. This has the effect that
       all communication will be encrypted before being sent over the wire; however, doing so  is  not  safe  in
       combination with swapping over an NBD device:

       In  order  to  free  memory by swapping, the kernel needs to be sure that the write to the nbd device has
       finalized. For this, it needs to be able to receive an NBD_CMD_WRITE reply  which  informs  it  that  the
       write  has  completed  successfully and that the memory may be released. Receiving data over the network,
       however, requires that the kernel allocate memory first, which is impossible if we're low  on  memory  (a
       likely  situation  when  trying to swap). This is likely to cause a deadlock when we're low on memory and
       there are high amounts of network traffic.

       To remedy this situation, the kernel sets the PF_MEMALLOC option on the nbd socket; when low  on  memory,
       it will throw away all packets except for those destined to a socket with that option set, relying on the
       normal TCP retransmit system to ensure that data is not lost. This avoids the deadlock described above.

       However, the PF_MEMALLOC option is set on the socket that  is  connected  to  the  nbd  device,  not  the
       encrypted  socket  connected to the encrypting/decrypting proxy. As such, when using TLS, the PF_MEMALLOC
       option is not set on the socket that actually receives data  from  the  network,  which  means  that  the
       deadlock reappears.

       For  this  reason,  if  the -swap option is used when TLS is in use, nbd-client will issue an appropriate
       warning.

EXAMPLES

       Some examples of nbd-client usage:

       • To connect to a server running on port 2000 at  host  "server.domain.com",  using  the  client's  block
         special file "/dev/nbd0":

         nbd-client server.domain.com 2000 /dev/nbd0

       • To  connect  to a server running on port 2001 at host "swapserver.domain.com", using the client's block
         special file "/dev/nbd1", for swap purposes:

         nbd-client swapserver.domain.com 2001 /dev/nbd1 -swap

       • To disconnect the above connection again (after making sure the  block  special  file  is  not  in  use
         anymore):

         nbd-client -d /dev/nbd1

SEE ALSO

       nbd-server (1).

AUTHOR

       The NBD kernel module and the NBD tools have been written by Pavel Macheck (pavel@ucw.cz).

       The  kernel  module  is  now maintained by Paul Clements (Paul.Clements@steeleye.com), while the userland
       tools are maintained by Wouter Verhelst (wouter@debian.org)

       This manual page was written by Wouter Verhelst (<wouter@debian.org>) for  the  Debian  GNU/Linux  system
       (but may be used by others).  Permission is granted to copy, distribute and/or modify this document under
       the terms of the GNU General Public License, version 2, as published by the Free Software Foundation.

                                                        $                                          NBD-CLIENT(8)