8

tl; dr в случае появления URE на жестком диске, я потеряю 1 бит, 1 байт или размер сектора (512 байт или 4096 байт AF)? а если возможно объясните почему так?

Справочная информация: здесь возникает вопрос, когда жесткий диск имеет проблемы с чтением данных. Конечно, диск может полностью потерпеть неудачу, оставив все свои данные потерянными (DISK FAIL), но случай, о котором я здесь спрашиваю, заключается в том, что, когда теряется только меньшая его часть (URE, неисправимая ошибка чтения).

Несмотря на то, что я искал информацию относительно URE, я мало что узнал наверняка. Это может быть связано с тем, что то, что происходит внутри накопителя, то есть то, что скрыто от прямого взаимодействия с пользователем, такого как ECC-коррекция, для меня трудно связать с тем, что я получаю как пользователь - с секторами.

Давайте представим, что жесткий диск имеет проблемы с чтением данных.

В этой ситуации, безусловно, это должно означать, что:

  • (a) некоторые биты сектора не могут быть прочитаны, или
  • (b) все биты могут быть прочитаны, но они не проходят проверку контрольной суммы (конечно, ожидающая проблема сектор 4096 байт - это не просто 8 * 4096 бит, но некоторые дополнительные биты / байт для проверки / исправления ошибок (т.е. биты четности) ) (с) ????

Я не верю в то, что когда мы находимся в ситуации, в которой произошла комбинация (a) и (b) и надежное восстановление байтов сектора 4096 не может быть выполнено, то чрезмерно полагать, что все они обязательно являются garpage на самом деле, если бы мы знали о внутренней логике исправления ошибок жесткого диска, мы могли бы вместо этого сказать: «посмотрите, что-то не получается, и с хорошим изменением по крайней мере 1,2,3, n бит / байт данных блока является" неправильным " ». Если бы мы избыточно сохраняли байтовые строки ASCII «привет, привет ....., привет» в этом секторе, у нас на самом деле могла бы быть справедливая последовательность «привет, привет ....», прежде чем будет «...Уэллохелло ... "(т. Е." Е "->" U ").

Так какова гранулярность URE?

