NVME-COPY(1) NVMe Manual NVME-COPY(1)

# [NAME](#NAME)

nvme-copy - Send an NVMe Simple Copy command, provide results

# [SYNOPSIS](#SYNOPSIS)

```
nvme [<global-options>] copy <device>


                        [--namespace-id=<nsid> | -n <nsid>]


                        [--sdlba=<sdlba> | -d <sdlba>]


                        [--blocks=<nlb-list,> | -b <nlb-list,>]


                        [--slbs=<slbas,> | -s <slbas,>]


                        [--snsids=<snsids,> | -N <snsids,>]


                        [--sopts=<sopts,> | -O <sopts,>]


                        [--limited-retry | -l]


                        [--force-unit-access | -f]


                        [--prinfow=<prinfow> | -p <prinfow>]


                        [--prinfor=<prinfor> | -P <prinfor>]


                        [--ref-tag=<reftag> | -r <reftag>]


                        [--expected-ref-tags=<reftag,> | -R <reftag,>]


                        [--app-tag=<apptag> | -a <apptag>]


                        [--expected-app-tags=<apptag,> | -A <apptag,>]


                        [--app-mask=<appmask> | -m <appmask>]


                        [--expected-app-masks=<appmask,> | -M <appmask,>]


                        [--dir-type=<type> | -T <type>]


                        [--dir-spec=<spec> | -S <spec>]


                        [--format=<entry-format> | -F <entry-format>]
```

# [DESCRIPTION](#DESCRIPTION)

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.

The &lt;device&gt; 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 '--namespace-id' 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.

# [OPTIONS](#OPTIONS)

-n &lt;nsid&gt;, --namespace-id=&lt;nsid&gt;

Sends the command with the requested nsid. This is required for the character devices, or overrides the block nsid if given.

-d &lt;sdlba&gt;, --sdlba=&lt;sdlba&gt;

64-bit addr of first destination logical block

-b &lt;nlb-list,&gt;, --blocks=&lt;nlb-list,&gt;

Comma separated list of the number of blocks in each range

-s &lt;slbas,&gt;, --slbs=&lt;slbas,&gt;

Comma separated list of the starting blocks in each range

--snsids=&lt;snsids,&gt;, -N &lt;snsids,&gt;

Comma separated list of the source namespace identifiers in each range

--sopts=&lt;sopts,&gt;, -O &lt;sopts,&gt;

Comma separated list of the source options in each range

-l, --limited-retry

Sets the limited retry flag.

-f, --force-unit-access

Set the force-unit access flag.

-p &lt;prinfow&gt;, --prinfow=&lt;prinfow&gt;

Protection Information field write definition.

-P &lt;prinfor&gt;, --prinfor=&lt;prinfor&gt;

Protection Information field read definition.

-r &lt;reftag&gt;, --ref-tag=&lt;reftag&gt;

initial lba reference tag.

-R &lt;reftag,&gt;, --expected-ref-tags=&lt;reftag,&gt;

expected lba reference tags (comma-separated list).

-a &lt;apptag&gt;, --app-tag=&lt;apptag&gt;

lba app tag

-A &lt;apptag,&gt;, --expected-app-tags=&lt;apptag,&gt;

expected lba app tags (comma-separated list)

-m &lt;appmask&gt;, --app-mask=&lt;appmask&gt;

lba tag mask

-M &lt;appmask,&gt;, --expected-app-masks=&lt;appmask,&gt;

expected lba tag masks (comma-separated list)

-T &lt;type&gt;, --dir-type=&lt;type&gt;

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 &lt;spec&gt;, --dir-spec=&lt;spec&gt;

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.

-F &lt;entry-format&gt;, --format=&lt;entry-format&gt;

source range entry format

# [GLOBAL OPTIONS](#GLOBAL_OPTIONS)

The following options are defined at the top-level nvme command and are available to this subcommand:

--dry-run

Print the command that would be executed, but do not actually execute it.

--no-ioctl-probing

Disable probing for 64-bit IOCTL support.

--no-retries

Disable retry logic on transient errors.

-o &lt;fmt&gt;, --output-format=&lt;fmt&gt;

Set the reporting format to *normal*, *tabular, 'json*, or *binary*. Only one output format may be used at a time.

--output-format-version=&lt;version&gt;

Select the output format version. Version *1* uses the original field naming, while version *2* (default) provides more consistent and script-friendly field names.

--timeout=&lt;ms&gt;

Set the timeout for the command in milliseconds.

-v, --verbose

Increase the level of detail in the output. May be specified multiple times to further increase verbosity.

These options can also be set as machine-wide defaults in [nvme-cli.conf(5)](/man/os/nvme-cli/nvme-cli.conf.5). A command-line flag always overrides the file.

# [EXAMPLES](#EXAMPLES)

No examples yet.

# [NVME](#NVME)

Part of the nvme-user suite

09/18/2026 NVMe

---

Document: nvme-copy(1) from nvme-cli 3.1-r0 (Chainguard OS)
Source: https://github.com/linux-nvme/nvme-cli
