NVME-GET-LOG(1)

✨ NAME ✨

Okay so nvme-get-log β€” straight out of the NVMe Manual, section 1 β€” retrieves a log page from an NVMe device. That's the whole vibe. πŸ’–


🌸 SYNOPSIS 🌸

Vibe check the synopsis, bestie β€” copy it exactly, no cap:

nvme [<global-options>] get-log <device> [--log-id=<log-id> | -i <log-id>]
                        [--log-len=<log-len> | -l <log-len>]
                        [--aen=<aen> | -a <aen>]
                        [--namespace-id=<nsid> | -n <nsid>]
                        [--raw-binary | -b]
                        [--lpo=<offset> | -L <offset>]
                        [--lsp=<field> | -s <field>]
                        [--lsi=<field> | -S <field>]
                        [--rae | -r]
                        [--csi=<command_set_identifier> | -y <command_set_identifier>]
                        [--ot=<offset_type> | -O <offset_type>]
                        [--xfer-len=<length> | -x <length>]

πŸ’… DESCRIPTION πŸ’…

Lowkey the main character energy here is wild: this grabs an arbitrary NVMe log page from an NVMe device and hands you back the returned structure. 🫢

The device parameter is mandatory β€” not optional, not negotiable β€” and it may be either the NVMe character device (ex: /dev/nvme0), or a namespace block device (ex: /dev/nvme0n1). Pick your fighter. πŸ¦‹

On success, the returned log structure may be returned in one of several ways depending on the option flags; the structure may be displayed in hex by the program, or the raw buffer may be printed to stdout for another program to parse. It's giving versatile, honestly. ✨


πŸŽ€ OPTIONS πŸŽ€

Okay, options time. This part has one option, and it's kind of a big deal:

  • -l <log-len>, --log-len=<log-len> β€” Allocates a buffer of <log-len> bytes size and requests this many bytes be returned in the constructed NVMe command. This param is mandatory β€” like, mandatory mandatory. No skipping it, bestie. πŸ’€
  • -i <log-id>, --log-id=<log-id> β€” tells the command which log page you're asking for and drops it into <log-id>. Defaults to 0, no cap. Here's the whole ✨menu✨ of what you can pass, hex value first, short name second, official definition last β€” memorize it or just come back and scroll, we don't gatekeep πŸ’…

πŸŽ€ the log-id menu πŸŽ€

the classics, the everyday ones:

  • 0x00 Β· supported-log-pages β€” Supported Log Pages
  • 0x01 Β· error β€” Error Information
  • 0x02 Β· smart β€” SMART / Health Information
  • 0x03 Β· fw-slot β€” Firmware Slot Information
  • 0x04 Β· changed-ns β€” Changed Namespace List

the "what can this thing even do" corner:

  • 0x05 Β· cmd-effects β€” Commands Supported and Effects
  • 0x06 Β· device-self-test β€” Device Self-test

