NVME-GET-FEATURE(1)

πŸŽ€ NAME πŸŽ€

nvme-get-feature(1) β€” the NVMe Manual page that literally gets an NVMe feature and returns the applicable results. Bestie, it’s giving β€œask the drive for a feature and see what it says” energy. πŸ’…

✨ SYNOPSIS ✨

nvme [<global-options>] get-feature <device>
                        [--namespace-id=<nsid> | -n <nsid>]
                        [--feature-id=<fid> | -f <fid>]
                        [--uuid-index=<uuid-index> | -U <uuid_index>]
                        [--data-len=<data-len> | -l <data-len>]
                        [--sel=<select> | -s <select>] [--raw-binary | -b]
                        [--cdw11=<cdw11> | -c <cdw11>] [--changed | -C]

πŸ¦‹ DESCRIPTION πŸ¦‹

Okay so this command submits an NVMe Get Feature admin command and returns the applicable results. That may be the feature’s value, or it may also include a feature structure if the feature requires it β€” ex: LBA Range Type. Slay, but make it storage. πŸ’–

The <device> parameter is mandatory, no cap. It may be either the NVMe character device β€” ex: /dev/nvme0 β€” or a namespace block device β€” ex: /dev/nvme0n1. Both are valid vibes. ✨

On success, the returned feature’s structure (if applicable) may be returned in one of several ways depending on the option flags. The structure may be parsed by the program and printed in a readable format if it is a known structure, displayed in hex, or the raw buffer may be printed to stdout for another program to parse. So it’s giving flexible output main character energy. 🌈

🌸 OPTIONS 🌸

  • -n <nsid>, --namespace-id=<nsid> β€” retrieve the feature for the given nsid. This is optional, and most features do not use this value, lowkey. The broadcast value 0xffffffff can also be given as all or -1, iykyk. 🫢
  • -f <fid>, --feature-id=<fid> β€” this is the feature ID you're sending along with the command ✨ and bestie, the value you give it should be in hex. That's not a suggestion, that's the vibe. The feature you want lives on the left as a hex number, and the handy lil' name next to it is right there for you too β€” take your pick, iykyk πŸ’…

Here's the whole roster, no skipping, no cap:

  • 0x01 | arbitration β€” Arbitration
  • 0x02 | power-mgmt β€” Power Management
  • 0x03 | lba-range β€” LBA Range Type
  • 0x04 | temp-thresh β€” Temperature Threshold
  • 0x05 | err-recovery β€” Error Recovery
  • 0x06 | volatile-wc β€” Volatile Write Cache
  • 0x07 | num-queues β€” Number of Queues
  • 0x08 | irq-coalesce β€” Interrupt Coalescing
  • 0x09 | irq-config β€” Interrupt Vector Configuration
  • 0x0a | write-atomic β€” Write Atomicity Normal
  • 0x0b | async-event β€” Asynchronous Event Configuration
  • 0x0c | auto-pst β€” Autonomous Power State Transition
  • 0x0d | host-mem-buf β€” Host Memory Buffer
  • 0x0e | timestamp β€” Timestamp
  • 0x0f | kato β€” Keep Alive Timer
  • 0x10 | hctm β€” Host Controlled Thermal Management
  • 0x11 | nopsc β€” Non-Operational Power State Config
  • 0x12 | rrl β€” Read Recovery Level Config
  • 0x13 | plm-config β€” Predictable Latency Mode Config
  • 0x14 | plm-window β€” Predictable Latency Mode Window
  • 0x15 | lba-sts-interval β€” LBA Status Information Report Interval
  • 0x16 | host-behavior β€” Host Behavior Support
  • 0x17 | sanitize β€” Sanitize Config
  • 0x18 | endurance-evt-cfg β€” Endurance Group Event Configuration
  • 0x19 | iocs-profile β€” I/O Command Set Profile
  • 0x1a | spinup-control β€” Spinup Control
  • 0x1b | power-loss-signal β€” Power Loss Signaling Config
  • 0x1c | perf-characteristics β€” Performance Characteristics
  • 0x1d | fdp β€” Flexible Data Placement
  • 0x1e | fdp-events β€” FDP Events
  • 0x1f | ns-admin-label β€” Namespace Admin Label
  • 0x20 | key-value β€” Key Value Configuration
  • 0x21 | ctrl-data-queue β€” Controller Data Queue
  • 0x78 | emb-mgmt-ctrl-addr β€” Embedded Management Controller Address
  • 0x79 | host-mgmt-agent-addr β€” Host Management Agent Address
  • 0x7d | enh-ctrl-metadata β€” Enhanced Controller Metadata
  • 0x7e | ctrl-metadata β€” Controller Metadata
  • 0x7f | ns-metadata β€” Namespace Metadata
  • 0x80 | sw-progress β€” Software Progress Marker
  • 0x81 | host-id β€” Host Identifier

