Page MenuHomeFreeBSD

zfs: fix RAIDZ2/3 not healing parity with 2+ bad disks
ClosedPublic

Authored by mm on Feb 15 2021, 8:02 AM.
Tags
None
Referenced Files
Unknown Object (File)
Tue, Dec 10, 6:20 PM
Unknown Object (File)
Nov 13 2024, 11:57 AM
Unknown Object (File)
Nov 13 2024, 12:50 AM
Unknown Object (File)
Nov 12 2024, 9:58 PM
Unknown Object (File)
Nov 8 2024, 7:49 PM
Unknown Object (File)
Oct 24 2024, 11:06 PM
Unknown Object (File)
Oct 24 2024, 11:06 PM
Unknown Object (File)
Oct 24 2024, 11:06 PM
Subscribers

Details

Summary

From openzfs 62d4287f279a0d184f8f332475f27af58b7aa87e commit message:

When scrubbing, (non-sequential) resilvering, or correcting a checksum
error using RAIDZ parity, ZFS should heal any incorrect RAIDZ parity by
overwriting it. For example, if P disks are silently corrupted (P being
the number of failures tolerated; e.g. RAIDZ2 has P=2), zpool scrub
should detect and heal all the bad state on these disks, including
parity. This way if there is a subsequent failure we are fully
protected.

With RAIDZ2 or RAIDZ3, a block can have silent damage to a parity
sector, and also damage (silent or known) to a data sector. In this
case the parity should be healed but it is not.

Cherry-picked from openzfs-master 62d4287f2

MFC after: 3 days

Commit contains simple fix with test.
This fix is data-consistency related and a candidate for 13.0-RELEASE

Diff Detail

Repository
rG FreeBSD src repository
Lint
Lint Not Applicable
Unit
Tests Not Applicable