Когда на диске возникает ошибка, правильно ли предположить, что она всегда будет обнаруживаться и сообщаться в ОС (если программный RAID, например, mdadm) или RAID-контроллер (если аппаратный RAID), как неудачное чтение (т.е. молча вернуть поврежденные данные), а затем программное обеспечение / контроллер RAID примет этот факт и вместо этого будет использовать другой диск (диски) в RAID для чтения данных (при условии, что это тип RAID с избыточностью)?
Насколько я понимаю, современные накопители корпоративного уровня имеют схемы обнаружения ошибок, поэтому я предполагаю, что это так, но у меня возникли проблемы с обнаружением чего-либо убедительного в Интернете. Я полагаю, что этот ответ в некоторой степени зависит от качества встроенного в накопитель обнаружения ошибок, поэтому, если это имеет значение, меня больше всего интересует это в отношении твердотельных накопителей Intel DC серии S3500.
РЕДАКТИРОВАТЬ 5 июня 2015 г. - пояснение:
В частности, мне интересно, надежны ли алгоритмы, используемые сегодня для обнаружения ошибок. В простом примере, если обнаружение ошибки просто выполняло XOR для всех битов в секторе, то, если два бита были перевернуты, ошибка не была бы обнаружена. Я полагаю, что они намного более продвинуты, чем это, но мне интересно, каковы шансы того, что ошибка останется незамеченной, и настолько ли она низка, что нам даже не нужно об этом беспокоиться, и есть ли какой-нибудь авторитетный источник или заслуживающая доверия статья об этом где-нибудь, которая могла бы цитироваться.
РЕДАКТИРОВАТЬ 10 июня 2015 г.
Обновлены заголовок вопроса и тело вопроса, чтобы сделать его более общим для идеи дисковых ошибок (а не вокруг mdadm, как это было изначально).
На жестких дисках есть множество методов исправления ошибок для предотвращения повреждение данных. Жесткие диски разделены на сектора, некоторые из которых могут стать полностью недоступными для записи / чтения или возвращать неверные данные из-за повреждения данных - назовем первый коррупция в плохом секторе и последний тихое повреждение данных.
Коррупция в плохом секторе
Первое повреждение уже обработано самим диском множеством способов. На заводе каждый выпускаемый диск тестируется на наличие битых секторов, которые вставляются в Список первичных дефектов (p-список). При нормальном использовании диска внутренние системы могут обнаруживать больше поврежденных секторов из-за нормального износа - они помещаются в Список выросших дефектов (g-список). У некоторых дисков есть еще больше списков, но эти два самые распространенные.
Сам диск противодействует этим ошибкам, переназначая доступ к секторам жесткого диска на запасные сектора без уведомления операционной системы. Однако каждый раз, когда происходит переназначение, соответствующие значения в системе SMART жестких дисков увеличиваются, что указывает на возрастающий износ жесткого диска. Индикатор, который следует искать, - это SMART 5 - Счетчик перераспределенных секторов, в то время как другие важные индикаторы - 187 (Сообщенные неисправимые ошибки), 197 (Текущее число ожидающих обработки секторов) и 198 (Неисправимые в автономном режиме).
Для поиска сбойных секторов жесткие диски используют внутренние коды исправления ошибок (ECC), который можно использовать для определения целостности данных в конкретном секторе. Таким образом, он может проверять наличие ошибок записи и чтения в секторе и при необходимости обновлять g-список.
Источники
Тихое повреждение данных
Поскольку у нас довольно много внутренней проверки целостности данных, скрытое повреждение данных должен быть очень необычным - в конце концов, поскольку жесткие диски выполняют задачу надежного сохранения данных, они должны выполнять эту единственную работу правильно.
Чтобы уменьшить количество скрытых повреждений данных за пределами запрошенного пользователем чтения или записи минимальным, системы RAID периодически проверяют ECC полных дисков для обновления g-list (очистка данных). В случае ошибки данные восстанавливаются из другого элемента RAID после проверки секторов ECC.
Однако все исправления и проверки целостности данных нужно где-то делать - в прошивке. Ошибки в этих низкоуровневых программах могут по-прежнему приводить к проблемам, так же как и механические проблемы и ложные срабатывания сумм ECC. Примером может быть неконтролируемая запись, при которой микропрограмма ошибочно сообщает об успешной записи, в то время как фактическая запись на жесткий диск не произошла или была ошибочной ( несоответствие личности).
Существуют некоторые исследования статистической частоты этих сбоев, когда проверка целостности данных файловой системы сообщала об ошибке, а базовый диск не сообщал о проблеме, таким образом показывая скрытое повреждение данных.
TL; DR: менее 0,3% на потребительских дисках и менее 0,02% на корпоративных дисках в среднем содержали такие несоответствия идентификационных данных в течение 17 месяцев при проверке 1,5 миллиона дисков (всего 365 дисков имели несоответствия идентификационных данных) - см. Таблицу 10 и Раздел 5 в эта публикация.
Источники
Что ж, все немного сложнее.
Современные жесткие диски не просто обнаруживают ошибки, у них есть несколько запасных секторов и интеллектуальные контроллеры, которые пытаются переместить поврежденные сектора. То есть, когда вы пытаетесь прочитать какой-то логический сектор, и он не читается с первого раза, контроллер пытается прочитать его несколько раз, и иногда он может прочитать его после нескольких попыток; затем он записывает данные обратно в резервный сектор, переназначает логический сектор на новый и отмечает старый сектор как плохой и, наконец, предоставляет вам ваши данные. Все эти процессы полностью прозрачны для читателя, вы не заметите никаких ошибок. Однако обычно это отражается в статистике S.M.A.R.T, и если это происходит все чаще и чаще, вы можете увидеть, что диск выйдет из строя, прежде чем он действительно выйдет из строя. Вот почему так важно использовать инструменты мониторинга SMART в вашей системе.
Когда сектор вообще не читается или в контроллере заканчиваются свободные сектора, накопитель вернет ошибку чтения. Обнаружение ошибок теперь довольно надежно, оно использует своего рода CRC для данных сектора. Когда возвращается ошибка чтения, mdadm увидит ее, пометит диск как непригодный для использования и переключит массив в режим пониженной производительности.
Да, mdadm обнаружит такие ошибки, пометит отказавший диск как неисправный и удалит его из рабочего массива, который продолжит работу в ухудшенном режиме, если избыточность доступна.
Но AFAIK mdadm делает это на «программном» уровне, основываясь на ошибках, которые он получает от диска в ответ на его общие запросы ввода-вывода (который работает с любым диском), а не путем запроса возможностей обнаружения ошибок конкретного диска.