Вы можете инициировать очистку массива mdadm с помощью echo 'check' > /sys/block/mdX/md/sync_action
, и если будет найден плохой сектор, он будетпереписать его автоматически(из зеркала или из информации о четности для RAID5/6).
Однако есливсе блоки считаны успешно, но обнаружены несоответствия, то это рассматривается как несоответствие. В этом случае исправление затруднено, поскольку mdadm не может определить, какое зеркало содержит правильные данные (RAID1/10) или повреждены ли данные или четность (RAID5).
Теоретически, если я правильно понимаю RAID6, это не относится к RAID6. Поскольку существует двойная четность, должно быть возможно точно определить, где находится единичное повреждение, будь то данные или четность.
- Правильно ли я понимаю, возможно ли это в теории?
- Если это так, может ли mdadm восстановить эти несогласованные данные, не угадывая, какой блок поврежден?
решение1
Теоретически это возможно: данные+четность дают вам три мнения о том, какими должны быть данные; если два из них согласованы, вы можете предположить, что третье неверное, и переписать его на основе первых двух.
Linux RAID6 этого не делает. Вместо этого, в случае несоответствия, два значения четности считаются неверными и пересчитываются из значений данных. Были предложения перейти на систему "большинства голосов", но она не была реализована.
В mdadm
комплект входит:утилита raid6checkкоторый пытается выяснить, какой диск неисправен в случае несоответствия четности, но у него есть некоторые шероховатости, он не устанавливается по умолчанию и не исправляет найденные ошибки.
решение2
Утилита raid6check
включает mdadm
в себя repair
режим, начиная с версии 3.3 (выпущенной 03.09.2013) (точнее, с этого коммита:https://git.kernel.org/pub/scm/utils/mdadm/mdadm.git/commit/?id=8a63c73123b9d022107c82bd684e17bf87bc081e)