NVME-RESV-REGISTER(1)

πŸ’… NVME-RESV-REGISTER(1) β€” the nvme-resv-register page, but make it make sense

okay so bestie, this is a page from the NVMe Manual and it's literally all about registering an nvme reservation. yes it's as niche as it sounds and yes you're gonna slay it. πŸŽ€


✨ NAME ✨

nvme-resv-register β€” register an nvme reservation πŸ¦‹


✨ SYNOPSIS ✨

nvme [<global-options>] resv register <device>
                        [--namespace-id=<nsid> | -n <nsid>]
                        [--crkey=<crkey> | -c <crkey>]
                        [--nrkey=<nrkey> | -k <nrkey>]
                        [--rrega=<rrega> | -r <rrega>]
                        [--cptpl=<cptpl> | -p <cptpl>]
                        [--iekey | -i]

✨ DESCRIPTION ✨

so the Reservation Register command is the main character here β€” it's the one that registers, unregisters, or replaces a reservation key. that's the whole vibe. πŸ’…

and listen β€” the old bare nvme resv-register form (no space in the middle, iykyk) still works, but it's a deprecated alias and it's getting yeeted in a future major version. so like, new scripts should use nvme resv register instead, okay? don't be that person. 🫢


✨ OPTIONS ✨

  • -n <nsid>, --namespace-id=<nsid> β€” overrides the nsid field. πŸŽ€ if you're using the admin character device, this one is required β€” no skipping it. the broadcast value 0xffffffff can also be given as all or -1.
  • -c <crkey>, --crkey=<crkey> β€” Current Reservation Key. so if the Reservation Register Action is 001b (that's Unregister Reservation Key) or 010b (Replace Reservation Key), then this field holds the current reservation key associated with the host πŸ¦‹. for every other Reservation Register Action value, this field is reserved. oh and β€” the controller ignores this field's value when the Ignore Existing Key (IEKEY) bit is set to '1'. so like, don't stress about it then πŸ’€.
  • -k <nrkey>, --nrkey=<nrkey> β€” New Reservation Key. if the Reservation Register Action is 000b (Register Reservation Key) or 010b (Replace Reservation Key), then this field contains the new reservation key associated with the host ✨. for all other Reservation Register Action values, this field is reserved. periodt.
  • -p <cptpl>, --cptpl=<cptpl> β€” Change Persist Through Power Loss State. this field lets the Persist Through Power Loss state associated with the namespace be modified as a side effect of processing this command 🧚. the values:
    • 0 β€” No change to PTPL state
    • 1 β€” Reserved
    • 2 β€” Set PTPL state to '0'. Reservations are released and registrants are cleared on a power on.
    • 3 β€” Set PTPL state to '1'. Reservations and registrants persist across a power loss.

(yes i turned the table into bullets, you're welcome, it reads so much better πŸ’–)

  • -r <rrega>, --rrega=<rrega> β€” Reservation Register Action. this field specifies the registration action that gets performed by the command πŸ‘‘:
    • 0 β€” Register Reservation Key
    • 1 β€” Unregister Reservation Key
    • 2 β€” Replace Reservation Key
    • 3-7 β€” Reserved
  • -i, --iekey β€” Ignore Existing Key. if this bit is set to a 1, then the Current Reservation Key (CRKEY) check is disabled and the command shall succeed regardless of the CRKEY field value 😭πŸ”₯.

indicator option, defaults to 0.


✨ GLOBAL OPTIONS ✨

these bad boys are defined at the top-level nvme command, and they're available to this subcommand too β€” so you're never locked out 🫢:

  • --dry-run β€” prints the command that would be executed, but doesn't actually execute it. vibe check first, commit later πŸ’…
  • --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 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. other versions are rejected πŸ™ˆ.
  • --quiet β€” suppresses informational messages. errors are still reported, and --quiet cancels any --verbose for the library log level 🀫.
  • --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 πŸ”₯.
these options can also be set as machine-wide defaults in nvme-cli.conf(5). a command-line flag always overrides the file. no cap. πŸ’œ

✨ EXAMPLES ✨

No examples yet 😭 (literally just vibes and an empty section, we move)


✨ NVME ✨

Part of the nvme-user suite 🌈


and that's the whole page bestie, go forth and register those reservations πŸ’–βœ¨πŸ¦‹

sign-off: this gorgeous little manual page is from the nvme-user suite, dated 10/30/2026 β€” the NVMe version of "posted from my phone" πŸŽ€

πŸ“¦ where this page comes from