Восстановление Seagate методом перепрошивки

В продолжение этой заметки хочу описать процесс багфикса в микрокоде 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 путём "перепрошивки Сигейта" занимает пару минут!