Лоадеры для жестких дисков Seagate

Жесткие диски Seagate, особенно после того как компания скупила ХДД подразделение Самсунг - частые гости в лаборатории по восстановлению информации. Проблемы самые разнообразные, - горелые платы, вышедшие из строя головки чтения\записи, запилы на поверхности, клин мотора, залипания головок и слетевший микрокод. Полный ассортимент, одним словом. Сегодня я бы хотел осветить процесс ремонта и восстановления жестких дисков Seagate с помощью так называемого лоадера, т.е. пакетной микропрограммы, разработанной компанией Seagate для апдейта фирмвари. Способ этот может применяться для восстановления дисков, у которых проблема с той или иной частью микропрограммы, что может выражаться общим симптомом - при подаче питания диск на слух рекалибруется, но не дает готовность в регистрах. Либо есть готовность, но нет доступа к пользовательской области. В диагностическом терминале может быть все, что угодно, от мега-простынь до пустоты.

Например, жесткий диск ST31000333AS, семейства Brinks с версией микропрограммы LC15. При подаче питания циклически рекалибруется, выдавая в диагностический терминал:

Rst 0x20M
(P) SATA Reset

LED:000000CC FAddr:0024CDC9

Классический подход к восстановлению накопителя с такой неисправностью, прерывание инициализации с последующим пересчетом таблиц трансляции. Альтернативный подход, - открутить плату электроники от гермоблока, дождаться готовности, прикрутить плату обратно, и с помощью штатной функции Download microcode (id92h) загрузить в накопитель апдейтилку микропрограммы. Диск обновит часть кода ПЗУ и оверлеи и после рестарта выйдет в готовность и даст доступ к пользовательской области. В отличии от "классической" методики, описанной в интернете, подобный способ не деструктивен для таблиц трансляции. Применять такой способ лучше, предварительно убедившись в работоспособности аппаратной части накопителя и сохранив оригинальное ПЗУ и модули, доступные по FID.

Теперь немного про метод лечения service area на накопителях, типа 7200.11\12\Green\LP\FreePlay и т.п. на примере Barracuda LP ST2000DL003 семейства Bogart с версией микропрограммы CC31. К примеру, имеем диск с классической для этих накопителей болячкой, про которые я писал еще в 2011 году:

Rst 0x40M
RW: Disc Ctlr Initialization Completed.
 MC Internal LPC Process
(P) SATA Reset

 User Data Base  00990940

 MCMainPOR: Start:
 Check MCMT Version: Current
 MCMainPOR: Non-Init Case
 MC Seg Disc and Cache Nodes:  4011985C  4011796C
 Seg Write Preamble VBM start: 000010A7 end: 000010CE
  Footer - start: 000010D0 end: 000010F7
 Seg Read Preamble VBM - start: 000010F9 end: 00001120
  Footer - start: 00001122 end: 00001149
Reconstruction: MCMT Reconstruction Start
  Max number of MC segments 22E0
 Nonvolatile MCMT sequence number 0000506C
 [RSRS] 129D
Reconstruction: EXCEPTION: Segment Overall Sequence Number Mismatch

 000024BC 00000000
[MCMTWS]
Reconstruction Fail: Burly Case
 MCMainPOR: MCTBufferPtr->Header.MCStateFlagsDisc = 00001001
 MCMainPOR: MCTBufferPtr->Header.MCTStateFlags = 0000002A
 MCMainPOR: MCStateFlags = 00001001

 MCMainPOR: Feature Disabled...
No HOST FIS-ReadyStatusFlags 0002A1E1

Предположим, мы не знаем в чем причина такого поведения и что нужно поправить, чтобы диск пересчитал себе media cache самостоятельно. Предположим, что вообще непонятно, что в SA покривело. Как быть? Я рискну предложить довольно кардинальный метод - восстановление HDD Seagate путем перезаписи микрокода, по аналогии с "ремонтом" операционной системы методом её переустановки. Методика эта основана на том, что современным дискам Сигейт для работы с пользовательской областью, хотя бы на уровне восстановить данные пользователя, необходимо не так много, гораздо меньше содержимого служебки, лежащей на диске "по-умолчанию". Кроме того, что записано в ПЗУ, конечно. Поэтому в ситуации, когда нет полной уверенности и знаний, что в служебной области не так, и в свою очередь есть полная уверенность в аппаратно исправном диске (поверхность служебки, состояние головок чтения\записи), то такой метод можно рекомендовать как рабочий, с оговоркой наличия определенных рисков, которые всегда присутствуют в таких глобальных вещах, как "переустановка операционной системы винчестера", читай - его микропрограммы.

В ситуации с подопытным накопителем мы имеем BUSY в ATA регистрах и готовность к работе через диагностический терминал. Первым делом сохраняем то, что нам потребуется для дальнейшей работы с пользовательской областью. По аналогии с переустановкой ОС - данные пользователя, "рабочий стол" и "мои документы". А именно, модули id03h и id2Bh. Первый модуль критически важен, наличие второго способно существенно облегчить жизнь в дальнейшем. Лучше бы, конечно, сохранить все модули, описанные в fid. На всякий, так сказать, пожарный случай. Проделав это, инициируем форматирование служебной области. Дальше пути для отступления у нас нет, только вперёд, только хардкор! Дождавшись

System Partition Format Successful - Elapsed Time 1 mins 59 secs

передергиваем питание. Диск рекалибруется, в терминальном окне пусто, в регистрах busy

