Looking at these articles we see that ZFS and BTRFS are both ROW (Redirect on write) and not COW (copy on write).
* Difference between ROW and COW:
* BTRFS is Redirect on Write (ROW) : https://btrfs.wiki.kernel.
* ZFS is Redirect on Write (ROW): https://storagegaga.
ROW – redirect on write: suffers from fragmentation down the road; as all overwrites have to be written in new places
COW – copy on write: doesn’t suffer from fragmentation as much as ROW as overwrites go to their original blocks, the original data is copied to another location for safe keeping (hence Copy-on-write), but suffers from performance on snapshot writes.
Is it incorrect that we call ZFS & BTRFS COW? I have incorrectly called ZFS and BTRFS in my other articles as COW. That’s what I was taught. But after reading the above articles I noticed I was incorrect. I’m guessing COW has become the incorrectly coined term, kind of like MiB and MB. Consequently now COW can stand for both ROW and COW. So when one says this filesystem is COW, they could mean that it’s ROW or they could mean that its COW. You should probably get more answers by looking into the source code or asking more questions
Another example of a ROW filesystem: WAFL on NetApp
So what’s an example of a COW system? Snapshots with LVM are COW. When creating snapshots with LVM you have to assign the size of the snapshot. Snapshots are assigned a specific amount of space from the filesystem, where the original data blocks can be written. So when you go over X bytes worth of changes the snapshot becomes invalidated and unusable. X is the size of the snapshot you allocated.