NVME-CONFIG-CREATE(1)
π nvme-config-create β the NVMe Manual, section 1, but make it make sense
Okay bestie, gather round, because this one is the glow-up command for your NVMe-oF config file β¨
π NAME π
nvme-config-create β adds an NVMe-oF connection entry to the INI configuration. That's it. That's the whole job. And it does it immaculately π
πΈ SYNOPSIS πΈ
nvme [<global-options>] config create
[--discovery]
[--persistent[=<no|auto|force>] ]
[--host-symname=<name>]
[--output=<file>]
[<fabrics-options>]
π¦ DESCRIPTION π¦
So what this does, right: it builds one NVMe-oF connection entry out of your command-line options and drops it into the INI configuration that nvme connect, nvme discover, and nvme connect-all all read from. Like it's the shared group chat and this command is the one adding a member π«Ά
The format is documented over at https://github.com/linux-nvme/nvme-cli/blob/master/libnvme/design/CONFIG.md if you wanna read the lore yourself, iykyk.
If the target file already exists, bestie, nothing gets deleted β its connections are kept, and your new entry gets merged in alongside them. And running the exact same command again? A no-op. Literally no drama, it just vibes π
Heads up: unlikenvme config convert, this is not a one-shot migration. It's the ongoing, everyday way to build an INI configuration from the command line.<rainbow>main character energy</rainbow>π
By default the entry is an I/O controller (subsystem) entry, and --nqn is required. Want a discovery controller entry instead? Use --discovery, and then --nqn becomes optional π
One more thing, and this is the detail people always miss π β a connection with an explicit --hostnqn or --hostid gets written to a drop-in under <file>.d/. One without either of those goes into the main file. That's the rule, no cap.
β¨ OPTIONS β¨
--discoveryβ makes a discovery controller entry instead of an I/O controller entry. And without it,--nqnis required. Periodt.--persistent[=<no|auto|force>]β records this discovery controller's persistence mode. Requires--discovery. And listen, because the value is optional, it has to be glued directly to the option, like--persistent=force. If you hand it a separate argument (--persistent force), that's not a value of the option at all β it's an extra argument, and the command fails π so don't do that to yourself.auto(the default for every--discoveryentry, whether or not you give--persistent): persist the connection only where the target's own EPCSD (Explicit Persistent Connection Support for Discovery) flag says it supports it.forceβ persist no matter what EPCSD reports. For when a target's self-reported EPCSD just cannot be trusted πnoβ explicitly record that this discovery controller is not persistent, overriding any default that would otherwise apply.
--host-symname=<name>β names this host persona. It gets its own configuration drop-in, living its best separate life π¦--output=<file>β write to this file instead of the default/usr/local/etc/nvme/nvme-fabrics.conf.
π§ FABRICS OPTIONS π§
These ones are shared with NVMe over Fabrics commands, aka stuff like nvme connect. Same flags, same energy:
-a <traddr>,--traddr=<traddr>β the network address of the controller. For transports that use IP addressing (e.g.rdma,tcp), this should be an IP address.--concatβ enable secure concatenation (TCP).-c <#>,--reconnect-delay=<#>β the delay in seconds before a reconnect is attempted after a connection loss.-C <secret>,--kxchap-ctrl-secret=<secret>β controller authentication secret for bi-directional authentication. If you don't specify it, 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β it's giving legacy, we don't stan)-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>β the network interface to use for the connection.-I <hostid>,--hostid=<hostid>β the host UUID.-q <hostnqn>,--hostnqn=<hostnqn>β override the default host NQN.-w <traddr>,--host-traddr=<traddr>β the source address on the host side of the connection.-k <#>,--keep-alive-tmo=<#>β keep-alive timeout in seconds.--keyring=<keyring>β keyring to use for TLS key lookup.-n <subnqn>,--nqn=<subnqn>β 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 is4420for RDMA.-T <#>,--tos=<#>β type of service value for the connection (TCP).-t <trtype>,--transport=<trtype>β the transport type. Supported values include:rdmaβ RDMA (RoCE, iWARP, InfiniBand)tcpβ TCP/IPfcβ 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 π«Ά (yes, that's a real recommendation, not me being dramatic)--tls-key-identity=<identity>β identity associated with the TLS key.
π GLOBAL OPTIONS π
These live at the top-level nvme command, but they're available to this subcommand too. Big "borrowing my friend's hoodie" energy:
--dry-runβ print the command that would be executed, but don't 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 tonormal,tabular,'json, orbinary. Only one output format may be used at a time.--output-format-version=<version>β select the output format version. Version1uses the original field naming, while version2(default) provides more consistent and script-friendly field names. Other versions are rejected π«--quietβ suppress informational messages. Errors are still reported, and--quietcancels any--verbosefor the library log level.--set-options=<key=value>[,<key=value>...]β set libnvme library options for this invocation. Supported keys areforce-4k,mi-probe-enabled,test-base-dirandtest-sysfs-dir.--timeout=<ms>β set the timeout for the command in milliseconds.infiniteor-1waits without a time limit (0xffffffff). No timer, no stress π§-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. Always. π
π₯ EXAMPLES π₯
- Add a discovery controller entry for an FC discovery controller:
# nvme config create --transport fc \
--traddr=nn-0x58ccf090c92006da:pn-0x58ccf091492806da \
--host-traddr=nn-0x20000024ff7fa448:pn-0x21000024ff7fa448 \
--hostnqn=nqn.2014-08.org.nvmexpress:uuid:62a4ab74-1e18-11f1-8bb7-6c1ff71ba506 \
--discovery
- Add an I/O controller entry to a test configuration file:
# nvme config create --transport tcp --traddr=192.168.1.20 --trsvcid=4420 \
--nqn=nqn.2024-01.com.example:data.vol1 \
--output=/tmp/nvme-fabrics.conf
π SEE ALSO π
nvme-config-convert(1) nvme-config-validate(1) nvme-config-show(1) nvme-connect-all(1) nvme-discover(1)
π NVME π
Part of the nvme-user suite. Iconic behaviour, honestly.
Alright bestie, that's the whole page β from the NVMe manual, page NVME-CONFIG-CREATE(1), dated 10/30/2026, brought to you by the NVMe gang. Go forth and configure πβ¨
π¦ where this page comes from
- arch rolling: nvme-cli 3.2-1 Β· GPL-2.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms