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. org/index.php/SysadminGuide# Data_usage_and_allocation
* ZFS is Redirect on Write (ROW): https://storagegaga. wordpress.com/tag/redirect-on- write/
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.
Thanks a lot for that explanation. I was wondering for quite some time now how it could be possible that even a huge number of snapshots does not affect ZFS performance. The only solution to this question I could up with was the one you described in your post – that it must be RoW instead of CoW. (As I understand it metadata of potentially each of the previous snapshots had to be updated upon a new write if CoW was used [in case you change a block of data which was in its original state from before the first snapshot])
i totally agree with you.
but how come the general public got brain-washed for ZFS is CoW?
how come no one from professional community jump out to correct it and let ZFS stole the name?
Some of us in the storage industry are very particular and we make sure to claim that it is ROW and not COW.