Итак, по описаному выше алгоритму, откручиваем плату, подаем питание, дожидаемся выхода в готовность по регистрам, прикручиваем плату обратно и пробуем прогрузить ldr файл из штатной сигейтовской апдейтилки. Наблюдаем abrt. Как так? Почему? Дело в том, что для корректной отработки комплексного апдейта предлагаемого Seagate, требуется диск на котором шпиндель уже раскручен.

Два года назад я решал эту проблему методом апдейта "на горячую" (см. ссылку на материал в тексте ранее), теперь можно просто слегка подправить заводскую апдейтилку, убрав ненужное и указав, что и в каком порядке грузить. Подготовленный бут-лоадер загружаем через Download microcode. Диск взводит BUSY, раскручивает шпиндель и выдает в терминал:

Rst 0x40M
 MC Internal LPC Process
 FAIL Op=0900 Resp=0005
 SIM Error 203F
 RW Error 00000080
 User Data Base  00991BA8

 MCMainPOR: Start:
 MCInitialize: Start:  Buffer Words VBM: 00000210
 MCMainPOR: EXCEPTION: MC Init Fail.  Feature disabled.
 MCMainPOR: MCTBufferPtr->Header.MCStateFlagsDisc = E59FF018
 MCMainPOR: MCTBufferPtr->Header.MCTStateFlags = 0000F018
 MCMainPOR: MCStateFlags = 00000000

 MCMainPOR: EXCEPTION: POR Failed General
No HOST FIS-ReadyStatusFlags 2002A1A5

Жмем Ctrl+Z, опаньки:

ASCII Diag mode

F3 T>

То, что нам нужно. Если версия ПЗУ отличается от того, что мы загружали по id92h, то на большинство команд диск ответит:

 OverlayCompatibilityCheck failed

Unable to load Diag Cmd Processor Overlay

На большинство, но не на главную. На нее наш подопытный скажет:

 SIM Error 2002
 RW Error 00000080Max Wr Retries = 00, Max Rd Retries = 00,  Max Iterations = 01, Max Certify Rewrite Retries = 001B

DOS: MAGIC CONFIG NUMBER MISMATCH
User Partition Format Successful - Elapsed Time 0 mins 00 secs        
Zone re-format was skipped.

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

Rst 0x40M
 MC Internal LPC Process
(P) SATA Reset

 User Data Base  00991BA8

 MCMainPOR: Start:
 MCInitialize: Start:  Buffer Words VBM: 00000210
 ClearMC: Start Full  Media Cache size in host blks 00989680S23(01)S23(01)S23(01).S21(01)......S23(01)S23(01)S23(01)...
 ClearMC:  Completed, Last LBA 00989680
 MCInitialize:  MC Cleared
 MCInitialize:  MCTBufferPtr->Header.MCTStateFlags = 0000000A
 MCInitialize:  MCTBufferPtr->Header.MCStateFlagsDisc = 00000001
 MCInitialize:  MCStateFlags = 00000001

 Set MCMT Version Current
[MCMTWS]
 MC Seg Disc and Cache Nodes:  4011982C  4011793C
 Seg Write Preamble VBM start: 000010A7 end: 000010CE
  Footer - start: 000010D0 end: 000010F7
 Seg Read Preamble VBM - start: 000010F9 end: 00001120
  Footer - start: 00001122 end: 00001149
 MCInitialize: Init complete:
 MCMainPOR: MCTBufferPtr->Header.MCStateFlagsDisc = 00000041
 MCMainPOR: MCTBufferPtr->Header.MCTStateFlags = 00000022
 MCMainPOR: MCStateFlags = 00000041

 MCMainPOR: Feature Enabled...

Готовность и терминал. Полный паспорт и полный LBA. Конечно, читать что либо с диска пока рановато. Сперва мы пишем заботливо сохраненный 03h, потом воссоздаем по нему таблицы трансляции, а потом пишем не менее заботливо сохраненный 2Bh. И вот теперь-то диск полностью готов к копированию пользовательских данных. Все проблемы с модулями, которые мы, по условиям вводной, не знали где локализованы и как их решить иными методами, решены по-большевистски. Новая служебка - нет старых проблем!

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

Оставить комментарий

Читать комментарии к статье

Оставить комментарий:

Текст на изображении: Дайте понять, что вы не спамер Если вам не понятен текст на изображении обновите страницу, нажав F5

Guest
Интересно было-бы посмотреть как у Вас получится воскресить Pharaoh именно с FW KC4x при пустой SA )))
Robin
А что по-вашему есть FW?
Guest
А по-Вашему ? ))) Или Вы всегда привыкли отвечать вопросом на вопрос? На мой взгляд немного не объективное описание "методики" (на методику это пока не может претендовать в силу особенностей работы некоторых версий микропрограмм) Просто я предложил Вам продемонстрировать работу, якобы Вами разработанной методы, на конкретном семействе с конкретной версией микропрограммы (а именно с любой из КС44, 45, 47, 48).
Robin
По-моему fw это оверлеи в ПЗУ и SA. Что касается "как прописать что то на диск с пустой SA" то езжайте на завод-производитель, там каждый день такие чудеса пачками творят, делают из голых дисков с чистой SA, рабочие с нечистой. Не взирая на вари. Миракл!

Заметки схожей тематики:

Проблемы с HDD Seagate Surveillance 4000 GB

Сигейт ST32000645NS не могу обновить прошивку

ST31000333AS определяется как ST_M13FQBL