NVME-ZNS-REPORT-Z(1)

πŸ’– nvme-zns-report-zones(1) β€” the NVMe Manual, bestie edition πŸŽ€

okay so this is nvme-zns-report-zones, from the NVMe Manual (yes, that manual), and it's the glow-up for nvme-zns-report-zones β€” like, the page you're reading right now. we're retrieving and displaying the Report Zones data structure and honestly? she's iconic. ✨


🌸 NAME 🌸

nvme-zns-report-zones β€” retrieve and display the Report Zones data structure πŸ’… no cap, that's the whole job.


πŸ¦‹ SYNOPSIS πŸ¦‹

nvme [<global-options>] zns report-zones <device>
                                 [--namespace-id=<NUM> | -n <NUM>]
                                 [--start-lba=<IONUM> | -s <IONUM>]
                                 [--descs=<NUM> | -d <NUM>]
                                 [--state=<NUM> | -S <NUM>]
                                 [--extended | -e]
                                 [--partial | -p]

like, look at her. so many little flags. so organized. 🫢


✨ DESCRIPTION ✨

so for the NVMe device you give her, this sends the Zone Management Receive command, with the Zone Receive Action set to either Report Zones or Extended Report Zones, depending on the extended option. the way she just knows which one you want 🧚

the <device> parameter is mandatory, periodt β€” and it can be either the NVMe character device (ex: /dev/nvme0) or a namespace block device (ex: /dev/nvme0n1). you literally cannot skip it, she will not let you. 😭

on success, the data structure the device hands back gets decoded and displayed in one of several ways. very main character of it. πŸ‘‘


πŸ’œ OPTIONS πŸ’œ

  • -n <NUM>, --namespace-id=<NUM> β€” use the namespace id you provided for the command. if you don't provide one, the namespace id of the block device gets used instead. and heads up: if the command is issued to a non-block device, this parameter is required (no vibes-based guessing, sorry). also the broadcast value 0xffffffff can be given as all or -1 β€” little shortcut slay. 🌈
  • -s <lba>, --start-lba=<lba> β€” the starting LBA of the zone where the report begins. that's the launch point, bestie πŸš€
  • -d <NUM>, --descs=<NUM> β€” the number of descriptors to request in the report. ask for what you want fr fr.
  • -S <NUM>, --state=<NUM> β€” the state of zones to request in the report. known values include:
    • 0 β€” List all zones (default) 🌸
    • 1 β€” Empty State
    • 2 β€” Implicitly Opened State
    • 3 β€” Explicitly Opened State
    • 4 β€” Closed State
    • 5 β€” Full State
    • 6 β€” Read Only State
    • 7 β€” Offline State

(yes that was a table in the original, we've gone full bullet-list era. aesthetic upgrade, no cap. πŸŽ€)

  • -e, --extended β€” request to use the Extended Report Zones option. quick warning though: the extended data is not decoded β€” it just comes back raw, no fancy parsing. don't say I didn't tell you πŸ’€
  • -p, --partial β€” if set, the device returns the number of zones that match the state rather than the number of zones returned in the report. subtle but important, iykyk.

πŸ‘‘ GLOBAL OPTIONS πŸ‘‘

these are defined at the top-level nvme command, and they're available to this subcommand too. so generous of them honestly 🫢

  • --dry-run β€” print the command that would be executed, but don't actually execute it. manifesting the command without running it ✨
  • --no-ioctl-probing β€” disable probing for 64-bit IOCTL support.
  • --no-retries β€” disable retry logic on transient errors. no second chances, we're moving on πŸ’…
  • -o <fmt>, --output-format=<fmt> β€” set the reporting format to normal, tabular, 'json, or binary. only one output format may be used at a time β€” pick a lane, bestie. πŸ”₯
  • --output-format-version=<version> β€” select 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 β€” literally not invited to the party πŸ™ˆ
  • --quiet β€” suppress informational messages. errors are still reported, and --quiet cancels any --verbose for the library log level. she's quiet but she's still watching. πŸ‘€
  • --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. mix and match with commas, go off 🌟
  • --timeout=<ms> β€” set the timeout for the command in milliseconds. infinite or -1 waits without a time limit (0xffffffff). she can wait forever, she's patient like that ⏳
  • -v, --verbose β€” increase the level of detail in the output. may be specified multiple times to further increase verbosity. stack 'em, why not πŸ“š
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. no exceptions. periodt. πŸ’–

🌈 EXAMPLES 🌈

  • has the program interpret the report for 16 zones, and display the known fields in a human readable format:
# nvme zns report-zones /dev/nvme0 -n 1 -d 16
  • show the output in json format with extra details:
# nvme zns report-zones /dev/nvme0 -n 1 -d 16 -o json

like, she ate that. both commands. flawless. πŸ”₯


πŸ“ NVME πŸ“

part of nvme-cli. family. found family, even. πŸ’œ


okay so that's the whole page β€” huge shoutout to the NVMe crew, this one's from nvme-cli, dated 10/30/2026, and it's the NVME-ZNS-REPORT-Z(1) page you just read. go report some zones, bestie πŸ¦‹βœ¨

πŸ“¦ where this page comes from