Re: Subject: RFC: Read repair for md RAID1 after mirror read failures
Abd-Alrhman Masalkhi <[email protected]>
| Newsgroups | org.kernel.vger.linux-raid |
|---|---|
| Message-ID | <[email protected]> |
Hi Kuai, On Wed, Jul 15, 2026 at 15:27 +0800, Yu Kuai wrote: > Hi, > > 在 2026/7/15 15:10, G.W. Kant - Hunenet B.V. 写道: >> On 7/15/26 7:27 AM, Abd-Alrhman Masalkhi wrote: >>>> In other words, the first successfully recovered read request could >>>> automatically become a repair opportunity. The repair could even be >>>> scheduled asynchronously, so the successful read is returned immediately >>>> while the rewrite is performed in the background. Unlike a periodic >>>> resync, this repair would be driven by an actual read failure, making it >>>> targeted rather than rewriting the entire mirror. >>>> >>> Yes, md has had this for a long time. Look at fix_read_error() in >>> raid1.c. It is called from handle_read_error() on any failed read. It >>> reads from a healthy mirror and rewrites the bad region on the failing >>> device, giving the drive a chance to rewrite or remap the sector. If the >>> rewrite fails, it records a bad block. md does this synchronously under >>> a frozen array, so it is not a missing feature. >>> >>> The likely reason you didn't see it is that your array was already >>> degraded, so there was no healthy in-array copy for fix_read_error() to >>> recover from. In your case, you were likely able to retrieve the data >>> due to btrfs level redundancy, and md can't repair across arrays. >>> >>>> With today's 18–24 TB HDDs and backup/archive workloads, where data may >>>> remain unchanged for years, latent media degradation seems increasingly >>>> relevant. A successful read from the alternate mirror may be one of the >>>> last opportunities to refresh such a sector before it becomes >>>> permanently unreadable. >>>> >>> And Check/Repair is the right defense for cold archival data on large >>> drives. >> Thank you. fix_read_error() was exactly the piece I was looking for. I >> had missed that md already performs read repair when another healthy >> mirror is available. >> >> My situation was indeed different because the array had already lost one >> member, so the successful read originated from Btrfs redundancy across >> another md RAID1 rather than from the surviving md mirror. >> >> One question remains, though. check/repair periodically reads all >> sectors, but as far as I understand it, successfully read sectors are >> not rewritten. From a media aging perspective this is a different >> problem than recovering from a read error. Have there ever been >> discussions about a true media refresh pass that rewrites successfully >> read sectors to refresh long-lived magnetic recordings? > > Perhaps this is what you looking for: > > [RFC v2 0/5] md/raid1: introduce a new sync action to repair badblocks - > Zheng Qixing > <https://lore.kernel.org/all/[email protected]/> > > However, AFAIK, Qixing no longer work in this area and there will not be > new version. > It seems interesting. Do you think it's worth carrying it forward? >> >> Best regards, >> Dion Kant > > -- > Thanks, > Kuai -- Best Regards, Abd-Alrhman