The parent vouchesZFSend-to-end checksums in the parent block
ZFS stores each block's checksum in the pointer from its parent block rather than next to the data, so a damaged block cannot vouch for itself. On read it verifies the checksum and, if the pool has redundancy, repairs the bad copy from a good one (self-healing).
Every 512 bytesApache HDFSCRC32C per 512 bytes + block scanner
HDFS computes a checksum for every 512 bytes of data by default (CRC32C), stores them beside each block, and verifies them on read. DataNodes also run a block scanner that re-verifies stored blocks periodically (every three weeks by default) and reports corrupt replicas so the NameNode can re-replicate.
Content-addressed historyGitobjects named by their hash
Git names every object (file contents, directory trees, commits) by a hash of its content, and each commit contains the hash of its parent. Changing any old byte changes every hash after it, so history is tamper-evident. Git has been moving from SHA-1 to SHA-256 after practical SHA-1 collisions were demonstrated.
Find the differing rangesApache CassandraMerkle trees in repair
Cassandra's repair process builds a Merkle tree of each replica's data for a token range, compares trees between replicas, and streams only the ranges whose hashes differ. It is how replicas that drifted apart after failures are brought back into agreement.