NVME-RPMB-WRITE-D(1)

πŸ“¦ version 3.2, in arch rolling

πŸ’… nvme-rpmb-write-data β€” like, the full manual page, bestie

okay so this is the nvme-rpmb-write-data page from the NVMe Manual, and it is literally the glow-up your RPMB target has been waiting for ✨ grab a snack, we're doing this πŸ“


🌸 NAME 🌸

nvme-rpmb-write-data β€” writes authenticated data to an RPMB target. that's the whole vibe πŸŽ€


✨ SYNOPSIS ✨

nvme [<global-options>] rpmb write-data <device>
                        [--msgfile=<data-file> | -f <data-file>]
                        [--msg=<data> | -d <data>]
                        [--keyfile=<key-file> | -g <key-file>]
                        [--key=<key> | -k <key>]
                        [--address=<offset>]
                        [--blocks=<512 byte sectors> | -b <sectors>]
                        [--target=<target-id> | -t <target-id>]

like, that's the shape of it πŸ’«


πŸ¦‹ DESCRIPTION πŸ¦‹

so this command does authenticated data writing to the RPMB target you picked, at the sector offset you gave it, and it uses the authentication key that was previously programmed with nvme rpmb program-key for that same target. iykyk πŸ”‘

and here's the tea: if the size you're asking for is not within the total size supported by the target, the request fails without ever being sent to the device. no cap, it just doesn't even leave the house πŸ’€

the <device> parameter is mandatory, and it has to be an NVMe character device β€” for example /dev/nvme0. that one's not optional, bestie, don't skip it πŸ™ˆ


πŸ‘‘ OPTIONS πŸ‘‘

  • -t <target>, --target=<target> β€” the RPMB target id. it should be one of the supported RPMB targets, the ones reported by nvme rpmb info. if you don't pass anything, the default of 0 gets used as the RPMB target. slay, sensible default 🎯
  • --address=<offset> β€” the address (as a 512 byte sector offset from 0) to write to on the specified RPMB target. so like, where the party starts πŸ“
  • -b <sectors>, --blocks=<sectors> β€” the size, in 512 byte sectors, to write to the specified RPMB target. how much data you're moving in πŸ”₯
  • -k <key>, --key=<key>, -g <key-file>, --keyfile=<key-file> β€” the authentication key that was previously programmed with nvme rpmb program-key for the given target. you can either hand it over right on the command line with --key or -k, or read it out of a file with --keyfile or -g. your key, your rules πŸ’…
  • -f <data-file>, --msgfile=<data-file> β€” the name of the file that the data-to-be-written gets read from. very "i have it saved in a file" energy πŸ“
  • -d <data>, --msg=<data> β€” supplies the data to be written directly on the command line, instead of reading it from a file. main character move, ngl ✨

🌈 GLOBAL OPTIONS 🌈

these ones live at the top-level nvme command and they're also available to this subcommand. shared vibes only 🫢

  • --dry-run β€” prints the command that would be executed, but does not actually execute it. window shopping, basically πŸ›οΈ
  • --no-ioctl-probing β€” disables probing for 64-bit IOCTL support. bye, probing πŸ‘‹
  • --no-retries β€” disables the retry logic on transient errors. one shot, one opportunity πŸ’€
  • -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 a lane, bestie 🎯 (note: the 'json there is exactly how the original lists it, so we keep it exactly, ok?)
  • --output-format-version=<version> β€” picks 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 versions are rejected β€” no negotiating 🚫
  • --quiet β€” suppresses informational messages. errors are still reported, and --quiet cancels out any --verbose for the library log level. shhh 🀫
  • --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. customise away πŸŽ€
  • --timeout=<ms> β€” sets the timeout for the command, in milliseconds. infinite or -1 waits without a time limit (0xffffffff). no clock-watching ⏳
  • -v, --verbose β€” increases the level of detail in the output. may be specified multiple times to further increase verbosity. the more the merrier, honestly πŸ—£οΈ
πŸ’‘ also: these options can be set as machine-wide defaults in nvme-cli.conf(5), and a command-line flag always overrides the file. flags stay winning πŸ‘‘

🌟 EXAMPLES 🌟

  • write 200 blocks of (512 bytes) from input.bin onto target 0:
# nvme rpmb write-data /dev/nvme0 -t 0 -f input.bin -b 200 -k 'SecretKey'

look at that. iconic. no notes πŸ’–


🧚 NVME 🧚

this one's part of the nvme-user suite. family 🫢


and that's the page, bestie!! 🌸 source NVMe, dated 10/30/2026 β€” mwah, go write some authenticated data, ily, bye πŸ’œπŸ¦‹βœ¨

πŸ“¦ where this page comes from