Раньше я писал дисковые прошивки для WD и однажды написал прошивку, в которой переназначались плохие блоки.
Во-первых, большинство плохих блоков обнаруживаются при чтении, а не при записи. Запись выполняется вслепую, то есть данные записываются без проверки. Таким образом, при записи, если носитель плохой, вы не узнаете об этом, пока хост не выполнит чтение в этот сектор. Существует небольшая часть сектора (заголовок сектора), которая читается при записи для определения местоположения правильного сектора, поэтому в случае ошибки при чтении заголовка сектора накопитель переназначит сектор и запишет его с полученными данными. из команды записи. Но подавляющее большинство плохих блоков обнаруживается при чтении, и только то, что запись успешно выполняется в секторе, не означает, что носитель хорош или что сектор был переназначен.
Теперь о плохом переназначении блоков (также называемом перераспределением). Да, обычно накопитель пытается переназначить сектор, если ошибка достаточно серьезна (т. Е. Сбой ECC достаточно серьезен), но накопитель все еще может восстановить данные после исправления ECC. Обычно это делается автоматически. Единственное исключение состоит в том, что хост мог ранее сказать приводу не выполнять автоматическое перераспределение, но это редко делается.
Так что же происходит, если диск выполняет чтение и не может восстановить данные? Ничего такого. Ошибка сообщается хосту, но переназначение не выполняется. Проблема в том, что накопитель может переназначить сектор, но он не имеет ни малейшего представления, какие данные записать в недавно переназначенный сектор. Скажем, если бы он просто записал группу нулей, а затем сектор снова был прочитан, он бы возвратил все нули без каких-либо указаний на то, что данные неверны. По сути, это то же самое, что и повреждение данных. Диск не может рассчитывать на хост, отслеживающий ошибки по ряду причин (например, что, если диск был перенесен на новый хост?), Поэтому лучший способ - ничего не делать, когда данные могут ' быть восстановленным.
Современные диски, тем не менее, сохранят местоположение поврежденного сектора, когда его нельзя перераспределить. Количество плохих секторов, ожидающих перераспределения, можно найти в данных SMART. Что происходит, если запись выполняется в один из поврежденных секторов, ожидающих перераспределения, перераспределение выполняется, потому что на диске теперь есть действительные данные для записи в него после перераспределения. Таким образом, когда люди говорят, что запись в плохой сектор перераспределит их, это только половина истории. Диск должен быть прочитан первым, чтобы он мог обнаружить все поврежденные сектора, которые не могут быть автоматически перераспределены. Таким образом, вы можете записать весь диск, и данные SMART скажут, что нет плохих секторов, ожидающих перераспределения, но вы не обязательно очистили диск от всех плохих секторов. Так что если вы действительно хотите очистить диск от всех плохих секторов,
Есть и другие способы борьбы с плохими блоками, которые нельзя перераспределить. Если диск является частью конфигурации RAID с резервированием (т. Е. Что-либо, кроме RAID 0), программное обеспечение RAID должно автоматически восстановить данные для поврежденного сектора с других дисков и записать их в перераспределенный сектор. Диски SCSI имеют явную команду переназначения блоков, которую хост может использовать для принудительного переназначения, даже если для записи в блок нет действительных данных, но его использование довольно низкоуровневое.