Как пришлось прошить жесткий диск Seagate чтобы получить доступ к информации

Еще одна непростая проблема с сигейтами, которую удалось решить с помощью так называемой прошивки HDD Seagate (загрузки микрокода по интерфейсу).

На сей раз - ноутбучный HDD ST9500325AS при подаче питания на слух рекалибруется, висит в BUSY, в диагностический порт выдает только:

Rst 0x08M

И всё. Терминального функционала после старта нет, так как диск зависает. До меня диск был в другом месте, где ему поменяли блок головок (обычно так всегда, если не понимают, что с винчестером не так, сразу меняют головы - на всякий случай). Само собой, в деле восстановления пользовательских файлов замена голов чтения\записи в данной ситуации никак не помогла и диск принесли в СЦ "Хардмастер".

Терминальный функционал на данной линейке накопителей заложен производителем в код ПЗУ, включается после подачи питания на интерфейс. Выглядит это таким вот образом:

Rst 0x08M
RW cmd 002F req = 18 F0 9F E5 18 F0 9F E5 18 F0 9F E5 18 F0 9F E5 18 F0 9F E5 00 00 A0 E1 
            opts = 00000000

RW Err = 84150180

ASCII Diag mode

F3 T>

Т.е. ошибка позиционирования по сервометкам, остановка шпиндельного двигателя и готовность в регистрах с готовностью отвечать на терминальные запросы. В такой позиции можно командой раскрутить двигатель, поднять с поверхности diag ovl и прочитать по АТА все описанные по id модули, а так же все модули, описанные в system volume. Все модули считались без ошибок, и на первый взгляд не содержали в себе ничего крамольного, что могло бы приводить к зависанию накопителя при штатном старте.

Сразу возникло подозрение на сбой в таблицах трансляции, но попытка пересчёта привела к такому результату:

Max Wr Retries = 00, Max Rd Retries = 00, Max ECC T-Level = 14, Max Certify Rewrite Retries = 2DF8

DiagError 0000500D 
User Partition Format Failed - Elapsed Time 0 mins 00 secs        
R/W Sense 00000002, R/W Error 843200A2, File Error 00000000
Blk Addr AD6F0001, Blk Addr Type D0, Cyl FFFF0000, Hd EC

Т.е. закончилась с ошибкой. После некоторых раздумий было принято решение кардинальное. Учитывая, что все необходимые части служебной информации были успешно зарезервированы ранее, я решил полностью отформатировать служебную область. Получив по окончании процесса:

System Partition Format Successful - Elapsed Time 2 mins 00 secs

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

Unable to load Diag Cmd Processor Overlay

Для того, чтобы получить полный функционал в такой ситуации, требуется записать оверлеи на поверхность, чтобы диск их считал. А для того, чтобы получить возможность произвести запись на поверхность диск должен их прочитать ранее. Замкнутый круг. Как найти выход из такой ситуации?

Вариант, учитывая что в ситуации с отформатированной служебкой диск выходит в готовность по интерфейсу штатно, один - используя команду id92h загрузить в HDD лоадер, т.е. пакет микрокода, содержащий в том числе и требуемые оверлеи, и тем самым, как говорят, перепрошить жесткий диск Seagate.

После этой операции пересчет транслятора завершился успешно

Max Wr Retries = 00, Max Rd Retries = 00, Max ECC T-Level = 14, Max Certify Rewrite Retries = 2DF8
User Partition Format Successful - Elapsed Time 0 mins 00 secs 

И, финальный штрих - запись ранее сохраненного транслятора (id2Bh). После переподачи питания диск выдал привычное:

Rst 0x08M
(P) SATA Reset

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