nvme-write - Man Page

Send an NVMe write command, provide results

Synopsis

nvme-write <device> [--start-block=<slba> | -s <slba>]
                        [--block-count=<nlb> | -c <nlb>]
                        [--block-size=<size> | -b <size>]
                        [--data-size=<size> | -z <size>]
                        [--metadata-size=<size> | -y <size>]
                        [--ref-tag=<reftag> | -r <reftag>]
                        [--data=<data-file> | -d <data-file>]
                        [--metadata=<metadata-file> | -M <metadata-file>]
                        [--prinfo=<prinfo> | -p <prinfo>]
                        [--app-tag-mask=<appmask> | -m <appmask>]
                        [--app-tag=<apptag> | -a <apptag>]
                        [--limited-retry | -l] [--force-unit-access | -f]
                        [--dir-type=<type> | -T <type>]
                        [--dir-spec=<spec> | -S <spec>] [--dsm=<dsm> | -D <dsm>]
                        [--show-command | -V] [--dry-run | -w] [--latency | -t]
                        [--storage-tag<storage-tag> | -g <storage-tag>]
                        [--storage-tag-check | -C] [--force]
                        [--output-format=<fmt> | -o <fmt>] [--verbose | -v]
                        [--timeout=<timeout>]

Description

The Write command writes the logical blocks specified by the command to the medium from the data data buffer provided​. Will use stdin by default if you don’t provide a file​.

Options

-s <slba>, --start-block=<slba>

Start block​.

-c,  --block-count

The number of blocks to transfer​. This is a zeroes based value to align with the kernel’s use of this field​. (ie​. 0 means transfer 1 block)​.

-b <size>, --block-size=<size>

If specified, the logical block size in bytes, with metasize also describing the metadata size for an individual block​. Discovered by identify namespace otherwise​.

-z <size>, --data-size=<size>

Size of data, in bytes​.

-y <size>, --metadata-size=<size>

Size of metadata in bytes​.

-d <data-file>, --data=<data-file>

Data file​. If none provided, contents are sent from STDIN​.

-M <metadata-file>, --metadata=<metadata-file>

Metadata file, if necessary​.

-p <prinfo>, --prinfo=<prinfo>

Protection Information field definition​.

BitDescription
3PRACT: Protection Information Action​. When set to 1, PI is stripped/inserted on read/write when the block format’s metadata size is 8​. When set to 0, metadata is passes​.
2:0PRCHK: Protection Information Check:
2Set to 1 enables checking the guard tag
1Set to 1 enables checking the application tag
0Set to 1 enables checking the reference tag
-r <reftag>, --ref-tag=<reftag>

Optional reftag when used with protection information​.

-m <appmask>, --app-tag-mask=<appmask>

Optional application tag mask when used with protection information​.

-a <apptag>, --app-tag=<apptag>

Optional application tag when used with protection information​.

-l,  --limited-retry

Sets the limited retry flag​.

-f,  --force-unit-access

Set the force-unit access flag​.

-T <type>, --dir-type=<type>

Optional directive type​. The nvme-cli only enforces the value be in the defined range for the directive type, though the NVMe specification (1​.3a) defines only one directive, 01h, for write stream identifiers​.

-S <spec>, --dir-spec=<spec>

Optional field for directive specifics​. When used with write streams, this value is defined to be the write stream identifier​. The nvme-cli will not validate the stream requested is within the controller’s capabilities​.

-D <dsm>, --dsm=<dsm>

The optional data set management attributes for this command​. The argument for this is the least significant 8 bits of the DSM field in a write command; the most significant 16 bits of the field come from the directive specific field, if used​. This may be used to set attributes for the LBAs being written, like access frequency, type, latency, among other things, as well as yet to be defined types​. Please consult the NVMe specification for detailed breakdown of how to use this field​.

-V,  --show-cmd

Print out the command to be sent​.

-w,  --dry-run

Do not actually send the command​. If want to use --dry-run option, --show-cmd option must be set​. Otherwise --dry-run option will be ignored​.

-t,  --latency

Print out the latency the IOCTL took (in us)​.

-g <storage-tag>, --storage-tag=<storage-tag>

Variable Sized Expected Logical Block Storage Tag(ELBST)​.

-C,  --storage-tag-check

This flag enables Storage Tag field checking as part of end-to-end data protection processing​.

--force

Ignore namespace is currently busy and performed the operation even though​.

-o <fmt>, --output-format=<fmt>

Set the reporting format to normal, json or binary​. Only one output format can be used at a time​.

-v,  --verbose

Increase the information detail in the output​.

--timeout=<timeout>

Override default timeout value​. In milliseconds​.

Examples

No examples yet​.

Nvme

Part of the nvme-user suite

Referenced By

nvme(1).

08/18/2026 NVMe Manual