'\" t
.\" Title: nvme-copy
.\" Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author]
.\" Generator: DocBook XSL Stylesheets vsnapshot
.\" Date: 09/18/2026
.\" Manual: NVMe Manual
.\" Source: NVMe
.\" Language: English
.\"
.TH "NVME\-COPY" "1" "09/18/2026" "NVMe" "NVMe Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.\" http://bugs.debian.org/507673
.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
.\" disable hyphenation
.nh
.\" disable justification (adjust text to left margin only)
.ad l
.\" -----------------------------------------------------------------
.\" * MAIN CONTENT STARTS HERE *
.\" -----------------------------------------------------------------
.SH "NAME"
nvme-copy \- Send an NVMe Simple Copy command, provide results
.SH "SYNOPSIS"
.sp
.nf
\fInvme\fR [] \fIcopy\fR
[\-\-namespace\-id= | \-n ]
[\-\-sdlba= | \-d ]
[\-\-blocks= | \-b ]
[\-\-slbs= | \-s ]
[\-\-snsids= | \-N ]
[\-\-sopts= | \-O ]
[\-\-limited\-retry | \-l]
[\-\-force\-unit\-access | \-f]
[\-\-prinfow= | \-p ]
[\-\-prinfor= | \-P ]
[\-\-ref\-tag= | \-r ]
[\-\-expected\-ref\-tags= | \-R ]
[\-\-app\-tag= | \-a ]
[\-\-expected\-app\-tags= | \-A ]
[\-\-app\-mask= | \-m ]
[\-\-expected\-app\-masks= | \-M ]
[\-\-dir\-type= | \-T ]
[\-\-dir\-spec= | \-S ]
[\-\-format= | \-F ]
.fi
.SH "DESCRIPTION"
.sp
The Copy command is used by the host to copy data from one or more source logical block ranges to a single consecutive destination logical block range\&.
.sp
The parameter is mandatory and may be either the NVMe character device (ex: /dev/nvme0), or a namespace block device (ex: /dev/nvme0n1)\&. If the character device is given, the \*(Aq\-\-namespace\-id\*(Aq option is mandatory, otherwise it will use the ns\-id of the namespace for the block device you opened\&. For block devices, the ns\-id used can be overridden with the same option\&.
.SH "OPTIONS"
.PP
\-n , \-\-namespace\-id=
.RS 4
Sends the command with the requested nsid\&. This is required for the character devices, or overrides the block nsid if given\&.
.RE
.PP
\-d , \-\-sdlba=
.RS 4
64\-bit addr of first destination logical block
.RE
.PP
\-b , \-\-blocks=
.RS 4
Comma separated list of the number of blocks in each range
.RE
.PP
\-s , \-\-slbs=
.RS 4
Comma separated list of the starting blocks in each range
.RE
.PP
\-\-snsids=, \-N
.RS 4
Comma separated list of the source namespace identifiers in each range
.RE
.PP
\-\-sopts=, \-O
.RS 4
Comma separated list of the source options in each range
.RE
.PP
\-l, \-\-limited\-retry
.RS 4
Sets the limited retry flag\&.
.RE
.PP
\-f, \-\-force\-unit\-access
.RS 4
Set the force\-unit access flag\&.
.RE
.PP
\-p , \-\-prinfow=
.RS 4
Protection Information field write definition\&.
.RE
.PP
\-P , \-\-prinfor=
.RS 4
Protection Information field read definition\&.
.RE
.PP
\-r , \-\-ref\-tag=
.RS 4
initial lba reference tag\&.
.RE
.PP
\-R , \-\-expected\-ref\-tags=
.RS 4
expected lba reference tags (comma\-separated list)\&.
.RE
.PP
\-a , \-\-app\-tag=
.RS 4
lba app tag
.RE
.PP
\-A , \-\-expected\-app\-tags=
.RS 4
expected lba app tags (comma\-separated list)
.RE
.PP
\-m , \-\-app\-mask=
.RS 4
lba tag mask
.RE
.PP
\-M , \-\-expected\-app\-masks=
.RS 4
expected lba tag masks (comma\-separated list)
.RE
.PP
\-T , \-\-dir\-type=
.RS 4
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\&.
.RE
.PP
\-S , \-\-dir\-spec=
.RS 4
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\(cqs capabilities\&.
.RE
.PP
\-F , \-\-format=
.RS 4
source range entry format
.RE
.SH "GLOBAL OPTIONS"
.sp
The following options are defined at the top\-level nvme command and are available to this subcommand:
.PP
\-\-dry\-run
.RS 4
Print the command that would be executed, but do not actually execute it\&.
.RE
.PP
\-\-no\-ioctl\-probing
.RS 4
Disable probing for 64\-bit IOCTL support\&.
.RE
.PP
\-\-no\-retries
.RS 4
Disable retry logic on transient errors\&.
.RE
.PP
\-o , \-\-output\-format=
.RS 4
Set the reporting format to
\fInormal\fR,
\fItabular, \*(Aqjson\fR, or
\fIbinary\fR\&. Only one output format may be used at a time\&.
.RE
.PP
\-\-output\-format\-version=
.RS 4
Select the output format version\&. Version
\fI1\fR
uses the original field naming, while version
\fI2\fR
(default) provides more consistent and script\-friendly field names\&.
.RE
.PP
\-\-timeout=
.RS 4
Set the timeout for the command in milliseconds\&.
.RE
.PP
\-v, \-\-verbose
.RS 4
Increase the level of detail in the output\&. May be specified multiple times to further increase verbosity\&.
.RE
.sp
These options can also be set as machine\-wide defaults in nvme\-cli\&.conf(5)\&. A command\-line flag always overrides the file\&.
.SH "EXAMPLES"
.sp
No examples yet\&.
.SH "NVME"
.sp
Part of the nvme\-user suite