table of contents
| NVME-DISCOVERD(8) | NVMe Manual | NVME-DISCOVERD(8) |
NAME¶
nvme-discoverd - NVMe-oF discovery and connectivity daemon
SYNOPSIS¶
nvme-discoverd [--config=<FILE>] [--nvme-path=<PATH>] [--debug] [--help]
DESCRIPTION¶
nvme-discoverd is a persistent daemon that connects the host’s desired NVMe-oF controllers and keeps them connected. It reads three sources to build its set of desired connections: the NBFT ACPI table (boot-time controllers), the shared NVMe-oF fabrics configuration (nvme-fabrics.conf(5)), and the Discovery Log Pages of any Discovery Controllers it connects to (including FC targets found via FC kickstart). It never disconnects a live controller in response to a discovery change; the only disconnects it causes are a side effect of stopping its own systemd units, at shutdown or on request.
Every connection attempt is delegated to nvme connect, which runs inside a systemd transient unit instead of writing directly to /dev/nvme-fabrics. As a result, a stuck connect attempt never blocks the daemon’s event loop. Each unit is named after a hash of the controller’s transport identity.
Failed connections retry with exponential backoff. Discovery Controllers from NBFT or the fabrics config represent explicit intent, so they always retry forever. A Discovery Controller found only through a referral or FC kickstart is different: it gives up after 72 hours of unbroken failure and is dropped from tracking.
Before connecting or reconnecting anything, nvme-discoverd checks the system-wide exclusion list. It also registers ownership of every controller it connects (--owner discoverd, or --owner nbft for an NBFT-sourced controller) in the NVMe-oF ownership registry. See nvme-registry-list(1) and nvme-exclusion-add(1).
nvme-discoverd is still experimental. It is meant to replace the older udev-rule/systemd-unit autoconnect mechanism (built when the nvmf-autoconnect meson option is enabled). For now, nvme-discoverd can run alongside the legacy udev rules — the goal is to eventually eliminate them completely. Switching a host over is a deliberate administrator choice (systemctl enable --now nvme-discoverd, alongside disabling the legacy units), not something either mechanism decides automatically.
OPTIONS¶
-c <FILE>, --config=<FILE>
--nvme-path=<PATH>
-d, --debug
-h, --help
CONFIGURATION¶
nvme-discoverd.conf holds only the daemon’s own knobs, in a single [Global] section:
[Global] nbft = true debug-level = info fc-kickstart-interval-minutes = 0
nbft (boolean, default true) controls whether NBFT-listed controllers are adopted and reconnected. debug-level (err, warn, info, or debug; default info) sets the log threshold; --debug on the command line overrides it. fc-kickstart-interval-minutes (default 0, disabled) re-probes the FC fabric on a timer. This is independent of the kickstart nvme-discoverd already issues at startup and on every FC controller drop — use it to detect FC equipment replacement sooner than the next connection event.
The connections nvme-discoverd manages come entirely from the shared fabrics configuration, not from this file: which Discovery Controllers and subsystems to connect, host identity, per-connection parameters. See nvme-fabrics.conf(5).
SIGNALS¶
SIGHUP
SIGTERM, SIGINT
FILES¶
/etc/nvme/nvme-discoverd.conf
/etc/nvme/nvme-fabrics.conf, /etc/nvme/nvme-fabrics.conf.d/*.conf
/run/nvme/discoverd/
SEE ALSO¶
nvme-fabrics.conf(5) nvme-connect(1) nvme-registry-list(1) nvme-exclusion-add(1)
NVME¶
Part of the nvme-user suite
| 07/31/2026 | NVMe |