I recently heard an argument from a colleague that "ZFS mis-uses
the term COW" (Copy-On-Write). According to him, the original term
was introduced by some vendors and was to be taken literally: that
is, whenever a new write comes to update an existing logical block
in the storage, the block's old contents are first copied away to
another physical location (i.e. to be used for snapshotting or for
recovery of untimely poweroff/panic), then the original on-disk
location is rewritten with the new data.
Arguably, while this incurs a hit when rewriting existing data,
this combats fragmentation and speeds up reads (i.e. all pieces of
the file's "live" version are stored as contiguously as possible).
This may be important for large objects randomly updated "inside",
like VM disk images and iSCSI backing stores, precreated database
table files, maybe swapfiles, etc.
I understand why ZFS does what it does, and how, but it may be
possible that such subtle differences in terminology may cause
misunderstanding between people of the same trade. At least, I'd
keep this possibility in mind when talking to non-Solaris storage
I wonder if this use of the term is indeed more valid (making a
copy of old data upon a new write), and if any vendors actually
did that procedure outlined above?
zfs-discuss mailing list