SSHD ST1000LX015 FireCuda не стартует - как исправить?

Новые гибридные диски Seagate FireCuda семейства Rosewood 8C принесли за собой те же проблемы, что были и со старыми Seragate Kahuna. Не смотря на рекламные уверения, диски от Сигейтов со временем лучше не становятся. Все болячки уверенно кочуют от старых моделей к свежим, по пути обрастая новыми багами.

Итак, поломка, как и на «кахунах» выражается в том, что при подаче питания диск не раскручивает двигатель не издавая при этом никаких звуков, в регистрах состояния взведён бит BUSY, в диагностический порт выдаётся сообщение:

Boot 0x80M DensityList:0x0000
PrgF
LED:0x000000BD FAddr:0x000059D8

LED:0x000000BD FAddr:0x000059D8

LED:0x000000BD FAddr:0x000059D8

Замена платы на PCB с другого диска проблему не решит, т.к. в NAND пишется вся важная часть микрокода, включая ПЗУ, и с чужой платой даже заменив м\с ПЗУ на ней, диск работать не будет. Корректным решением проблемы в таком случае является переинициализация NAND из safe mode, но на момент написания заметки такая возможность ещё не исследована в полной мере. Тем не менее мною найдено следующее решение:

С неисправного диска через SDLD или на программаторе читается ПЗУ, в один из модулей вносятся правки буквально в несколько байт, с последующим пересчётом контрольной суммы, которые отключают NAND вообще, превращая диск в негибридный. Найти это место совсем не сложно, если побайтно сравнить дампы ПЗУ гибридного и не гибридного диска. Дополнительно добавляется патч на прерывание старта после загрузки технологических оверлеев. После рестарта получаем следующее:

Boot 0x80M!
Tech Unlock Handshake: 0x015F77F6
Reply:
Srv DETCR init 0x0000
MCMTBufferPtr->Header.MCMTHeader.MCMTExtentCount = 0x00003817
MediaTableExtentCount = 0x00003814
MCMTBufferPtr->Header.MCMTHeader.MediaCacheExtentCount = 0x00001AE0
MediaCacheExtentCount = 0x00001AE0
DensityList:0x0000
LED:0x000000BD FAddr:0x000059D8

LED:0x000000BD FAddr:0x000059D8

LED:0x000000BD FAddr:0x000059D8

На первый взгляд ничего не изменилось, диск так же падает в «LED», тем не менее строчка «Tech Unlock Handshake» свидетельствует о том, что хард перестал обращаться к NAND чипу при старте, а читает непосредственно со служебной области на пластинах. Таким образом становится понятно, что на диске сперва слетел MCMT, потом всё это записалось дублем в NAND, и винчестер встал колом.

Далее после остановки загрузки на «Tech Unlock Handshake» и ожидания ответа «Reply» следует отключить чтение микрокода. Этого можно добиться либо закоротив контактную группу канала чтения на плате электроники, либо замкнуть обмотки HDD, для остановки двигателя с парковкой БМГ с последующим отключением всей контактной группы на гермоблок.

Дождавшись готовности диагностического порта подаём команду на раскручивание шпиндельного двигателя, после чего терминалом читаем FID-ы заводского дефект-листа, модуля транслятора и медиа-кеша. После их резервного копирования сбрасываем медиакеш

 MCInitialize: Start:  Host VBM Size (Bytes): 00000210 Metadata VBM Size (Bytes): 
 MCInitialize:  MCMTBufferPtr->Header.MCMTHeader.MediaCacheDiscStateFlags = 0000000A
 MCInitialize:  MCMTBufferPtr->Header.MCMTHeader.MCStateFlagsDisc = 00000001
 MCInitialize:  MCStateFlags = 00000001

 WB Ptr Initialization Complete
 MCInitialize: Init complete: 
ALF Parametric Tables Preserved
 WB Ptr Initialization Complete
 MCInitialize: Start:  Host VBM Size (Bytes): 00000210 Metadata VBM Size (Bytes): 
 MCInitialize:  MCMTBufferPtr->Header.MCMTHeader.MediaCacheDiscStateFlags = 0000000A
 MCInitialize:  MCMTBufferPtr->Header.MCMTHeader.MCStateFlagsDisc = 00000001
 MCInitialize:  MCStateFlags = 00000001

 MCInitialize: Start:  Host VBM Size (Bytes): 00000210 Metadata VBM Size (Bytes):   Starting LBA 007480F858, Count 00006270.
 ClearMC:  Completed, Last LBA 0074815AC8  Starting LBA 00747B05D8, Count 00052DA0.
 ClearMC:  Completed, Last LBA 0074803378
 MCInitialize:  MC Cleared 
 MCInitialize:  MCMTBufferPtr->Header.MCMTHeader.MediaCacheDiscStateFlags = 0000000A
 MCInitialize:  MCMTBufferPtr->Header.MCMTHeader.MCStateFlagsDisc = 00000001
 MCInitialize:  MCStateFlags = 00000001

 WB Ptr Initialization Complete
 MCInitialize: Init complete: 
(MC POR Duration): 00000007D9

Flash was erased and ALF Tables have successfully been initialized

и содержимое NAND:

 WB Ptr Initialization Complete
 MCInitialize: Start:  Host VBM Size (Bytes): 00000210 Metadata VBM Size (Bytes): 
 MCInitialize:  MCMTBufferPtr->Header.MCMTHeader.MediaCacheDiscStateFlags = 00000022
 MCInitialize:  MCMTBufferPtr->Header.MCMTHeader.MCStateFlagsDisc = 00000001
 MCInitialize:  MCStateFlags = 00000001

 MCInitialize: Start:  Host VBM Size (Bytes): 00000210 Metadata VBM Size (Bytes):   Starting LBA 007480F858, Count 00006270.
 ClearMC:  Completed, Last LBA 0074815AC8  Starting LBA 00747B05D8, Count 00052DA0.
 ClearMC:  Completed, Last LBA 0074803378
 MCInitialize:  MC Cleared 
 MCInitialize:  MCMTBufferPtr->Header.MCMTHeader.MediaCacheDiscStateFlags = 0000000A
 MCInitialize:  MCMTBufferPtr->Header.MCMTHeader.MCStateFlagsDisc = 00000001
 MCInitialize:  MCStateFlags = 00000001

 WB Ptr Initialization Complete
 MCInitialize: Init complete: 
(MC POR Duration): 00000007DE

Flash and Parametric Table was erased and ALF Tables have successfully been initialized

диск после рестарта выходит в готовность с возможностью чтения пользовательских данных. В случае полного выхода нанд-кэша из строя, для замены платы электроники на донорскую применяется следующая методика: на донорском диске очищается mcmt и nand, и сразу же записывается донорская ПЗУ, с правкой обращения к кешу, после чего плату можно ставить на диск-пациент. При первом рестарте важные части service area подтянутся в новый кэш.