NVME-IO-MGMT-SEND(1)

πŸ’… NVME-IO-MGMT-SEND(1) β€” like, the NVMe Manual one, bestie ✨

okay so real talk, this is a page from the NVMe Manual and it's about one very specific little command, and honestly? it's giving "raw interface, no training wheels." let's get into it πŸŽ€


✨ NAME ✨

nvme-io-mgmt-send β€” the I/O Management Send command, periodt πŸ¦‹


🌸 SYNOPSIS 🌸

nvme [<global-options>] io-mgmt send <device>
                        [--namespace-id=<NUM> | -n <NUM>]
                        [--mos=<NUM> | -s <NUM>]
                        [--mo=<NUM> | -m <NUM>]
                        [--data=<FILE> | -d <FILE>]
                        [--data-len=<NUM> | -l <NUM>]

like, that's the whole shape of it. <device> is the main character here, everything else is optional-ish (until it isn't, see below πŸ‘€).


πŸ’– DESCRIPTION πŸ’–

so for the NVMe device you hand it, this issues the I/O Management Send command rocking the management operation (mo) you asked for and the management operation specific parameter (mos) that goes with it. that's it, that's the vibe ✨

it's the generic interface β€” the forward-compatibility girly. basically it exists so that when new operations get added that this program isn't aware of at the time of its development, you're not stuck. she's ready for whatever the future drops πŸ”₯

and because she's generic, she does not hold your hand: no convenience parameters to build the binary payload for you. you're assembling that yourself, bestie. it's giving DIY 🫢

πŸ’€ heads up, deprecated-alias alert: the bare nvme io-mgmt-send form (no space in it) still works as a deprecated alias and will be removed in a future major version. new scripts should use nvme io-mgmt send instead. don't get attached to the old one, okay? she's leaving 😭

πŸŽ€ OPTIONS πŸŽ€

  • -n <NUM>, --namespace-id=<NUM> β€” use the namespace id you give it for the command. if you don't provide one, the namespace id of the block device gets used instead. but if the command is issued to a non-block device, this parameter is required β€” no cap, it's mandatory then πŸ™ˆ. also the broadcast value 0xffffffff can be given as all or -1, iconic little trio πŸ‘‘
  • -d <FILE>, --data=<FILE> β€” the file to read the payload from. if you don't specify it, data gets read from the standard input stream. stdin girlies rise 🌈
  • -l <NUM>, --data-len=<NUM> β€” payload data buffer length. that's the whole lore πŸ’…
  • -m <NUM>, --mo <NUM> β€” Management Operation to perform. this is the what are we even doing flag ⭐
  • -s <NUM>, --mos=<NUM> β€” Management Operation Specific parameter. the little sidekick that goes with the operation above 🧚

πŸ‘‘ GLOBAL OPTIONS πŸ‘‘

these are defined up at the top-level nvme command and they're available to this subcommand too β€” so they're not this command's own, but she absolutely benefits πŸ’œ

  • --dry-run β€” print the command that would be executed, but don't actually execute it. manifesting the command without committing to it ✨
  • --no-ioctl-probing β€” disable probing for 64-bit IOCTL support. no poking around, we're skipping that πŸ¦‹
  • --no-retries β€” disable retry logic on transient errors. one shot, one opportunity πŸ’€
  • -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 your fighter 😀
  • --output-format-version=<version> β€” select 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 β€” we don't do off-menu versions here πŸŽ€
  • --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. very much a build-your-own-situation 🌸
  • --timeout=<ms> β€” set the timeout for the command in milliseconds. infinite or -1 waits without a time limit (0xffffffff). literally forever, bestie 🫢
  • -v, --verbose β€” increase the level of detail in the output. may be specified multiple times to further increase verbosity β€” stack it, she's not mad at it πŸ”₯
πŸ’‘ little fact drop: these options can also be set as machine-wide defaults in nvme-cli.conf(5). a command-line flag always overrides the file. always. no negotiating πŸ’…

🌟 NVME 🌟

part of nvme-cli. that's the family, that's the house she lives in 🏠


okay that's the whole page!! mwah πŸ’‹

signed off with love β€” this is the NVMe manual, dated 10/30/2026, and the page is NVME-IO-MGMT-SEND(1), no cap πŸ’œβœ¨

πŸ“¦ where this page comes from