Even though ZFS deals with blocks, this can still illustrate the issue with bad RAM.[1]
Is this JPEG file corrupted? According to ZFS it’s not. ![]()
The file went through a corrupt portion of memory before being saved. A checksum was calculated and the data was faithfully written to disk. The checksum was calculated in a healthy portion of memory. Its checksum is 08D6E294, which is stored on disk.
Let’s say you later discover your RAM is bad. You fix a setting in the BIOS or replace the sticks. Now your RAM passes memtests. You run a scrub. When it gets to this file, it calculates the checksum to be 08D6E294. According to ZFS, the checksum matches the expected value! No corruption! ![]()
The truth is that you have silent corruption that ZFS is unaware of.
Is this JPEG file corrupted? According to ZFS it is! ![]()
The file went through a healthy portion of memory before being saved. A checksum was calculated and the data was faithfully written to disk. The checksum was calculated in a corrupt portion of memory. Its checksum should be A4D49451, but it is instead calculated as 6AF8F197, which is what gets stored on disk.
Let’s say you later discover your RAM is bad. You fix a setting in the BIOS or replace the sticks. Now your RAM passes memtests. You run a scrub. When it gets to this file, it calculates the checksum to be A4D49451. According to ZFS, the checksum doesn’t match the expected value of 6AF8F197! Corruption! ![]()
The truth is that your file is perfectly fine, but ZFS thinks it is corrupted.
Bad RAM isn’t uniquely problematic for ZFS, but ZFS cannot offer additional protection if silent corruption is originally due to bad RAM. ↩︎

