nvme-compare - Man Page

Send an NVMe Compare command, provide results

Synopsis

nvme-compare <device> [--start-block=<slba> | -s <slba>]
                        [--block-count=<nlb> | -c <nlb>]
                        [--block-size=<size> | -b <size>]
                        [--data-size=<size> | -z <size>]
                        [--metadata-size=<metasize> | -y <metasize>]
                        [--ref-tag=<reftag> | -r <reftag>]
                        [--data=<data-file> | -d <data-file>]
                        [--metadata=<meta> | -M <meta>]
                        [--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 Compare command reads the logical blocks specified by the command from the medium and compares the data read to a comparison data buffer transferred as part of the command​. If the data read from the controller and the comparison data buffer are equivalent with no miscompares, then the command completes successfully​. If there is any miscompare, the command completes with an error of Compare Failure​. If metadata is provided, then a comparison is also performed for the metadata​.

Options

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

64-bit address of the first block to access​.

-c <nlb>, --block-count=<nlb>

Number of blocks to be accessed (zero-based)​.

-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 to be compared in bytes​.

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

Size of metadata to be transferred in bytes​.

-r <reftag>, --ref-tag=<reftag>

Reference Tag for Protection Information

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

Data file​.

-M <meta>, --metadata=<meta>

Metadata file​.

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

Protection Information and check field​.

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
-m <appmask>, --app-tag-mask=<appmask>

App Tag Mask for Protection Information

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

App Tag for Protection Information

-l,  --limited-retry

Number of limited attempts to media​.

-f,  --force-unit-access

FUA option to guarantee that data is stored to media​.

-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