telemetry era πŸ¦‹ (yes there are two of them, no they're not the same):

  • 0x07 Β· telemetry-host β€” Telemetry Host-Initiated
  • 0x08 Β· telemetry-ctrl β€” Telemetry Controller-Initiated

endurance / latency / namespace lore:

  • 0x09 Β· endurance-group β€” Endurance Group Information
  • 0x0a Β· predictable-lat-nvmset β€” Predictable Latency Per NVM Set
  • 0x0b Β· predictable-lat-agg β€” Predictable Latency Event Aggregate
  • 0x0c Β· ana β€” Asymmetric Namespace Access
  • 0x0d Β· persistent-event β€” Persistent Event Log
  • 0x0e Β· lba-status β€” LBA Status Information
  • 0x0f Β· endurance-grp-evt β€” Endurance Group Event Aggregate
  • 0x10 Β· media-unit-status β€” Media Unit Status

the "supported and effects" duo + friends:

  • 0x11 Β· supported-cap-config-list β€” Supported Capacity Configuration List
  • 0x12 Β· fid-supported-effects β€” Feature Identifiers Supported and Effects
  • 0x13 Β· mi-cmd-supported-effects β€” NVMe-MI Commands Supported and Effects
  • 0x14 Β· cmd-and-feat-lockdown β€” Command and Feature Lockdown
  • 0x15 Β· boot-partition β€” Boot Partition
  • 0x16 Β· rotational-media-info β€” Rotational Media Information

fabric / multi-subsystem girlies 🌈:

  • 0x17 Β· dispersed-ns-participating-ns β€” Dispersed Namespace Participating NVM Subsystems
  • 0x18 Β· mgmt-addr-list β€” Management Address List
  • 0x19 Β· phy-rx-eom β€” Physical Interface Receiver Eye Opening Measurement
  • 0x1a Β· reachability-groups β€” Reachability Groups
  • 0x1b Β· reachability-associations β€” Reachability Associations
  • 0x1c Β· changed-alloc-ns-list β€” Changed Allocated Namespace List

FDP block, aka the 0x2x zone πŸ”₯:

  • 0x20 Β· fdp-configs β€” FDP Configurations
  • 0x21 Β· fdp-ruh-usage β€” Reclaim Unit Handle Usage
  • 0x22 Β· fdp-stats β€” FDP Statistics
  • 0x23 Β· fdp-events β€” FDP Events

and the discovery trio at the end, living their best 0x7x life ✨:

  • 0x70 Β· discover β€” Discovery
  • 0x71 Β· host-discover β€” Host Discovery
  • 0x72 Β· ave-discover β€” AVE Discovery
bestie pls note πŸ‘‘ β€” those are the values, literally copy them exactly. Don't freestyle a hex number and then act surprised when you get nothing back, iykyk 😭
  • 0x73 / pull-model-ddc-req β€” Pull Model DDC Request πŸ’…
    • 0x80 / reservation β€” Reservation Notification πŸŽ€
    • 0x81 / sanitize β€” Sanitize Status ✨
    • 0xbf / zns-changed-zones β€” Changed Zone List πŸ¦‹

That's the whole roster, bestie β€” no cap, every single one πŸ’–


  • -a <aen>, --aen=<aen> β€” lowkey the ✨convenience✨ pick: it pulls log info straight from an asynchronous event notification result. Heads up though β€” it will override log-id and log-len if you set them. So like, don't fight it, it wins 🫢
  • -n <nsid>, --namespace-id=<nsid> β€” sets the command's nsid value to whatever you pass. Defaults to 0xffffffff if you don't give one. Ngl this might do absolutely nothing depending on the log page β€” some are namespace-specific, some literally are not, it's giving "it depends" 😭. Also the broadcast value 0xffffffff can be written as all or -1, cute right?
  • -b, --raw-binary β€” dumps the raw log buffer straight to stdout. feral. unprocessed. iconic πŸ’€
  • -L <offset>, --lpo=<offset> β€” the log page offset: where inside the log page you wanna start returning data from. It's Dword-aligned and 64-bits, so like… precision πŸ’…
  • -s <field>, --lsp=<field> β€” the log specified field of LID ✨
  • -S <field>, --lsi=<field> β€” the log specified field of Log Specific Identifier 🌸
  • -r, --rae β€” Retain an Asynchronous Event. keep it, queen πŸ‘‘
  • -y <command_set_identifier>, --csi=<command_set_identifier> β€” specifies the identifier of the command set. If you don't issue it, the NVM Command Set gets selected by default πŸŽ€
  • -O, --ot β€” sets the offset type, and this one's actually kinda important so pay attention bestie 🫢:
    • set to false β†’ the Log Page Offset Lower field and the Log Page Offset Upper field specify the byte offset into the log page to be returned.
    • set to true β†’ those same two fields specify the index into the list of data structures in the log page to be returned.
    • The default is byte offset. But the moment you specify the option, index mode is what you get. periodt ✨
  • -x <length>, --xfer-len <length> β€” specify the read chunk size. The length argument is expected to be a multiple of 4096, and the default size is 4096 πŸ”₯

🌍 GLOBAL OPTIONS 🌍

These live up at the top-level nvme command and are available to this subcommand too β€” like the group chat everyone's in πŸ‘‘

  • --dry-run β€” prints the command that would be executed, but does not actually execute it. all talk, no action, and honestly? valid πŸ’…
  • --no-ioctl-probing β€” disables probing for 64-bit IOCTL support πŸ¦‹
  • --no-retries β€” disables retry logic on transient errors. one shot, no take-backs 😭
  • -o <fmt>, --output-format=<fmt> β€” sets the reporting format to normal, tabular, 'json, or binary. Only one output format at a time, don't be greedy πŸŽ€
  • --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. Other versions are rejected, no exceptions ✨
  • --quiet β€” suppresses informational messages. Errors are still reported, and --quiet cancels any --verbose for the library log level. the way it shuts everything uppp 🀫
  • --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) ⭐
  • -v, --verbose β€” increases the level of detail in the output. May be specified multiple times to further increase verbosity β€” stack 'em, bestie πŸ”₯
These options can also be set as machine-wide defaults in nvme-cli.conf(5). A command-line flag always overrides the file. iykyk πŸ’–

πŸ“ EXAMPLES πŸ“

  • Get 512 bytes from log page 2 🌸
# nvme get-log /dev/nvme0 --log-id=2 --log-len=512

So this one grabs log page 2 (SMART) and requests 512 bytes. On success, the returned log gets dumped in hex and is not interpreted by the program β€” raw hex realness, no filter πŸ™ˆ

  • Have the program return the raw log page in binary: πŸ’€
# nvme get-log /dev/nvme0 -log-id=2 --log-len=512 --raw-binary > log_page_2.raw
# nvme get-log /dev/nvme0 -i 2 -l 512 -b > log_page_2.raw
It is not a good idea to not redirect stdout when using this mode. fr fr β€” please redirect, your terminal will thank you 😭

πŸ’« NVME πŸ’«

Part of the nvme-user suite πŸ‘‘


aaaand that's the whole page, bestie, you ate that πŸ“πŸ’… This was NVMe, dated 10/30/2026 β€” the very same NVME-GET-LOG(1) you've been reading, straight from the source's version line. mwah, go read some logs πŸŽ€βœ¨

πŸ“¦ where this page comes from