NVME-SET-FEATURE(1)
π nvme-set-feature β the NVMe Manual page you actually wanna read
okay so bestie, welcome to nvme-set-feature(1) from the NVMe Manual β¨ this is the page where we set a feature on your NVMe drive and it tells you what happened. buckle up, we're doing this together π«Ά
πΈ NAME πΈ
nvme-set-feature β Sets an NVMe feature, returns applicable results π
β¨ SYNOPSIS β¨
nvme [<global-options>] set-feature <device>
[--namespace-id=<nsid> | -n <nsid>]
[--feature-id=<fid> | -f <fid>]
[--value=<value> | -V <value>]
[--uuid-index=<uuid-index> | -U <uuid_index>]
[--data-len=<data-len> | -l <data-len>]
[--data=<data-file> | -d <data-file>]
[--save | -s]
[--cdw12=<cdw12> | -c <cdw12>]
like, copy-paste it, it's fine, I won't tell anyone π
π¦ DESCRIPTION π¦
So what does this lil command actually do? It submits an NVMe Set Feature admin command and hands you back the applicable results. and by "applicable results" we mean it might be just the feature's value β or it might also include a whole feature structure if that feature is the type that requires one (ex: LBA Range Type). some features are extra like that, no cap π
The <device> parameter is mandatory β you literally cannot skip it β and it can be either the NVMe character device (ex: /dev/nvme0), or a namespace block device (ex: /dev/nvme0n1). either one slaps, pick whichever one you've got π
On success, the value sent to the device is displayed. that's the little reward for a job well done, periodt β¨
π OPTIONS π
here's where the fun stuff lives. every single flag, right here, none skipped π«Ά
-n <nsid>,--namespace-id=<nsid>β Sets the feature for the given nsid. this one's optional, and tbh most features don't even use this value. also you can pass the broadcast value0xffffffffas all or-1. yes, literally the wordsallor-1, go off king π
more coming, bestie β don't go anywhere π§
-f <fid>,--feature-id=<fid>β this is the which feature are we even talking about knob π you hand it a feature id and it goes in the command, simple as that. Heads up tho: the value you pass should be in hex π₯ (that's literally what the page says, so fr fr, hex it up).
Ok bestie, here's the full vibe-check menu of feature ids β this is the whole list, no skips, no cuts π:
0x01|arbitrationβ Arbitration0x02|power-mgmtβ Power Management0x03|lba-rangeβ LBA Range Type0x04|temp-threshβ Temperature Threshold0x05|err-recoveryβ Error Recovery0x06|volatile-wcβ Volatile Write Cache0x07|num-queuesβ Number of Queues0x08|irq-coalesceβ Interrupt Coalescing0x09|irq-configβ Interrupt Vector Configuration0x0a|write-atomicβ Write Atomicity Normal0x0b|async-eventβ Asynchronous Event Configuration0x0c|auto-pstβ Autonomous Power State Transition0x0d|host-mem-bufβ Host Memory Buffer0x0e|timestampβ Timestamp0x0f|katoβ Keep Alive Timer0x10|hctmβ Host Controlled Thermal Management0x11|nopscβ Non-Operational Power State Config0x12|rrlβ Read Recovery Level Config0x13|plm-configβ Predictable Latency Mode Config0x14|plm-windowβ Predictable Latency Mode Window0x15|lba-sts-intervalβ LBA Status Information Report Interval0x16|host-behaviorβ Host Behavior Support0x17|sanitizeβ Sanitize Config0x18|endurance-evt-cfgβ Endurance Group Event Configuration0x19|iocs-profileβ I/O Command Set Profile0x1a|spinup-controlβ Spinup Control0x1b|power-loss-signalβ Power Loss Signaling Config0x1c|perf-characteristicsβ Performance Characteristics0x1d|fdpβ Flexible Data Placement0x1e|fdp-eventsβ FDP Events0x1f|ns-admin-labelβ Namespace Admin Label0x20|key-valueβ Key Value Configuration0x21|ctrl-data-queueβ Controller Data Queue0x78|emb-mgmt-ctrl-addrβ Embedded Management Controller Address0x79|host-mgmt-agent-addrβ Host Management Agent Address0x7d|enh-ctrl-metadataβ Enhanced Controller Metadata0x7e|ctrl-metadataβ Controller Metadata0x7f|ns-metadataβ Namespace Metadata0x80|sw-progressβ Software Progress Marker0x81|host-idβ Host Identifier
β¨ that's all 41 of them, bestie, every single one, right there. no gatekeeping π«Ά
0x82/resv-maskβ Reservation Notification Mask π0x83/resv-persistβ Reservation Persistence0x84/write-protectβ Namespace Write Protection Config0x85/bp-write-protectβ Boot Partition Write Protection Config
okay and now the actual flags for this bad boy π
-l <data-len>,--data-len=<data-len>β the data length for the buffer you're submitting for this feature. ngl most of the known features just don't use this value at all. the exceptions are LBA Range Type and host identifier π«Ά-d <data-file>,--data=<data-file>β the data file for the buffer submitted for this feature. again, most known features don't touch this one. the exception is LBA Range Type and host identifier. it defaults toSTDINso you can pipe files andechostraight into it, iconic behavior honestly β¨-V <value>,--value=<value>β the value for command dword 11, aka the value you want to set the feature to. this is the main character right here π-s,--saveβ save the attribute so it persists through all power states and resets. yes bestie, it survives the reboot πΎ-U <uuid-index>,--uuid-index=<uuid-index>β UUID Index of the feature-c <cdw12>,--cdw12=<cdw12>β the value for command dword 12, if applicable.
π GLOBAL OPTIONS π
these ones live at the top-level nvme command and they're available to this subcommand too, so you get them for free, no cap π
--dry-runβ print the command that would be executed, but don't actually execute it. peek at it first, girlies, it's giving look-before-you-leap π--no-ioctl-probingβ disable probing for 64-bit IOCTL support.--no-retriesβ disable retry logic on transient errors.-o <fmt>,--output-format=<fmt>β set the reporting format tonormal,tabular,'json, orbinary. only one output format at a time please, we don't do chaos πΈ--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? rejected. blocked. not on my watch π--quietβ suppress informational messages. errors are still reported, and--quietcancels any--verbosefor the library log level. shhh era π€«--set-options=<key=value>[,<key=value>...]β set libnvme library options for this invocation. supported keys areforce-4k,mi-probe-enabled,test-base-dirandtest-sysfs-dirπ--timeout=<ms>β set the timeout for the command in milliseconds.infiniteor-1waits without a time limit (0xffffffff). literally forever, she's patient π-v,--verboseβ increase the level of detail in the output. you can specify it multiple times to further increase verbosity. stack 'em up π§
these options can also be set as machine-wide defaults in nvme-cli.conf(5). a command-line flag always overrides the file β flags stay winning π
π¦ EXAMPLES π¦
- sets the Power State (PS) to
1in feature id 2:
# nvme set-feature /dev/nvme0 -f 2 /dev/nvme0n1 -V 0x1
- sets the host id to the ascii string.
# echo "abcdefgh" | nvme set-feature /dev/nvme0 -f 0x81 -l 8
nvme set-feature /dev/nvme0 -f 0x81 -l 8 -U 0x1
π NVME π
part of the nvme-user suite. that's the whole vibe π«Ά
and that's the page bestie, we ate and left zero crumbs π
β¨ this one's NVMe, dated 10/30/2026, filed under NVME-SET-FEATURE(1) β go set some features, ily, bye ππ¦π
π¦ where this page comes from
- arch rolling: nvme-cli 3.2-1 Β· GPL-2.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms