В продолжение этой заметки хочу описать процесс багфикса в микрокоде Seagate. Конечно назвать это действие словосочетанием "перепрошивка Seagate" не корректно, но граждане любят задавать подобные дурацкие запросы в поисковые системы, поэтому приходится адаптироваться.
Итак анамнез: HDD ST500DM002 семейства Pharaoh при подаче питания раскручивает шпиндельный двигатель, в терминале без криминала:
Boot 0x10M
Spin Up[0x00000000][0x0000BDA4][0x0000C138]
Trans.
Rst 0x10M
MC Internal LPC Process
Spin Up
(P) SATA Reset
RAW OFF
PASS
однако попытка подать любую команду по АТА, в том числе и Get ID, приводит к вот такому состоянию регистров:
Ошибка в регистрах при запросе паспорта накопителя
Первым делом подозрение на плату, конечно. А ну как интерфейс битый? Однако плата отдельно от гермоблока вполне себе по АТА функционирует, и тот же запрос паспорта отрабатывает без проблем:
Паспорт диска ST500DM002 в safe mode (плата без гермоблока)
Очевидно, что проблема в служебной области, в микрокоде. Что-то при чтении поднимается такое, что приводит к печальным последствиям для работы по интерфейсу. Не смотря на то, что некоторые коллеги, из числа "умников", критиковали метод "разрушить до основания, а затем", если есть в голове знания и опыт за плечами, то метод форматирования служебной области является наиболее действенным в ситуациях когда не ясно, с какими именно модулями проблема, а времени на исследования нет — требуется восстановление данных за которые платят по тарифу "экстренный".
В результате форматирования SA всё служебной области прописывается паттерном 00h, после чего можно записать назад только то, что нужно для чтения user area, исключив всякое глючное и кривое.
По диагностическому терминалу диск работал без проблем, всё читалось и писалось. Первым делом я сохранил все модули, описанные в FID таблице, для перестраховки. Хотя объективно для работы данного конкретного диска Pharaoh нужны следующие модули: 03h, 28h, 93h, оверлеи 0,1,4,5, дискварь 20Eh, и на всякий пожарный, 35h.
Самый правильный способ следующий: после сохранения всего, чего можно, из микрокода, в память поднимаются оверлеи, как минимум 4-5, чтобы TrTw было доступно, потом командой форматируется служебная область, и после:
System Partition Format Successful - Elapsed Time 0 mins 18 secs
F3 T>
не переподключая питания, назад записываются вышеупомянутые модули.
Причём, если попытаться записать по АТА, то получится:
ASCII Online mode
ABORT!
SenseCode = 03310000
ReadyStatusFlags = 0002A1E1
поэтому писать надо по терминалу, да ещё и на дефолтной скорости, чтобы не поймать
Terminal, modem transfer: Out of sync!
Кроме того с диском, описываемым в текущей заметке работа по АТА и так исключалась.
Что будет, если не записав всё нужное, или не дописав того что надо, дёрнуть питание? Диск упадёт в такую позицию:
Boot 0x10M
Spin Up[0x00000000][0x0000BDA4][0x0000C138]
Trans.
LED:000000BB FAddr:00004254
LED:000000BB FAddr:00004254
LED:000000BB FAddr:00004254
Картина печальная, но при условии бэкапа всех необходимых потрошков, легко поправимая. Для лечения понадобится командой 92h залить дискварь и оверлеи в память и на поверхность. Для этого подаём питание на диск, и сразу лепим заглушку на диагностический порт. Диск встанет после:
Rst 0x10M
MC Internal LPC Process
Spin Up
(P) SATA Reset
(DOS) FWR Done
(DOS) File Save
Dither
и с диска без проблем читается вся нужная информация. Весь процесс организации доступа к UA путём "перепрошивки Сигейта" занимает пару минут!