Like, the range from 0x01 to 0x21 is the classic lineup, then things hop up to the 0x78–0x81 neighborhood for the management/metadata/progress-marker crowd β€” that gap in the middle is not a typo, it's just how the spec decided to space things out πŸ¦‹

Side note bestie: those hex values are exact. Copy them character for character, don't get creative with the leading zeros or the letter case-out-of-nowhere. Slay responsibly πŸ’–
  • 0x82 β€” resv-mask β€” Reservation Notification Mask (the mask for which reservation notifications you wanna hear about πŸ‘€)
  • 0x83 β€” resv-persist β€” Reservation Persistence (does your reservation survive a reset? this tells you)
  • 0x84 β€” write-protect β€” Namespace Write Protection Config (the "pls don't write here" settings)
  • 0x85 β€” bp-write-protect β€” Boot Partition Write Protection Config (same vibe, but for the boot partition πŸ’…)
  • -s <select>, --sel=<select> β€” the Select (SEL) field, bestie. It literally picks which value of the attributes gets returned in the data you get back. Like choosing which personality of the feature you wanna meet:
    • 0 β€” current β€” Current (the now-now version)
    • 1 β€” default β€” Default (factory settings energy)
    • 2 β€” saved β€” Saved (the one that got persisted ✨)
    • 3 β€” supported β€” Supported capabilities (what it's even capable of, iykyk)
  • -U <uuid-index>, --uuid-index=<uuid-index> β€” the UUID Index of the feature πŸ”–
  • -l <data-len>, --data-len=<data-len> β€” the data length for the buffer that gets returned for this feature. Lowkey most known features don't use this value at all πŸ™ˆ the one exception is LBA Range Type.
  • -c <cdw11>, --cdw11=<cdw11> β€” the value for command dword 11, if it applies to what you're doing.
  • -b, --raw-binary β€” prints the raw feature buffer straight to stdout, but only if the feature actually returns a structure. no structure, no dump, periodt.
  • -C, --changed β€” this option will show feature changed βœ…

🌈 GLOBAL OPTIONS 🌈

Okay so these ones are defined up at the top-level nvme command, which means they're available to this subcommand too. Group-chat privileges 🫢

  • --dry-run β€” prints the command it would execute, but doesn't actually execute it. All the plot, none of the consequences.
  • --no-ioctl-probing β€” disables probing for 64-bit IOCTL support.
  • --no-retries β€” disables the retry logic on transient errors. One shot, no do-overs.
  • -o <fmt>, --output-format=<fmt> β€” sets the reporting format to normal, tabular, 'json, or binary. Only one output format at a time, bestie β€” pick a lane.
  • --output-format-version=<version> β€” selects the output format version. Version 1 uses the original field naming, while version 2 (the default) provides more consistent and script-friendly field names. Any other version? Rejected. 🚫
  • --quiet β€” suppresses informational messages. Errors still get reported, and --quiet cancels any --verbose for the library log level. so it's a vibe-canceller for chatter.
  • --set-options=<key=value>[,<key=value>...] β€” sets libnvme library options for this invocation. Supported keys are force-4k, mi-probe-enabled, test-base-dir and test-sysfs-dir.
  • --timeout=<ms> β€” sets the timeout for the command in milliseconds. infinite or -1 waits without a time limit (0xffffffff). patient queen behavior ⏳
  • -v, --verbose β€” increases the level of detail in the output. May be specified multiple times to further increase verbosity. stack it like a combo πŸ”₯

These options can also be set as machine-wide defaults in nvme-cli.conf(5). And a command-line flag always overrides the file β€” the file does not win, ever πŸ’…


✨ EXAMPLES ✨

  • Retrieves the feature for Number of Queues, or feature id 7:
# nvme get-feature /dev/nvme0 -f 7
  • The following retrieves the feature for the LBA Range Type, which implicitly requires a buffer and will be printed to the screen in human readable format:
# nvme get-feature /dev/nvme0 -f 3
  • Retrieves the feature for the some vendor specific feature and specifically requesting a buffer be allocate for this feature, which will be displayed to the user in as a hex dump:
# nvme get-feature /dev/nvme0 -f 0xc0 -l 512

Get feature with UUID index πŸ¦‹

# nvme get-feature /dev/nvme0 -f 0xc0 -l 512 -U 0x1
  • The following retrieves the feature for the LBA Range Type, which implicitly requires a buffer and will be saved to a file in its raw format:
# nvme get-feature /dev/nvme0 -f 3 --raw-binary > lba_range.raw
⚠️ It is probably a bad idea to not redirect stdout when using this mode. like… redirect it. please. your terminal will thank you 😭

πŸ‘‘ NVME πŸ‘‘

Part of the nvme-user suite πŸ’œ


and that's the whole page, bestie! this one's from the nvme-user suite, NVMe edition, dated 10/30/2026, and it's NVME-GET-FEATURE(1) β€” go get those features, you absolute icon πŸŽ€βœ¨

πŸ“¦ where this page comes from