Я хочу создать NAS, используя mdadm для RAID и btrfs для обнаружения битров. У меня довольно простая настройка, объединяющая 3 диска по 1 ТБ с mdadm в RAID5, чем btrfs.
Я знаю, что mdadm не может восстановить bitrot. Он может только сказать мне, когда есть несоответствия, но не знает, какие данные верны, а какие нет. Когда я говорю mdadm восстановить мой md0 после того, как я симулирую bitrot, он всегда восстанавливает четность. Btrfs использует контрольные суммы, поэтому он знает, какие данные являются ошибочными, но он не может восстановить данные, так как он не может видеть четность.
Однако я могу запустить скраб btrfs и прочитать системный журнал, чтобы получить смещение данных, не соответствующих его контрольной сумме. Затем я могу перевести это смещение на диск и смещение на этом диске, потому что я знаю, что начальное смещение данных равно md0 (2048 * 512), размеру куска (512K) и макету (симметрично слева). Расположение означает, что в моем первом слое четность находится на третьем диске, во втором слое на втором диске и в третьем слое на первом диске.
Объединяя все эти данные и еще несколько btrfs на основе знаний о формате диска, я могу точно рассчитать, какой кусок какого диска является неисправным. Однако я не могу найти способ заставить mdadm исправить этот конкретный кусок.
Я уже написал сценарий, который меняет четность и дефектный чанк с помощью команды dd, затем запускает восстановление с помощью mdadm и затем меняет их обратно, но это не очень хорошее решение, и я бы очень хотел, чтобы mdadm пометил этот сектор как плохой и не используйте это снова. Так как это начало гнить, шансы высоки, он сделает это снова.
Мой вопрос: есть ли способ сказать mdadm, чтобы он восстановил один чанк (который не является четным) и, возможно, даже пометил сектор диска как плохой? Может быть, создание ошибки чтения IO?
(И я знаю, что ZFS может делать все это самостоятельно, но я не хочу использовать память ECC)
Изменить: этот вопрос / ответ о том, как btrfs RAID6 нестабилен и как ZFS намного более стабильна / полезна. Это не относится к моему вопросу о том, как восстановить один известный дефектный кусок с помощью mdadm.