NVME-NVME-MI-RECV(1)

πŸ’… nvme-nvme-mi-recv β€” the NVMe Manual, but make it make sense ✨

okay so bestie, welcome to the nvme-nvme-mi-recv page from the NVMe Manual β€” literally the glow-up era of sending NVMe-MI Receive commands, and I'm gonna walk you through it like we're texting at 2am 🫢


πŸ“› NAME

nvme-nvme-mi-recv β€” bestie, this one sends a NVMe-MI Receive command to the device you point at. that's the whole vibe. πŸ’…


🩷 SYNOPSIS

nvme [<global-options>] nvme-mi recv <device>
                        [--opcode=<opcode> | -O <opcode>]
                        [--namespace-id=<nsid> | -n <nsid>]
                        [--data-len=<data-len> | -l <data-len>]
                        [--nmimt=<nmimt> | -m <nmimt>]
                        [--nmd0=<nmd0> | -0 <nmd0>]
                        [--nmd1=<nmd1> | -1 <nmd1>]
                        [--input-file=<file> | -i <file>]

πŸ¦‹ DESCRIPTION

so you send a NVMe-MI Receive command to the specified device, and it returns results. iconic behavior, honestly. ✨

the <device> parameter is mandatory β€” no skipping it, bestie β€” and it can be either the NVMe character device (ex: /dev/nvme0) or the block device (ex: /dev/nvme0n1). either one slays, your choice πŸŽ€

on success it returns 0. otherwise you get an error code. no cap. 😭

🫢 quick heads-up, the bare nvme nvme-mi-recv form (no space, yeah that one) still works as a deprecated alias and it's getting yeeted in a future major version. new scripts should use nvme nvme-mi recv instead. like, future-proof your code, it's giving self-care. πŸ’œ

✨ OPTIONS ✨

  • -O <opcode>, --opcode=<opcode> β€” the NVMe-MI opcode you're sending to the device in the command. required argument because this param is mandatory, fr fr. like you cannot skip this one πŸ’€
  • -n <nsid>, --namespace-id=<nsid> β€” the value for the ns-id in the command. also the broadcast value 0xffffffff can be given as all or -1. cute little shortcut, iykyk 🌸
  • -l <data-len>, --data-len=<data-len> β€” the data length for the buffer used for this command. it's giving "how much room do we need" πŸŽ€
  • -m <nmimt>, --nmimt=<nmimt> β€” the value for the NVMe-MI message type in the command. yes, the name is a mouthful, we don't talk about it πŸ™ˆ
  • -0 <nmd0>, --nmd0=<nmd0> β€” the value for the NVMe management request dword 0 in the command. zero-shaped flag, iconic πŸ’…
  • -1 <nmd1>, --nmd1=<nmd1> β€” the value for the NVMe management request dword 1 in the command. it's the one-shaped sibling, love that for them πŸ¦‹
  • -i <file>, --input-file=<file> β€” if the command is a data-out (write) command, use this file to fill the buffer sent to the device. if no file is given, assumed to use STDIN. so like, pipe it in, no biggie πŸ“

πŸ‘‘ GLOBAL OPTIONS πŸ‘‘

these are defined at the top-level nvme command and bestie they are available to this subcommand, so you're not missing out on anything 🌈

  • --dry-run β€” print the command that would be executed, but do not actually execute it. the "looking respectfully" of flags πŸ‘€
  • --no-ioctl-probing β€” disable probing for 64-bit IOCTL support. sometimes you just don't need the whole investigation, y'know? πŸ”₯
  • --no-retries β€” disable retry logic on transient errors. one shot, main character energy. πŸ’€
  • -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 (default) provides more consistent and script-friendly field names. other versions are rejected. sorry bestie, no version 3, it does not exist πŸ™ˆ
  • --quiet β€” suppress informational messages. errors are still reported, and --quiet cancels any --verbose for the library log level. so like, shush but not too shush 🀫
  • --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. it's a little key-value buffet, help yourself πŸ“
  • --timeout=<ms> β€” set the timeout for the command in milliseconds. infinite or -1 waits without a time limit (0xffffffff). commitment issues? not in this house ✨
  • -v, --verbose β€” increase the level of detail in the output. may be specified multiple times to further increase verbosity. stack it like your iced coffee order, the more the merrier β˜•πŸ’œ
🫢 also!! these options can be set as machine-wide defaults in nvme-cli.conf(5). a command-line flag always overrides the file. CLI stays the main character, periodt. πŸ‘‘

πŸŽ€ EXAMPLES πŸŽ€

  • has the program issue a nvme-mi-recv to execute the VPD read. look at it go πŸ¦‹
# nvme nvme-mi recv /dev/nvme0n1 -O 5 -m 1 -0 0 -1 0x100 -l 256

🌸 NVME 🌸

part of the nvme-user suite. the family reunion we all love πŸ’–


okay that's the whole page bestie, no notes. this gorgeousness is from the NVMe source, dated 10/30/2026, and it's for the NVME-NVME-MI-RECV(1) page. go forth and recv responsibly πŸ«Άβœ¨πŸ‘‘

πŸ“¦ where this page comes from