Copying a multi-hundred-gigabyte virtual disk image on a traditional file server means reading every block and writing it again, tying up disks and network for as long as the job runs. On a pool that supports block cloning, the same copy can finish almost as soon as you press Enter, and the pool's free space barely moves. ZFS block cloning arrived in OpenZFS 2.2, and later releases, including OpenZFS 2.4, have hardened it with fixes. It is worth understanding what happens under the hood before relying on it.
What Actually Happens When a Block Is Cloned
ZFS already tracks every piece of data through block pointers: small records that say where a block lives on disk, how big it is, and what its checksum should be. A normal copy creates brand new blocks and new pointers. A clone skips the data movement entirely. The destination file receives pointers that reference the blocks the source file already owns, and ZFS records the extra reference in a structure called the block reference table, often shortened to BRT.
From the application's point of view, two independent files now exist. Each can be opened, renamed, or deleted without affecting the other. Only when one of them is modified does ZFS allocate new space, and even then only for the blocks that changed. Copy-on-write, which ZFS has always used for snapshots and data integrity, does the rest.
How Clients Trigger It
ZFS block cloning is not something an administrator schedules. It happens when software asks the operating system for an efficient copy. On Linux, that request usually comes through the copy_file_range system call or a reflink-style ioctl. Recent versions of coreutils cp use these paths when available, so a plain copy inside the same pool may be cloned without any special flags.
Network clients can benefit too. When a Windows machine copies a file within the same SMB share, it can ask the server to perform a server-side copy instead of pulling the data down and pushing it back. NFS 4.2 offers a similar operation. Whether a given NAS translates these requests into clones depends on its software stack, so test rather than assume.
Where Instant Copies Pay Off
The biggest wins show up wherever large files get duplicated routinely:
- Virtual machine templates, where new guests start as copies of a golden image.
- Test and development environments that need a fresh copy of a production database file.
- Media workflows in which editors duplicate large project files before making changes.
- Backup software that builds synthetic full backups by stitching together existing data.
That last case deserves attention. Backup products that support fast-clone style operations can assemble a synthetic full from existing incrementals without rewriting the data, which shortens backup windows and keeps capacity growth flat. If you are planning to configure a NAS as a Veeam repository, check whether the repository type and file system combination supports block-clone operations, since the savings compound with every backup cycle.
Cloning Compared With Snapshots and Dedup
Administrators sometimes confuse three features that all share blocks. Snapshots freeze an entire dataset at a point in time and cannot share a single chosen file. Deduplication inspects every write, hashes it, and looks for an identical block anywhere in the pool, which costs memory and CPU on every operation. ZFS block cloning sits between them. It works per file, it only acts when an application explicitly requests a copy, and it adds no overhead to ordinary writes.
That last point is why cloning is often the better fit for workloads where duplication is predictable. You get dedup-like space savings for the copies you actually make, without paying a hashing tax on everything else.
Limits and Gotchas Worth Knowing
Cloning only works within a single pool, because a block pointer cannot reference data on another set of disks. Copies between pools, or to another server, still move every byte. There are also dataset-level constraints: the source and destination generally need compatible properties such as record size, and encryption adds its own restrictions on which datasets can share blocks.
Space accounting can surprise people. Because cloned blocks belong to more than one file, the usual per-file and per-dataset figures no longer add up neatly. Deleting the original may free nothing, since the clone still references the same blocks. Pool-level properties report how much space cloning is saving, and those are the numbers to watch when planning capacity for a network attached storage platform built on ZFS.
Early implementations also had bugs serious enough that cloning was disabled by default for a time, a reminder to run a current, well-tested OpenZFS build.
Designing Around Shared Blocks
Once cloning is in play, a few habits help. Keep workloads that clone heavily on the same pool as their source data. Monitor the block reference table's size, because it grows with the number of cloned blocks and lives in memory and on disk. When sizing for growth, remember that a cloned file still diverges over time as it is modified, so a VM template cloned a hundred times will slowly consume more space as each guest writes its own changes.
For large, multi-node environments, consider how data is distributed. Cloning helps only where the source and copy sit in the same pool, so architectures that spread data across many nodes, like scale-out NAS designs for big data workloads, need placement policies that keep related files together if cloning is part of the plan.
Testing Before You Trust It
A simple validation run will tell you a lot. Copy a large file with cp on the NAS itself and time it. Check the pool's cloning statistics before and after. Then repeat the copy from an SMB or NFS client and compare. If the client-side copy takes as long as a normal transfer, the protocol path is not reaching the clone code, and you will want to review share settings or software versions.
Also verify that your backup and replication tools treat cloned files correctly. A zfs send stream carries the data, so a replicated pool may not preserve the sharing unless the target also supports it; plan destination capacity accordingly.
Where This Leaves Your Storage Plan
ZFS block cloning turns duplicate-heavy workflows from an I/O burden into a metadata operation, and it does so without the constant overhead of deduplication. Run a current OpenZFS release, confirm that your clients and backup software actually trigger clones, and track space with pool-level metrics instead of per-file totals. Handled that way, instant copies become a dependable part of the design rather than a pleasant surprise.








