|
| HDD:Адаптивы Fujitsu MPG |
Адаптивы содержаться в 20h модуле в начале и в ПЗУ в конце. в модуле - первые 512 байт. Если винт безадаптивный, то в начале модуля пусто. если по адресу 0x2b в прошивке стянутой с харда (PB15-16) заменить 0xxxxxxx на 1xxxxxxx тогда какби прошивка становиться адаптивной, но сами адаптиви, что лежат в конце чистие, тоисть FF FF FF FF и так дальше
в пзу адаптивы находятся: 0001FDE0h-0001FFD0h - 512 byte.
Подвернулись мне под руку 5шт. mpg3102at fw:A9-80B5. Куплены одновременно. Отличаются буквально одной циферкой в серийнике (но тем не менее 4шт адаптивные, один - нет). В общем отличные кандидаты для ковыряния. Начал со сравнения 20-ого модуля. Результат не очень порадовал - данные вдрызг различаются. Закономерности в данных конечно присутствуют, но разгадывать их сума сойдёшь. Немного поломав голову над закономерностями решил банально залить прошивки от одного к другому. Для начала залил безадаптивную прошивку в адаптивный винт. Результат - стук. Попробовал прочитать 20-й модуль способом описанным в пс3к (и ещё где-то на форуме maysoft'a) - совершенно бесполезное занятие. Имхо, таким способом считать нереально. Причём стук со временем изменяется. Почему - разобрался быстро. В HS записано что-то типа 02 02 00 01. Винт просто периодически переключается с одной головы на другую. Стоит в HS записать 01 01 00 и стук становится монотонным. На форуме maysoft'a упоминалось, что в таком режиме винт пытается подобрать адаптивы - я ничего подобного не наблюдал (хоть с включенным, хоть с выключенным флагом адаптивов). Далее - начинаю поочерёдно заливать в кролика адаптивные прошивки. Результат разный. Может стучать (тихо), а может сразу давать готовность (без рекалибровки). При попытке чтения чего-либо из служебки - Err+Abrt. Записываю HS. Читаю. Читает! Лью родную прошивку. Делаю скан. Несколько UNC в начале диска. Винт записал логи по неродным местам? Анализирую всё выше написанное - прихожу к такому выводу - имеется какая-то привязка серворазметки к местоположению данных на винте. И именно это и прописывается в адаптивах. Т.е. грубо говоря сервоврайтер "неровно" размечает диск. Разметка может съезжать от шпинделя или к шпинделю и чтоб это компенсировать необходимо "сдвигать" данные относительно сервы, чтоб физически они находились в одном и том же месте на любом диске. В этом, как я понял, и заключается основная проблема с адаптивами. Ладно. Далее начинаю выяснять место в адаптивах критичное для винта. Для этого начинаю подменять куски адаптивов с родных на неродные и лить прошивку в винт. Всё поменял - ни черта не пронимает . Банально зануляю - не пронимает . Оказалось - критичен только самый заголовок адаптивов. Два байта из заголовка. Всё остальное можно спокойно занулить . По адресу 1fde7 старший байт, по адресу 1fde6 младший байт. Как я понимаю это просто адрес нулевого трека относительно сервы. Попробовал выяснить в каких пределах можно варьировать это значение - выяснил, на единичку вверх и вниз. В моём случае там было записано сс02. Подошли значения сb02 и cd02. (Как я понимаю "прокатывает" вверх и вниз на один трек.) Если число уменьшать, то винт начинает стучать. Увеличивать - тикает и Err+Abrt.
|
|
|
|