NVME-GET-PROPERTY(1)

πŸ’… nvme-get-property β€” the one where we peek at controller properties

ok so this is a page from the NVMe manual (yes, the nvme-user suite one, we'll get to that) and it's all about nvme-get-property, which literally reads and shows the defined NVMe controller property for NVMe over Fabric. bestie. it reads properties. that's the whole vibe. πŸŽ€


✨ SYNOPSIS ✨

nvme [<global-options>] get-property <device>
                        [--offset=<offset> | -O <offset>]

that's it, that's the shape of it 🫢


🌸 DESCRIPTION 🌸

Reads and shows the defined NVMe controller property for NVMe over Fabric.

ok so like, you point it at a device, you tell it which property, and it shows you the thing. no cap. πŸ’–


πŸ¦‹ OPTIONS πŸ¦‹

  • -O <offset>, --offset=<offset> β€” the offset of the property, or the name of a register, e.g. 0x14 or cc. and here's the lore: the properties of a fabrics controller are cap (0x0), vs (0x8), cc (0x14), csts (0x1c), nssr (0x20), nssd (0x64) and crto (0x68) β€” and the transport may define more, so don't come for me if you see a name I didn't list πŸ‘€

πŸ‘‘ GLOBAL OPTIONS πŸ‘‘

these ones live at the top-level nvme command and are totally available to this subcommand, iykyk:

  • --dry-run β€” prints the command that would be executed, but does not actually execute it. window shopping energy πŸ›οΈ
  • --no-ioctl-probing β€” disables probing for 64-bit IOCTL support.
  • --no-retries β€” disables the retry logic on transient errors. one shot, no takebacks πŸ’€
  • -o <fmt>, --output-format=<fmt> β€” sets the reporting format to normal, tabular, json, or binary. only one output format at a time, pick a lane bestie ✨
  • --output-format-version=<version> β€” selects the output format version. version 1 uses the original field naming, while version 2 (the default) gives you more consistent and script-friendly field names. any other version? rejected. we don't do that here πŸ™ˆ
  • --quiet β€” suppresses informational messages. errors are still reported, and --quiet cancels any --verbose for the library log level. it's giving "shhh, i'm concentrating" 🀫
  • --set-options=<key=value>[,<key=value>...] β€” sets libnvme library options for this invocation. the 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). forever and ever, no rush 🌈
  • -v, --verbose β€” increases the level of detail in the output. may be specified multiple times to further increase verbosity. stack it, queen πŸ‘‘
little PSA: these options can also be set as machine-wide defaults in nvme-cli.conf(5). and a command-line flag always overrides the file. always. periodt. πŸ’…

πŸ“ EXAMPLES πŸ“

  • the following will run the get-property command with offset 0:
# nvme get-property /dev/nvme0 --offset=0x0 --verbose

ate. no crumbs. πŸ”₯


πŸ’€ BUGS πŸ’€

so, currently the CAP value is truncated to 32 bits due to a limitation in the ioctl interface 😭 yeah. i know.

but!! in a recent enough kernel, the 64 bit value is shown in kernel traces ✨ here's the lil ritual:

  • first, enable traces by this command:
# echo 1 > /sys/kernel/debug/tracing/events/nvme/enable
  • then look for NVMe Fabrics command (0x7f) at trace /sys/kernel/debug/tracing/trace

detective mode activated πŸ•΅οΈβ€β™€οΈ


🧚 NVME 🧚

part of the nvme-user suite 🫢


and that's the whole page, bestie β€” no gatekeeping, no skipped flags, all of it πŸ’œ go read some properties, you absolute icon 🌟

signed off with love from the NVMe manual, dated 10/30/2026 β€” catch you on the next page πŸŽ€

πŸ“¦ where this page comes from