NVME-EXCLUSION-ADD(1)

πŸ“¦ version 3.2, in arch rolling

πŸ’… nvme-exclusion-add β€” the NVMe Manual, bestie edition ✨

okay so. you know how sometimes you just need a controller to Not Be Included? yeah. that's this. this is nvme-exclusion-add from the NVMe Manual, and it's literally just "put a thing on the do-not-connect list" energy. 🫢


✨ NAME ✨

nvme-exclusion-add β€” add an entry to an NVMe-oF exclusion list 🚫


πŸŽ€ SYNOPSIS πŸŽ€

nvme [<global-options>] exclusion add [--name=<NAME> | -N <NAME>]
                        --entry=<ENTRY> | -e <ENTRY>

that's the whole vibe. nvme, maybe some global options, then exclusion add, then you gotta tell it which list and which entry. no cap. πŸ’…


πŸ¦‹ DESCRIPTION πŸ¦‹

So here's the tea: this bad boy appends an entry to the NVMe-oF exclusion list named <NAME> β€” and if that list doesn't exist yet? It creates it. main character energy, honestly. πŸ‘‘

The entry itself is a semicolon-separated list of key=value fields. A controller gets excluded when it matches every field present in the entry β€” so it's like an AND situation, not an OR situation. iykyk. 🧚

The recognized field keys are literally the nvme connect option names, and they are:

  • transport
  • traddr
  • trsvcid
  • nqn
  • host-traddr
  • host-iface
  • hostnqn
  • hostid

Only the fields you actually give are matched β€” so a single key excludes broadly, and more keys narrow the match. for real, that's the whole tradeoff. 🎯

πŸ“– Want the full match semantics? Go read the exclusion list overview in EXCLUSIONS.md. it's giving "required reading".

Also, and this is important: the entry is validated before it is written. An entry with an unknown key, or with no recognized field at all, gets rejected. it's not mean, it's just keeping you safe. πŸ™ˆ

πŸ”’ This command requires root. like, actually. don't @ me.

πŸ’– OPTIONS πŸ’–

  • -N <NAME>, --name=<NAME> β€” the name of the exclusion list you're adding to. Omit it and you're adding to the default list at /etc/nvme/exclusions.conf. (yes, that's a real path, put it in your notes πŸ“)
  • -e <ENTRY>, --entry=<ENTRY> β€” the actual entry you're adding, bestie. example: "transport=tcp;traddr=192.0.2.10;nqn=..." β€” cute, semicolon-separated, very demure.

🌈 GLOBAL OPTIONS 🌈

these live at the top-level nvme command, but they're available to this subcommand too. squad goals. 🫢

  • --dry-run β€” print the command that would be executed, but don't actually execute it. practice mode, zero consequences ✨
  • --no-ioctl-probing β€” disable probing for 64-bit IOCTL support.
  • --no-retries β€” disable retry logic on transient errors. one shot, one opportunity πŸ’€
  • -o <fmt>, --output-format=<fmt> β€” set the reporting format to normal, tabular, 'json, or binary. Only one output format at a time, pick a lane please. 🌸
  • --output-format-version=<version> β€” select the output format version. Version 1 uses the original field naming, while version 2 (the default, she's iconic) provides more consistent and script-friendly field names. Other versions are rejected. no custom versions, sorry not sorry πŸŽ€
  • --quiet β€” suppress informational messages. Errors are still reported, and --quiet cancels any --verbose for the library log level. shhhh 🀫
  • --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. the keys are, in fact, key. πŸ”‘
  • --timeout=<ms> β€” set the timeout for the command in milliseconds. infinite or -1 waits without a time limit (0xffffffff). patience is a virtue etc etc ⏳
  • -v, --verbose β€” increase the level of detail in the output. May be specified multiple times to further increase verbosity. spam it, go off πŸ‘‘

And ~bonus lore~: these options can also be set as machine-wide defaults in nvme-cli.conf(5). A command-line flag always overrides the file. always. periodt. πŸ’…


πŸ“ EXAMPLES πŸ“

  • Exclude a single path to a subsystem β€” look at her, specifying everything:
# nvme exclusion add --name user \
        --entry "transport=tcp;traddr=192.0.2.10;trsvcid=4420;nqn=nqn.2024-01.com.example:vol1"
  • Exclude a whole subsystem on every transport and address β€” one key, broad match, so powerful:
# nvme exclusion add --name user --entry "nqn=nqn.2024-01.com.example:retired"

⭐ SEE ALSO ⭐

nvme-exclusion-remove(1) nvme-exclusion-list(1) nvme-exclusion-edit(1) nvme-disconnect(1)

go read those next, bestie, the lore is deep πŸ“š


πŸ’œ NVME πŸ’œ

Part of the nvme-user suite. one of us, one of us 🫢


and that's the whole page!! written with love from the NVMe squad, date-stamped 10/30/2026, and yes the manual section is NVME-EXCLUSION-ADD(1) β€” mwah πŸ’‹πŸ’–

πŸ“¦ where this page comes from