NVME-FW-COMMIT(1)

🌸 nvme-fw-commit(1) β€” the NVMe Manual, bestie edition 🌸

okay so real talk: this is nvme-fw-commit from the NVMe Manual, and it's literally the glow-up page for "verify my firmware and commit it". sit down, grab a strawberry drink πŸ“, we're doing this.


✨ NAME ✨

nvme-fw-commit β€” bestie, this is the one you use to verify and commit a firmware image. that's it, that's the whole vibe check. πŸ’…


πŸ¦‹ SYNOPSIS πŸ¦‹

nvme [<global-options>] fw commit <device> [--slot=<slot> | -s <slot>]
                        [--action=<action> | -a <action>]
                        [--bpid=<boot-partid> | -b <boot-partid>]

look at her. no cap, she's gorgeous. ✨


πŸ’– DESCRIPTION πŸ’–

so for the NVMe device you hand over, this sends an nvme Firmware Commit admin command and gives you the results back. that's the whole job, and honestly? she ate. πŸ‘‘

The Firmware Commit command is used to verify that a valid firmware image has been downloaded, and to commit that revision to a specific firmware slot. The host may select the firmware image to commit on the next controller reset (that's CC.EN transitioning from '1' to '0', a PCI function level reset, and/or other Controller or NVM Subsystem Reset) as part of this command. The currently executing firmware revision may be determined from the Firmware Revision field of the Identify Controller data structure, as indicated in the Firmware Slot Information log page. iykyk. πŸ”₯

⚠️ important, do not skip this: no further action is automatically taken to reset the device, which is usually required to complete the activation process. like, she commits but she doesn't drive you home. πŸš—

If your kernel and driver are recent enough, you can commit the firmware by issuing a reset through Linux sysfs, for example:

# echo 1 > /sys/class/nvme/nvme0/device/reset

If your kernel is not recent enough, you will need to remove and add the device some other way. old kernel problems, we've all been there 😭

The bare nvme fw-commit form (without a space) still works as a deprecated alias and will be removed in a future major version. New scripts should use nvme fw commit instead. she's retiring, let her go gracefully πŸ™ˆ


πŸŽ€ OPTIONS πŸŽ€

  • -a <action>, --action=<action> β€” the Commit Action πŸ’« this field specifies the action that is taken on the image downloaded with the Firmware Image Download command or on a previously downloaded and placed image. the values, in all their glory:
    • 0 | replace β€” Downloaded image replaces the image indicated by the Firmware Slot field. This image is not activated. (she's just moving in, not taking over the lease πŸ’€)
    • 1 | replace-and-activate β€” Downloaded image replaces the image indicated by the Firmware Slot field. This image is activated at the next reset. 🎬
    • 2 | set-active β€” The image indicated by the Firmware Slot field is activated at the next reset. ⭐
    • 3 | replace-and-activate-immediate β€” The image specified by the Firmware Slot field is requested to be activated immediately without reset. main character energy, no waiting πŸš€
    • 6 | replace-boot-partition β€” Downloaded image replaces the Boot Partition specified by the Boot Partition ID field. πŸ₯Ύ
    • 7 | activate-boot-partition β€” Mark the Boot Partition specified in the BPID field as active and update BPINFO.ABPID. πŸ‘‘
  • -s <slot>, --slot=<slot> β€” Firmware Slot: specifies the firmware slot that shall be used for the Commit Action, if applicable. If the value specified is 0h, then the controller shall choose the firmware slot (slot 1 – 7) to use for the operation. so you can pass the decision off to the controller, she's got it 🫢
  • --bpid=<boot-partid>, -b <boot-partid> β€” specifies the Boot partition that shall be used for the Commit Action, if applicable (default: 0). the default is literally zero, keep that in your notes πŸ“

🌈 GLOBAL OPTIONS 🌈

these are defined at the top-level nvme command and are available to this subcommand. group-chat-wide settings, fr fr:

  • --dry-run β€” Print the command that would be executed, but do not actually execute it. manifesting without acting ✨
  • --no-ioctl-probing β€” Disable probing for 64-bit IOCTL support.
  • --no-retries β€” Disable retry logic on transient errors. one shot, no take-backs πŸ’€
  • -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 one, queen, you can't have all four πŸŽ€ (yes, the quote before json is in the original, we don't question it πŸ™ˆ)
  • --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. v2 ate, no cap πŸ‘‘
  • --quiet β€” Suppress informational messages. Errors are still reported, and --quiet cancels any --verbose for the library log level. shhhh 🀫
  • --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.
  • --timeout=<ms> β€” Set the timeout for the command in milliseconds. infinite or -1 waits without a time limit (0xffffffff). she'll wait forever, literally 😭
  • -v, --verbose β€” Increase the level of detail in the output. May be specified multiple times to further increase verbosity. more v's = more tea 🍡

These options can also be set as machine-wide defaults in nvme-cli.conf(5). A command-line flag always overrides the file. flags > file, every time πŸ’…


⭐ EXAMPLES ⭐

  • commit the last downloaded fw to slot 1. iconic behaviour:
# nvme fw commit /dev/nvme0 --slot=1 --action=2

πŸ’œ ALIAS πŸ’œ

fw-activate β€” yes she has a nickname, and yes it's still valid 🫢


🌸 NVME 🌸

Part of the nvme-user suite. the whole family is cute, honestly 🧚


okay that's the page!! you did so good getting to the end πŸŽ‰ this beauty is from the NVMe crew, dated 10/30/2026 β€” go commit some firmware, bestie, and remember: no further action is automatically taken to reset the device, so go do your sysfs reset and slay πŸ’…βœ¨πŸ’–

πŸ“¦ where this page comes from