nvme-connect-all1
Discover and connect to fabrics controllers.
Usage
nvme [<global-options>]
connect-all
[{--raw=<filename> | -r
<filename>}]
[{--device=<device> | -d
<device>}]
[{--config=<filename> | -J
<cfg>}]
[{--persistent
[{=<no | auto | force>}] | -p}]
[--quiet]
[--no-reuse]
[--nbft]
[--no-nbft]
[--nbft-path=<STR>]
[--owner=<NAME>]
[<fabrics-options>]
[<global-options>]
Overview
Send one or more Discovery requests to a NVMe over Fabrics Discovery Controller, and create controllers for the returned discovery records.
If no parameters are given, then nvme connect-all will attempt to find a /usr/local/etc/nvme/discovery.conf file to use to supply a list of connect-all commands to run. If no /usr/local/etc/nvme/discovery.conf file exists, the command will quit with an error.
Otherwise a specific Discovery Controller should be specified using the --transport, --traddr and if necessary the --trsvcid and a Discovery request will be sent to the specified Discovery Controller.
See the documentation for the nvme-discover(1) command for further background.
Options
-
-r <filename>, --raw=<filename> -
This field will take the output of the nvme connect-all command and dump it to a raw binary file. By default nvme connect-all will dump the output to stdout.
-
-d <device>, --device=<device> -
This field takes a device as input. It must be a persistent device associated with a Discovery Controller previously created by the command "connect-all" or "discover". <device> follows the format nvme*, eg. nvme0, nvme1.
-
-J <filename>, --config=<filename> -
Use the specified JSON configuration file instead of the default /usr/local/etc/nvme/config.json file or none to not read in an existing configuration file. The JSON configuration file format is documented in
https://github.com/linux-nvme/nvme-cli/blob/master/libnvme/doc/config-schema.json
-
-p, --persistent[=<no|auto|force>] -
Keep the discovery controller connected after retrieving the discovery log page, instead of disconnecting once it’s done. Because the value is optional, it must be attached directly to the option: --persistent=force for the long form, -pforce for the short form. A value given as a separate argument (--persistent force, -p force) is no value of the option but an extra argument, and the command fails.
• no: never persist. Use this to opt out of the default.
• auto (the default, both when the option is omitted entirely and when --persistent is given with no value): persist a Discovery Log Page entry’s connection only where that entry’s own EPCSD (Explicit Persistent Connection Support for Discovery) flag reports support for it; degrade to non-persistent, with a log message, for entries that don’t.
• force: persist regardless of what EPCSD reports, for a target whose self-reported EPCSD cannot be trusted.
auto and force ask each discovery controller for a keep-alive timeout of 30 seconds, or the --keep-alive-tmo value when it is given. no asks for none, even when --keep-alive-tmo is given.
-
--quiet -
Suppress error messages.
-
--no-reuse -
Always create a new connection, never reuse an existing one.
-
--nbft -
Only look at NBFT tables
-
--no-nbft -
Do not look at NBFT tables
-
--nbft-path=<STR> -
Use a user-defined path to the NBFT tables
-
--owner=<NAME> -
Record NAME as the owner of connected controllers in the NVMe ownership registry, so other orchestrators (and nvme-disconnect-all) leave them alone. See nvme-disconnect-all(1). When --nbft is also given, --owner takes precedence over its default owner of nbft. An empty NAME (--owner=) removes the registry entries instead, leaving the controllers unowned. Without --owner, a controller that was already connected keeps the entry it has.
Options
The following options are common to NVMe over Fabrics commands such as nvme connect:
-
-a <traddr>, --traddr=<traddr> -
Specify the network address of the controller. For transports using IP addressing (e.g. rdma, tcp), this should be an IP address.
-
--concat -
Enable secure concatenation (TCP).
-
-c <#>, --reconnect-delay=<#> -
Set the delay in seconds before reconnect is attempted after a connection loss.
-
-C <secret>, --kxchap-ctrl-secret=<secret> -
Controller authentication secret for bi-directional authentication. If not specified, bi-directional authentication is not attempted.
-
-S <secret>, --kxchap-secret=<secret> -
Host authentication secret (KX-HMAC-CHAP). Must be provided in ASCII format as defined in the NVMe specification.
-
-C <secret>, --dhchap-ctrl-secret=<secret> -
Controller authentication secret for bi-directional authentication. If not specified, bi-directional authentication is not attempted. (deprecated, see --kxchap-ctrl-secret)
-
-S <secret>, --dhchap-secret=<secret> -
Host authentication secret (DH-HMAC-CHAP). Must be provided in ASCII format as defined in the NVMe specification. (deprecated, see --kxchap-secret)
-
--disable-sqflow -
Disable submission queue flow control.
-
-G, --data-digest -
Enable data digest generation/verification (TCP).
-
-D, --duplicate-connect -
Allow duplicate connections to the same subsystem.
-
-g, --hdr-digest -
Enable header digest generation/verification (TCP).
-
-f <iface>, --host-iface=<iface> -
Specify the network interface to use for the connection.
-
-I <hostid>, --hostid=<hostid> -
Specify the host UUID.
-
-q <hostnqn>, --hostnqn=<hostnqn> -
Override the default host NQN.
-
-w <traddr>, --host-traddr=<traddr> -
Specify the source address on the host side of the connection.
-
-k <#>, --keep-alive-tmo=<#> -
Set the keep-alive timeout in seconds.
-
--keyring=<keyring> -
Keyring to use for TLS key lookup.
-
-n <subnqn>, --nqn=<subnqn> -
Specify the NVMe subsystem NQN to connect to.
-
-i <#>, --nr-io-queues=<#> -
Number of I/O queues to create.
-
-P <#>, --nr-poll-queues=<#> -
Number of polling queues to create.
-
-W <#>, --nr-write-queues=<#> -
Number of write queues to create.
-
-Q <#>, --queue-size=<#> -
Queue depth for I/O queues.
-
-l <#>, --ctrl-loss-tmo=<#> -
Maximum time in seconds to retry reconnect attempts after controller loss.
-
-s <trsvcid>, --trsvcid=<trsvcid> -
Transport service identifier (e.g. TCP/rdma port). Default is 4420 for RDMA.
-
-T <#>, --tos=<#> -
Type of service value for the connection (TCP).
-
-t <trtype>, --transport=<trtype> -
Specify the transport type. Supported values include:
+
| Value | Description |
| rdma | RDMA (RoCE, iWARP, InfiniBand) |
| tcp | TCP/IP |
| fc | Fibre Channel (experimental) |
| loop | Local loopback transport |
-
--tls -
Enable TLS encryption (TCP).
-
--tls-key=<tls-key> -
TLS key for the connection. It is recommended to preload keys into the system keyring instead of passing them via the command line.
-
--tls-key-identity=<identity> -
Identity associated with the TLS key.
Options
The following options are defined at the top-level nvme command and are available to this subcommand:
-
--dry-run -
Print the command that would be executed, but do not actually execute it.
-
--no-ioctl-probing -
Disable probing for 64-bit IOCTL support.
-
--no-retries -
Disable retry logic on transient errors.
-
-o <fmt>, --output-format=<fmt> -
Set the reporting format to normal, tabular, 'json, or binary. Only one output format may be used at a time.
-
--output-format-version=<version> -
Select the output format version. Version 1 uses the original field naming, while version 2 (default) provides more consistent and script-friendly field names. Other versions are rejected.
-
--quiet -
Suppress informational messages. Errors are still reported, and --quiet cancels any --verbose for the library log level.
-
--set-options=<key=value>[,<key=value>...] -
Set libnvme library options for this invocation. Supported keys are force-4k, mi-probe-enabled, test-base-dir and test-sysfs-dir.
-
--timeout=<ms> -
Set the timeout for the command in milliseconds. infinite or -1 waits without a time limit (0xffffffff).
-
-v, --verbose -
Increase the level of detail in the output. May be specified multiple times to further increase verbosity.
These options can also be set as machine-wide defaults in nvme-cli.conf(5). A command-line flag always overrides the file.
Examples
• Connect to all records returned by the Discover Controller with IP4 address 192.168.1.3 for all resources allocated for NVMe Host name host1-rogue-nqn on the RDMA network. Port 4420 is used by default:
# nvme connect-all --transport=rdma --traddr=192.168.1.3 \ --hostnqn=host1-rogue-nqn
• Issue a nvme connect-all command using the default system defined NBFT tables:
# nvme connect-all --nbft
• Issue a nvme connect-all command with a user-defined path for the NBFT table:
# nvme connet-all --nbft-path=/sys/firmware/acpi/tables/NBFT1
• Issue a nvme connect-all command using a /usr/local/etc/nvme/discovery.conf file:
# Machine default 'nvme discover' commands. Query the # Discovery Controller's two ports (some resources may only # be accessible on a single port). Note an official # nqn (Host) name defined in the NVMe specification is being used # in this example. -t rdma -a 192.168.69.33 -s 4420 -q nqn.2014-08.com.example:nvme:nvm-subsystem-sn-d78432 -t rdma -a 192.168.1.4 -s 4420 -q nqn.2014-08.com.example:nvme:nvm-subsystem-sn-d78432 At the prompt type "nvme connect-all".
Nvme
Part of the nvme-user suite
Releases
6 releases since Debian 9 (Stretch); the text changed 5 times.
--concat since Debian 13 (Trixie);
--config since Debian 13 (Trixie);
--ctrl-loss-tmo since Debian 11 (Bullseye);
--data-digest since Debian 11 (Bullseye);
--device since Debian 13 (Trixie);
--dhchap-ctrl-secret since Arch Linux 2026-11-01;
--dhchap-secret since Arch Linux 2026-11-01;
--disable-sqflow since Arch Linux 2026-11-01;
--dry-run since Arch Linux 2026-11-01;
--duplicate-connect since Arch Linux 2026-11-01;
--hdr-digest since Debian 11 (Bullseye);
--host-iface since Debian 12 (Bookworm);
--hostid since Debian 11 (Bullseye);
--keep-alive-tmo since Debian 10 (Buster);
--keyring since Debian 13 (Trixie);
--kxchap-ctrl-secret since Arch Linux 2026-11-01;
--kxchap-secret since Arch Linux 2026-11-01;
--nbft since Debian 13 (Trixie);
--nbft-path since Debian 13 (Trixie);
--no-ioctl-probing since Arch Linux 2026-11-01;
--no-nbft since Debian 13 (Trixie);
--no-retries since Arch Linux 2026-11-01;
--no-reuse since Arch Linux 2026-11-01;
--nqn since Debian 12 (Bookworm);
--nr-io-queues since Debian 11 (Bullseye);
--nr-poll-queues since Debian 11 (Bullseye);
--nr-write-queues since Debian 11 (Bullseye);
--output-format since Debian 13 (Trixie);
--output-format-version since Arch Linux 2026-11-01;
--owner since Arch Linux 2026-11-01;
--persistent since Debian 11 (Bullseye);
--queue-size since Debian 10 (Buster);
--quiet since Debian 11 (Bullseye);
--raw since Debian 10 (Buster);
--reconnect-delay since Debian 11 (Bullseye);
--set-options since Arch Linux 2026-11-01;
--timeout since Arch Linux 2026-11-01;
--tls since Debian 13 (Trixie);
--tls-key since Arch Linux 2026-11-01;
--tls-key-identity since Arch Linux 2026-11-01;
--tos since Arch Linux 2026-11-01;
--verbose since Debian 13 (Trixie);
-C since Arch Linux 2026-11-01;
-D since Arch Linux 2026-11-01;
-G since Debian 11 (Bullseye);
-I since Debian 11 (Bullseye);
-J since Debian 13 (Trixie);
-P since Debian 11 (Bullseye);
-Q since Debian 10 (Buster);
-S since Arch Linux 2026-11-01;
-T since Arch Linux 2026-11-01;
-W since Debian 11 (Bullseye);
-c since Debian 11 (Bullseye);
-d since Debian 13 (Trixie);
-f since Debian 12 (Bookworm);
-g since Debian 11 (Bullseye);
-i since Debian 11 (Bullseye);
-k since Debian 10 (Buster);
-l since Debian 11 (Bullseye);
-n since Debian 12 (Bookworm);
-o since Debian 13 (Trixie);
-p since Debian 11 (Bullseye);
-r since Debian 10 (Buster);
-v since Debian 13 (Trixie).
--config-file until Debian 12 (Bookworm);
--context until Debian 13 (Trixie);
--dump-config until Debian 13 (Trixie);
--matching until Debian 11 (Bullseye);
--tls_key until Debian 13 (Trixie);
-O until Debian 13 (Trixie);
-m until Debian 11 (Bullseye).