---
name: "nvme-copy"
section: "1"
platform: "linux"
package: "nvme-cli"
version: "3.2-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/nvme-copy"
---

# nvme-copy(1)

Send an NVMe Simple Copy command, provide results

## NAME

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

## 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-tag-mask=<appmask> | -m <appmask>]
                        [--expected-app-tag-masks=<appmask,> | -M <appmask,>]
                        [--dir-type=<type> | -T <type>]
                        [--dir-spec=<spec> | -S <spec>]
                        [--format=<entry-format> | -F <entry-format>]
```

## 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 \<device\> 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

- \-n \<nsid\>, --namespace-id=\<nsid\>

  Sends the command with the requested nsid. This is required for the character devices, or overrides the block nsid if given. The broadcast value 0xffffffff can also be given as *all* or *-1*.

- \-d \<sdlba\>, --sdlba=\<sdlba\>

  64-bit addr of first destination logical block

- \-b \<nlb-list,\>, --blocks=\<nlb-list,\>

  Comma separated list of the number of blocks in each range

- \-s \<slbas,\>, --slbs=\<slbas,\>

  Comma separated list of the starting blocks in each range

- \--snsids=\<snsids,\>, -N \<snsids,\>

  Comma separated list of the source namespace identifiers in each range

- \--sopts=\<sopts,\>, -O \<sopts,\>

  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 \<prinfow\>, --prinfow=\<prinfow\>

  Protection Information field write definition.

- \-P \<prinfor\>, --prinfor=\<prinfor\>

  Protection Information field read definition.

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

  initial lba reference tag.

- \-R \<reftag,\>, --expected-ref-tags=\<reftag,\>

  expected lba reference tags (comma-separated list).

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

  lba app tag

- \-A \<apptag,\>, --expected-app-tags=\<apptag,\>

  expected lba app tags (comma-separated list)

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

  lba tag mask

- \-M \<appmask,\>, --expected-app-tag-masks=\<appmask,\>

  expected lba tag masks (comma-separated list)

- \-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.

- \-F \<entry-format\>, --format=\<entry-format\>

  source range entry format

## 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 \<fmt\>, --output-format=\<fmt\>

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

- \--output-format-version=\<version\>

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

- \--quiet

  Suppress informational messages. Errors are still reported, and --quiet cancels any --verbose for the library log level.

- \--set-options=\<key=value\>\[,\<key=value\>...\]

  Set libnvme library options for this invocation. Supported keys are *force-4k*, *mi-probe-enabled*, *test-base-dir* and *test-sysfs-dir*.

- \--timeout=\<ms\>

  Set the timeout for the command in milliseconds. *infinite* or *-1* waits without a time limit (0xffffffff).

- \-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)](/nvme-cli.conf/5.md). A command-line flag always overrides the file.

## EXAMPLES

No examples yet.

## NVME

Part of the nvme-user suite
