NVMe Copy
NVMe Copy is an optional command that asks a controller to copy specified source data into a contiguous destination logical-block range.
The host submits range descriptors instead of moving the copied payload through a host buffer. [1] nvme-cli exposes source ranges, destination address and descriptor format. [2]
In NVM Command Set 1.2, block-addressed formats 0h/1h stay within one namespace; 2h/3h can name other source namespaces, subject to advertised support, host enablement and format compatibility. MSRC, MSSRL and MCL bound range count, individual length and total length. [1]
A failed command can leave destination data changed. Its completion identifies the lowest-numbered unsuccessful range, not total copied bytes; later ranges can also have been copied. A zero result does not prove that the destination remained unchanged. [1]
This is not the filesystem-level FICLONE interface. Fast-copy implementations may nevertheless use copy-on-write, so command completion does not prove physically independent allocation. [3] [1]
With formats 2h/3h, Fast Copy Only (FCO) can require the fast method for a source range. If it is unavailable, the command fails with Fast Copy Not Possible. For that status, DNR=0 permits retry; DNR=1 advises against retrying that Copy command, while host Read/Write copying remains an alternative. [1]
Relations
Advantages
- Avoids a host read-then-write payload round trip. [1]
Limitations
- Copy atomicity still depends on write-unit and boundary rules; support does not promise an unlimited transaction. [1]
- Fast-copy support does not guarantee that every operation is faster than host copying. [1]
Citations
- NVM Command Set 1.2: sections 3.3.2 and 4.1.5.1. Copyright 2008-2025 NVM Express, Inc. All rights reserved.
- nvme-cli v2.15: Copy command, source ranges and descriptor format
- Linux man-pages: FICLONE and filesystem extent-sharing semantics
Further reading
Sources & caveats
- The NVM 1.2 review covers block-addressed formats 0h-3h, not the byte-addressed format 4h. The edition is pinned, not a latest-version claim.
- Source review only; no raw-device command, physical-allocation measurement or performance benchmark was run.