ОБНОВЛЕНИЕ: был комментарий, вводящий идею плохого сектора (и предполагающий, что это отражает гранулярность события URE. Это не абсурдно, предлагать это и, возможно, можно использовать при ответе на вопрос. Тем не менее, я только что прочитал еще один связанный вопрос, спрашивающий об ожидающих нечитаемых секторах (здесь https://unix.stackexchange.com/questions/1869/how-do-i-make-my-disk-unmap-pending-unreadable-sectors), который приводит Я думаю, что в некоторых сценариях действительно существует более размытая линия между данными, потерянными в случае URE.

4 ответа4

8

Код исправления ошибок на жестком диске - это дополнительный фрагмент данных, связанный с каждым сектором оборудования. Во время записи прошивка привода рассчитывает эти данные и записывает их вместе с данными пользователя. Во время чтения прошивки считывает ECC вместе с данными и проверяет их вместе.

Для традиционного жесткого диска аппаратный сектор составляет 512 байт. Для диска расширенного формата это 4 КБ (не имеет значения, представляет ли диск 512-байтовые или 4 КБ сектора на интерфейсе, то есть 512e против 4kn).

Результат проверки после чтения имеет три основных результата:

  • сектор был прочитан без ошибок. Это на самом деле не совсем распространено на современных жестких дисках; битовые плотности таковы, что они зависят от работы ECC.

  • сектор был прочитан с исправляемыми ошибками. Как подразумевается выше, это не редкость; это ожидаемо. Привод возвращает данные с исправлением ошибок пользователю.

  • сектор был прочитан, но было слишком много "неправильных битов"; ошибки не могут быть исправлены.

В последнем случае накопитель обычно не возвращает никакого содержимого; он просто возвращает статус, указывающий на ошибку. Это потому, что невозможно узнать, какие биты являются подозрительными, не говоря уже о том, какими должны быть их значения. Поэтому весь сектор (биты ECC и все) является ненадежным. Невозможно определить, какая часть плохого сектора является плохой, не говоря уже о том, каким должно быть его содержание. ECC - это "гештальт", который рассчитывается по всему контенту сектора, и если он не совпадает, то не совпадает весь сектор.

SpinRite работает, просто пытаясь прочитать неисправный сектор снова и снова, используя функцию "технического обслуживания", которая возвращает данные (но без битов ECC), даже если накопитель сообщает "неисправимая ошибка". Как сказано в описании, связанном с DavidPostill, он может преуспеть с безошибочным (на самом деле "корректируемым", скорее всего) чтением; или он может быть в состоянии вывести, по существу, путем усреднения возвращаемых битов вместе, разумное предположение о содержании сектора. У него больше нет возможности точно исправлять ошибки с помощью ECC, чем у привода; это математически невозможно.

3

Какова гранулярность URE?

Неустранимые ошибки чтения (URE) - это ошибки чтения сектора. Если сектор не может быть прочитан без ошибок, не имеет значения, был ли это всего 1 байт или все байты сектора.

Зернистость - это размер сектора.

Даже если произошел сбой только 1 байта, вы обычно не получите никаких данных из этого сектора без использования специализированного программного обеспечения.


Можно ли восстановить данные из неисправного сектора?

SpinRite говорит:

SpinRite даже способен восстанавливать большую часть данных в секторе, который никогда не может быть идеально прочитан, и который любая другая утилита полностью удаляет.

Посмотрите, как SpinRite восстанавливает нечитаемые данные.


Отказ от ответственности.

Я никоим образом не связан со SpinRite и никогда им не пользовался.

2

Нет такой вещи, как «не могу прочитать немного», если только у вас нет действительно серьезной аппаратной ошибки, например, невозможность поиска правильной дорожки на головке или повреждение дорожки сервопривода и невозможность найти правильный сектор , Очевидно, что в любом случае у вас будет, по крайней мере, целый нечитаемый сектор.

В противном случае вы всегда получаете биты назад, они просто могут быть неверными . Вот где приходит код, исправляющий ошибки; он добавляет некоторое количество дополнительных битов ECC к каждому сектору, так что любая правильная комбинация битов данных и битов ECC соблюдает некоторое алгебраическое правило. Если все биты были прочитаны правильно, код будет проверен и данные могут быть переданы обратно напрямую. Если небольшое количество битов было прочитано неправильно, код ECC можно использовать, чтобы точно определить, какие из них и исправить их, поэтому все данные возвращаются правильно. Если большее число битов читался неправильно, код ECC может обнаружить , что произошла ошибка, но это уже не имеет достаточно информации , чтобы выяснить , какие биты являются ошибочными; это неисправимая ошибка чтения. Если неправильно прочитано очень большое количество битов, то код может корректно проверяться "случайно", и накопитель будет возвращать поврежденные данные, но с достаточным количеством битов ECC вероятность этого может быть настолько мала, насколько вы захотите.

Итак, чтобы ответить на вопрос, который, я думаю, вы имели в виду - если произошла частичная ошибка чтения, но было достаточно информации, чтобы выяснить, где произошла ошибка, то ее также можно исправить, и компьютер вообще не увидит никакой ошибки. , Это на самом деле происходит постоянно. Неисправленная ошибка возникает, когда невозможно определить, какие биты данных являются действительными, а какие - нет, а поскольку код с исправлением ошибок вычисляется по сектору, это происходит с гранулярностью сектора.

1

Посмотрев на это и вдохновившись ответом https://superuser.com/a/969917/160771 от https://superuser.com/users/337631/davidpostill

Я хотел бы ответить представить несколько расширенный альтернативный ответ. Во-первых, верно, что жесткий диск и его прошивка являются источником события URE, то есть события, когда данные не могут быть прочитаны. Кроме того, верно, что данные записываются на диск в секторах по 512 или 4096 байт используемых данных и около 50 или соответствующих 100 байт дополнительных данных, которые должны позволять проверку и исправление ошибок.

Поэтому говорить о URE естественно в контексте сектора жесткого диска. Термин « плохой сектор» , безусловно, несколько связан, но не идентичен ситуации, когда у нас есть сектор URE.

Сектор с некоторыми проблемами, которые нужно читать без ошибок, не обязательно является полностью бессмысленным. Возможно, что все 4096 данных были повреждены, но также может быть и то, что только 1 бит больше, чем было исправимо надежно (через избыточные данные ECC, добавленные в каждый сектор), было повреждено.

В случае, когда повреждены только некоторые очень немногие байты, которые больше, чем hdd мог исправить, есть изменения, что у части из 4096 байтов все еще есть значимые данные.

Примером может быть то, что 4096 представляет ASCII-символы из 2 предложений. Тогда возможно, что одно или более предложений полностью не повреждены. Также возможно, что каждая 2-я или 3-я буква была удалена. Если данные 4096 потеряны в событии URE, следовательно, до интерпретации и зависит от данных. Можно предположить, что у самих данных есть еще один слой оболочки ECC, который позволит дальнейшее восстановление.

Поэтому хорошо, что большинство прошивок действительно обрабатывают секторы URE иначе, чем плохие сектора:

Как правило, автоматическое переназначение секторов происходит только при записи в сектор. Логика этого предположительно заключается в том, что даже если сектор не может быть прочитан нормально, он все равно может быть читаем с помощью методов восстановления данных. (из https://en.wikipedia.org/wiki/Bad_sector)

Или, если уж на то пошло, может быть, что часть сектора все еще содержит полезные данные.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .