Я хотел бы понять набор условий, при которых Linux считает диск действительно неисправным, исключает его из массива и считает массив RAID10 неисправным.
Насколько мне известно, ни отчеты самопроверки SMART, ни какие-либо значения SMART о перемещенных секторах, ни проблемы с четностью блоков (/ sys / block / md0 / md / mismatch_cnt> 0 или даже> 10.000) не считаются основанием для исключения диск из массива.
Что это за причины (кроме случаев, когда диск, конечно, физически не может обмениваться данными)?
В принципе, оба ошибка чтения и записи блока может перевести диск в автономный режим. Однако конкретное поведение зависит от используемого ядра.
Из ВОССТАНОВЛЕНИЕ раздел md страница руководства:
Если драйвер md обнаруживает ошибку записи на устройстве в массиве RAID1, RAID4, RAID5, RAID6 или RAID10, он немедленно отключает это устройство (помечая его как неисправное) и продолжает работу на остальных устройствах. Если есть запасные диски, драйвер начнет воссоздание на одном из запасных дисков данных, которые были на этом неисправном диске, либо путем копирования рабочего диска в конфигурации RAID1, либо путем выполнения расчетов с блоком четности в RAID4, RAID5 или RAID6, или путем поиска и копирования оригиналов для RAID10.
В ядрах до 2.6.15 ошибка чтения вызывала тот же эффект, что и ошибка записи. В более поздних ядрах ошибка чтения вместо этого заставит md попытаться восстановить, перезаписав плохой блок. то есть он найдет правильные данные из другого места, запишет их поверх блока, в котором произошел сбой, а затем попытается прочитать его снова. Если запись или повторное чтение завершились неудачно, md обработает ошибку так же, как и ошибку записи, и выйдет из строя все устройство.
Обязательно прочтите ПЛОХОЙ БЛОК-СПИСОК раздел также:
Начиная с Linux 3.5 каждое устройство в массиве md может хранить список известных плохих блоков. Этот список имеет размер 4K и обычно располагается в конце промежутка между суперблоком и данными.
Когда блок не может быть прочитан и не может быть восстановлен путем записи данных, восстановленных с других устройств, адрес блока сохраняется в списке плохих блоков. Аналогично, если попытка записать блок не удалась, адрес будет записан как сбойный блок. Если попытка записать сбойный блок не удалась, все устройство будет помечено как неисправное.
Попытка чтения из известного сбойного блока вызовет ошибку чтения. Попытка записи в заведомо сбойный блок будет проигнорирована, если устройство сообщило об ошибках записи. Если ошибок записи не было, данные будут записаны в известный сбойный блок, и если это удастся, адрес будет удален из списка.
Это позволяет массиву выходить из строя более изящно - несколько блоков на разных устройствах могут выйти из строя, не выводя из строя весь массив.