Большинство современных дисков разных производителей имеют общую одинаково проявляющуюся неисправность: по звукам диск запускается как обычно, но при этом либо очень медленно читает данные, либо долгое время висит в состоянии BSY, а после 2-3 минут иногда выдает ошибку, а иногда висит до бесконечности. В качестве примера взят диск модели WD20EARS. Для доступа к данным пользователя используется комплекс ACE Lab PC-3000. В конце заметки видеоролик с демонстрацией всех описанных действий.
Рассмотрим пример зависающего диска. Сначала подаем на него питание. Слышно, что диск калибруется нормально, не стучит, никаких посторонних звуков не выдает, но при этом в готовность не выходит. То есть в регистре состояния индикатор BSY горит постоянно.
При этом, через какое-то время, можно услышать, что диск еще раз перезагрузился. Такая ситуация с не запуском жесткого диска происходит от того, что микропрограмма уходит в бесконечный цикл, то есть не завершает какую-то из важных процедур инициализации. При этом, с аппаратной точки зрения (головки, поверхности), все работает.
Чтобы решить этот случай, нужно войти в утилиту Western Digital в, так называемом, режиме kernel.
Примерно через минуты две, жесткий диск вышел в состояние ошибки. Он погасил индикатор BSY (бизи) и зажег индикатор ERR (ошибка). При этом, тип ошибки выдал ABR.
То есть диск не запустился. Попробуем запустить утилиту.
Утилита у нас сразу показывает режим kernel.
Нажимаем автоопределение, диск автоматически определяется(Sadle G6).
И можно нажать «Запуск утилиты».
Интересно, тут «Debug Stop Code» RESET TIMEOUT. Получается, что диск остановился по истечении таймаута на запуск. Он должен был запуститься за какое-то время и диск не запустился.
Для того, чтобы решить данный случай нам нужно вызвать следующую опцию: «Тесты → Работа с ПЗУ → Блокировать доступ к модулю 02».
После этого будет произведена правка ПЗУ.
Диск в состоянии с блокированным доступом к модулю 02 не запустит большую часть своей микропрограммы. Но, так называемый, оверлей (overlay) будет запущен и это позволит зайти в режим утилиты «Normal».
Давайте посмотрим что будет. Сначала отключаем питание.
Потом включаем. Диск раскручивается, слышна калибровка и он выходит в готовность.
Давайте прочитаем его идентификацию.
Правый щелчок → «Читать паспорт».
Видно, что он определился не своим родным серийным номером, а, если говорить жаргонным названием, хузом (XYZ).
Из-за того, что мы блокировали доступ 02, то серийный номер из модуля 02 не читается. При этом оверлей запускается. Теперь можно зайти в утилиту, но уже в режиме «Normal».
То есть не «Kernel» подсвечивается, а «Normal». И выполняем запуск утилиты.
В режиме «Kernel» доступ к служебной зоне нельзя реализовать, а в режиме с блокировкой модуля 02 нам уже доступна служебная зона.
Для начала нужно создать ее резервную копию «Тесты → Служебная информация → Резервирование ресурсов HDD → Ok → Ok». Я обычно треки не сохраняю и снимаю галочку «Треки SA».
Жмем последний раз «OK» и пошло копирование. Тут есть одна интересная ошибочка. Вместо модуля 0D у нас модуль 02.
Это и есть механизм блокировки, когда мы модуль 0D заменяем на модуль 02. Поэтому модуль 02 у нас не копируется с поверхности и в этом бэкапе будет отсутствовать. Но сейчас мы это решим немножко другим способом.
После того, как процесс резервного копирования завершен, нам нужно прочитать оригинальный модуль 02 на всякий случай. Для этого мы идем в «Инструменты → Каталог модулей».
В открывшемся списке видно, что у нас есть модуль 02.
Нам нужно его прочитать. Он читается, потому, что чтение идет в режиме ABA.
Можно менять переключатель и читать по ABA или по ID.
Если сейчас по ID поставить, то этот же самый модуль не читается, пишет «Invalid file ID». Программа пытается читать модуль 02, а реально там лежит модуль 0D.
Переключаемся снова в режим ABA и сохраняем модуль.
Среди данных виден серийный номер нашего диска.
Далее, переключаемся обратно в протокол.
В утилите есть опция под названием «Решение проблемы ‘slow responding’».
Это как раз относится к теме нашего видео — о зависающих дисках. Нажимаем на эту опцию. В данном случае программа будет писать модуль 02, а если указать режим ID, то запись будет вестись куда-то не туда, потому, что мы сделали блокировку. Поэтому мы указываем «Запись по АВА».
Чтобы обе копии исправить ставим две галочки. Жмем ОK.
Когда процесс завершится, мы увидим, что программа пытается сначала прочитать по ID, потом идет на чтение по ABA, затем идет правка.
Давайте попробуем сделать обратно, а именно — разрешить доступ к модулю 02.
Идем в «Тесты → Служебная информация → Работа с ПЗУ → Разрешить доступ к модулю 02». Теперь нужно на всякий случай посмотреть все ли разрешилось.
Нажимаем «Инструменты → Просмотр и редактирование ресурсов HDD». В открывшемся диалоге выбираем ROM и в модуле 20B у нас вся информация.
Это можно проверить переключившись в протокол.
Там есть строчка «Чтение Flash ROM dir (Ext)…..:Ok (Active)». Это означает, что у нас правильный модуль 20В. Если бы «Active» было строчкой выше, то значит, модуль 0В был бы правильный.
Далее нам нужно в модуле 20В посмотреть опцию «WD Marvel ROM Flash dir».
После выбора опции мы видим модуль 0D.
Это практически победа! Теперь выключим питание и попробуем снова включить. Диск выходит в готовность. Теперь нажимаем «Инструменты → Редактор сектора → Да → Да».
И после этого видим данные пользовательской зоны!
Первый пример получился! На сегодня все, продолжение следует.
У вас творческий кризис? Решили пересказать кусок мануала от PC-3000?Давайте уже продолжение про изобретение HDD!
Пока посылки из Китая идут (АЦП, ПЛИС, STM32) и еще такие же WD-хи 1995-ого года находятся, занимаюсь реализацией давней задумки про простые случаи использования PC-3000. Так как нас часто просят гос организации прочитать им лекции про PC-3000, то было бы не плохо прикладывать к ним «методички» подробные и с видео. Сейчас в работе по изобретению
велосипедадиска два поста: про серводемодулятор и про макет «своей платы».Страшное дело, эти короткие мануалы для чайников. Я уже представляю как они, толком ничего не прочитав, не осмыслив, не сделав бэкап ресурсов, не проверив пишут ли головы и есть ли вообще записи в Relo-листе, слепо тыркают в волшебную педаль «слоу респондинг» 🙂 А потом, чтобы наверняка все починить, начинают очищать листы дефектов, пересчитывают трансляторы, записывают чужие зонники и т.п. (:
Есть такие, которые чтобы «увидеть данные» начинают дефекты в P-List добавлять не обращая внимание на предупреждение… В моем опусе бэкап ресурсов есть 🙂
>>«Тесты → Работа с ПЗУ → Блокировать доступ к модулю 02».
Интересно, а физически в дамп spi флешки после этой комманды что меняется?
Есть дампы слитые до и после?
Меняется 1 байт в модуле 0B или 20B (они в ПЗУ хранятся) в зависимости от того, какой из них задействован. Байт этот — идентификатор модуля 0D. Меняется он на 02. Т.е. когда диск доходит до чтения модуля 02 он пробует его прочитать, а по таблице получается, что он читает содержимое модуля 0D и останавливает запуск с практически полностью инициализированной микропрограммой.
Шикарно! Огромное спасибо! Побольше бы таких разборов!