Ремонт отказов RAID6?

Вы можете инициировать скраб массива mdadm с помощью echo 'check' > /sys/block/mdX/md/sync_action , и если обнаружен плохой сектор, он автоматически перепишет его (из зеркала или из информации о четности для RAID5 / 6).

Однако, если все блоки читаются успешно, но обнаруживают, что они не соответствуют друг другу, это считается несоответствием . В этом случае ремонт осложняется тем, что mdadm не может определить, какое зеркало содержит правильные данные (RAID1 / 10), или это поврежденные данные или четность (RAID5).

Теоретически это не так с RAID6, если я правильно понимаю RAID6. Поскольку существует двойная четность, должно быть возможно определить, где одно повреждение, будь то данные или четность.

  1. Является ли мое понимание правильным, если это возможно в теории?
  2. Если правильно, может ли mdadm восстановить эти несогласованные данные, не догадываясь, какой блок поврежден?

Теоретически возможно: данные + четность дают вам три мнения о том, какими должны быть данные; если два из них согласованы, вы можете предположить, что третий является неправильным и переписать его на основе первых двух.

Linux RAID6 этого не делает. Вместо этого, в любое время, когда существует несоответствие, два значения четности считаются неверными и пересчитываются из значений данных. Были предложения по изменению системы «большинства голосов», но она не была реализована.

В пакет mdadm входит утилита raid6check, которая пытается определить, какой диск является плохим в случае несоответствия четности, но имеет некоторые грубые грани, по умолчанию не установлен и не исправляет обнаруженные ошибки.