NVME-LOG-ERROR(1)

πŸ“¦ version 3.2, in arch rolling

πŸ’… nvme-log-error β€” the error log page getter πŸŽ€

Okay bestie, so this little icon is part of the NVMe manual, and it's literally the nvme-log-error command β€” it sends an NVME Error log page request, then hands you back the result and the log. No cap. ✨


🌸 SYNOPSIS 🌸

nvme [<global-options>] log error <device>
                        [--log-entries=<entries> | -e <entries>]
                        [--raw-binary | -b]
                        [--valid-entry | -V]
                        [--sqid=<sqid> | -S <sqid>]
                        [--status=<status> | -s <status>]
                        [--lba=<lba> | -l <lba>]
                        [--namespace-id=<nsid> | -n <nsid>]
                        [--trtype=<trtype> | -t <trtype>]
                        [--csi=<csi> | -c <csi>]
                        [--opcode=<opcode> | -O <opcode>]

πŸ¦‹ DESCRIPTION πŸ¦‹

So what it does is: it retrieves the NVMe Error log page from an NVMe device and gives you back the returned structure. Every field in that returned structure β€” including like, the ordering of the entries β€” is described in the spec. (iykyk πŸ“–)

The <device> parameter is mandatory, bestie, you can't skip it. And it can be either the NVMe character device (ex: /dev/nvme0) or a namespace block device (ex: /dev/nvme0n1). Either is fine, slay.

On success, the returned error log structure can come back in one of several ways depending on what option flags you picked 🫢 β€” the structure may get parsed by the program and printed in a readable format, or the raw buffer may be printed to stdout so another program can parse it. Your call, main character. πŸ’…


✨ OPTIONS ✨

  • -e <entries>, --log-entries=<entries> β€” Says how many log entries the program should request from the device. Has to be at least one, and shouldn't exceed what the device can do. Defaults to 64 log entries. πŸ“
  • -b, --raw-binary β€” Prints the raw error log buffer to stdout. Straight up raw.
  • -V, --valid-entry β€” Output valid entry only. Just the good ones.
  • -S <sqid>, --sqid=<sqid> β€” Output specified SQID entry only.
  • -s <status>, --status=<status> β€” Output specified STATUS entry only.
  • -l <lba>, --lba=<lba> β€” Output specified LBA entry only.
  • -n <nsid>, --namespace-id=<nsid> β€” Output specified NSID entry only. The broadcast value 0xffffffff can also be given as all or -1. πŸ’œ
  • -t <trtype>, --trtype=<trtype> β€” Output specified TRTYPE entry only.
  • -c <csi>, --csi=<csi> β€” Output specified CSI entry only.
  • -O <opcode>, --opcode=<opcode> β€” Output specified OPC entry only.

πŸ‘‘ GLOBAL OPTIONS πŸ‘‘

These ones are defined at the top-level nvme command and are available to this subcommand too, so you get them for free πŸŽ€:

  • --dry-run β€” Prints the command that would be executed, but does not actually execute it. Manifesting the command, not doing it. πŸ™ˆ
  • --no-ioctl-probing β€” Disables probing for 64-bit IOCTL support.
  • --no-retries β€” Disables retry logic on transient errors.
  • -o <fmt>, --output-format=<fmt> β€” Sets the reporting format to normal, tabular, 'json, or binary. Only one output format may be used at a time β€” pick one, bestie, you can't have them all. πŸ’€
  • --output-format-version=<version> β€” Selects the output format version. Version 1 uses the original field naming, while version 2 (default) provides more consistent and script-friendly field names. Other versions are rejected. No sneaky versions allowed.
  • --quiet β€” Suppresses informational messages. Errors are still reported, and --quiet cancels any --verbose for the library log level. Shhh. 🀫
  • --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). Patience is a vibe. ⭐
  • -v, --verbose β€” Increases the level of detail in the output. May be specified multiple times to further increase verbosity. More is more, honestly.
Heads up 🫢 β€” 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 🌈

  1. Get the error log and print it in a human readable format:
# nvme log error /dev/nvme0
  1. Print the raw output to a file:
# nvme log error /dev/nvme0 --raw-binary > error_log.raw
Ok so real talk: it is probably a bad idea to not redirect stdout when using this mode. Like, don't just let it spill everywhere 😭 β€” redirect it. That's the warning, take it seriously.

🧚 NVME 🧚

Part of the nvme-user suite. That's the family, and honestly? iconic. πŸ‘‘


✨ okay that's the whole page, bestie β€” no notes, you ate πŸ’…

This one's from the NVMe manual, dated 10/30/2026, and yeah β€” the lovely humans behind the nvme-user suite made this, so go be nice to them πŸ’–πŸŒΈπŸ«Ά

πŸ“¦ where this page comes from