I am using VROC for CPU RAID with some NVMe drives. I have a RAID 1 array that seems to be having problems. Instead of boring you with the details, I have a more general question.
How does VROC (or RAID 1 controller in general) handle a situation in which the drives have inconsistent bits? There is no way it can know which is correct, because there is no parity bit.
How do most RAID controller handle this?
RAID controllers never read from both mirrored drives to compare the data. So the answers is - you’ll get inconsistent read you must detect and handle at the file system level. Modern file systems like ZFS, BtrFS and even dead-born ReFS have options to hash both meta and actual data.
Classical RAID1 implementations do not check both mirrors for comparison purpose, neither during normal activity nor scrub. For example, Linux MDRAID almost always read from the first mirror leg, while some hardware controllers use a round-robin approach.
This means that a classical RAID1 can return inconsistent data even if a good version exists on one of the mirror leg. After all, not using data checksum, how can a RAID1 array distinguish the bad copy from the good one?
BTRFS and ZFS mirrors are an entirely different matter: by using data checksum, they can immediately identify (and correct) the bad/corrupted data.