Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- В этом документе описывается структура служебной зоны Quantum ST/SE.
- Служебная зона TM несколько отличается от ST/SE. Различия между
- ними описаны в отдельном документе.
- Служебная зона.
- Кроме зон 1-15, содержащих пользовательские сектора, существует зона
- 0, называемая служебной зоной. Здесь хранится информация, необходимая для
- работы микропрограммы - программные модули (firmware), страницы
- конфигурации CP, таблицы дефектов, а также многие другие полезные
- структуры данных. Сектора этой зоны не имеют LBA, и в обычном
- (пользовательском) режиме работы недоступны. Для доступа к этой зоне
- используются отрицательные номера дорожек в суперкомандах чтения/записи по
- физическим параметрам CHS. Всего имеется 6 дорожек с номерами от -2 до -7.
- В служебной зоне информация хранится только на головках 0 и 1; на дорожках
- остальных головок, если они присутствуют в конфигурации винта, не
- содержится никакой полезной нформации - обычно они вообще не
- отформатированы. Hа дорожках используются сектора с номерами от 1 до 150
- (на дорожках -4 и -5 также имеется сектор 0), несмотря на то, что SPT этой
- зоны равен 275.
- Содержимое дорожек на одном и том же цилиндре по головкам 0 и 1
- полностью совпадает - они являются резервными копиями друг друга. Кроме
- того, совпадает содержимое дорожек -2 и -3, а также -4 и -5. Таким образом,
- в служебной зоне можно выделить три фрагмента, составляющих служебную
- информацию - сектора 1-150 дорожки -2, сектора 0-150 дорожки -4, и сектора
- 1-150 дорожки -6. Именно в таком порядке информация записывается в RSC-файл
- программой PC-3000, за исключением сектора 0 дорожки -4 - его, по
- непонятным причинам, программисты АСЕлаб игнорировали (что может давать
- неприятные последствия типа невозможности полностью восстановить служебку
- средствами РС-3000). Дорожка -7, по-видимому, не содержит никакой полезной
- информации - по крайней мере, ни разу не удалось заставить винт что-либо
- записать туда или отреагировать на полную ее очистку.
- Формат служебной зоны.
- Далее следует описание областей данных, хранящихся в служебной зоне.
- Hазначение некоторых областей пока не понятно - нужно разбираться дальше.
- Такие области обозначены идентификатором ХЗ (т.е. Хотелось бы Знать :)
- Графа "RSC" в таблице описывает адрес области данных в RSC-файле (в
- HEX-коде). Графа "смещение" описывает смещение до данного поля от начала
- сектора.
- Цилиндр -2.
- -------------
- Сек. Смещ. RSC Описание
- 1 000 00024 Системный дефектлист
- 061 00085 Заполнено 00
- 2 000 00224 ХЗ
- 094 002b8 Кусок CP10 (365 байт) Зачем он нужен - ХЗ.
- 3 000 00424 Заголовок CP00
- 003 00427 CP00
- 004 00428 Заголовок CP01
- 007 0042b CP01
- 009 0042d Заголовок CP02
- 00c 00430 CP02
- 01c 00440 Заголовок CP03
- 01f 00443 CP03
- 02f 00453 Заголовок CP04
- 032 00456 CP04
- 03a 0045e Заголовок CP05
- 03d 00461 CP05
- 049 0046d Заголовок CP06
- 04c 00470 CP06
- 06c 00490 Заголовок CP07
- 06f 00493 CP07
- 07a 0049e Заголовок CP08
- 07d 004a1 CP08
- 07e 004a2 Заголовок CP09
- 081 004a5 CP09
- 091 004b5 Заголовок CP10
- 094 004b8 CP10
- 4 0bf 006e3 Заголовок CP11
- 0c2 006e6 CP11
- 0c6 006ea Заголовок CP12
- 0c9 006ed CP12
- 0ca 006ee Заголовок CP13
- 0cd 006f1 CP13
- 0cf 006f3 Заголовок CP14
- 0d2 006f6 CP14
- 0d8 006fc Заголовок CP15
- 0db 006ff CP15
- 18d 007b1 Заголовок CP16
- 190 007b4 CP16
- 192 007b6 Заголовок CP17
- 195 007b9 CP17
- 9 1de 013ba Заголовок CP18
- 1e1 013bd CP18
- 10 115 01539 Заголовок CP19
- 118 0153c CP19
- 139 0155d Заголовок CP20
- 13c 01560 CP20
- 11 03d 01661 Заголовок CP21
- 040 01664 CP21
- 12 185 019a9 Заголовок CP22
- 188 019ac CP22
- 189 019ad Заголовок CP23
- 18c 019b0 CP23
- 13 09e 01ac2 Заголовок CP24
- 0a1 01ac5 CP24
- 0c0 01ae4 Заголовок CP25
- 0c3 01ae7 CP25
- 0c6 01aea ХЗ
- 17 000 02024 дефектлист G-list
- 31 000 03C24 дефектлист P-list
- 45 000 05824 servo-дефектлист
- 46 000 05a24 Formatter descriptor table, дескрипторы секторов
- 49 000 06224 Пустое поле
- 65 000 08224 Модуль ID 20 (длина 8192 байт)
- 81 000 0a224 Модуль ID 21 (длина 8192 байт)
- 97 000 0c224 Модуль ID 22 (длина 8192 байт)
- 113 000 0e224 Модуль ID 23 (длина 8192 байт)
- 129 000 10224 Модуль ID 24 (длина 8192 байт)
- Цилиндр -4
- --------------
- 0 000 (нет в RSC) Модуль ID 82 (длина 512 байт)
- 1 000 12c24 Заполнено 00
- 2 000 12e24 Модуль ID 00 (длина 1536 байт)
- 5 000 13424 Модуль ID 01 (длина 20992 байт)
- 46 000 18624 Модуль ID 10 (длина 4096 байт)
- 53 000 19624 Модуль ID 11 (длина 4096 байт)
- 62 000 1a624 Модуль ID 12 (длина 4096 байт)
- 70 000 1b624 Модуль ID 13 (длина 4096 байт)
- 77 000 1c624 Модуль ID 14 (длина 4096 байт)
- 86 000 1d624 Модуль ID 15 (длина 4096 байт)
- 94 000 1e624 Модуль ID 16 (длина 4096 байт)
- Цилиндр -6
- ------------
- 1 000 25824 Пустое поле
- 5 000 26024 History record - отчет конфигцентра
- 14 000 27424 Пустое поле
- 33 000 29824 модуль SELFSCAN (замещается на RunNoMor тестом 02)
- 39 000 2a424 Основной лог селфскана (модуль PASS/FAIL)
- 51 000 2bc24 Временный дефектлист селфскана
- 83 000 2fc24 Временный серво-дефектлист селфскана
- 87 000 30424 Отчет тестов настройки адаптивов
- 95 000 31624 Результаты селфскана
- 97 000 31a24 Результаты селфскана
- 102 000 32224 Отчет теста Performance
- 103 080 32334 Поле заполнено FF
- 104 000 32624 Пустое поле
- 113 000 33824 S.M.A.R.T. Value, Worst, Raw.
- 114 000 33a24 S.M.A.R.T. Id, Threshhold
- 115 000 33c24 Пустое поле, до конца дорожки
- Системный дефектлист
- В этот лист заносится информация о дефектных секторах служебной зоны.
- Hеобходимость в этом листе возникает потому, что сектора служебной зоны не
- имеют PBA и не могут быть занесены в обычные P- и G-list. В системный
- дефектлист информация заносится обычной командой Super 10 (Reallocate Phys)
- путем указания отрицательного номера цилиндра, а также автоматически в
- процессе работы процедуры SELFSCAN.
- Область состоит из 6 записей по 16 байтов каждая. Каждая запись
- соответствует одному цилиндру служебной области следующим образом:
- адрес записи дорожка
- 000 -7
- 010 -2
- 020 -3
- 030 -4
- 040 -5
- 050 -6
- Здесь адрес - смещение до записи от начала сектора, дорожка - номер
- дорожки служебной области, за которую отвечает запись с указанным
- адресом.
- Каждая запись состоит из номеров секторов, считающихся плохими.
- Информации о головках нет вообще - то есть если по одной головке сектор
- считается плохим, то сектор с тем же номером на другой головке
- автоматически исключается из работы. Это позволяет поддерживать полную
- идентичность информации по обоим головкам. Когда какой-либо сектор
- исключается из работы, то информация, содержащаяся во всех последующих
- секторах автоматически сдвигается вперед. К примеру, если плохим
- объявляется сектор 148, то его содержимое копируется в сектор 149,
- содержимое сектора 149 - в сектор 150, а сектора 150 - в 151.
- Из вышесказанного следует важный вывод - если в системном дефектлисте
- отмечены плохие сектора, то корректно сохранить служебку средствами данной
- программы (впрочем как и РС3000) нельзя. И наоборот - если на такой винт
- залить служебку, то информация о дефектных секторах служебной зоны
- погибнет безвозвратно.
- Страницы конфигурации СР.
- Страницы конфигурации хранят самую разнообразную информацию о
- конфигурации и настройках винта - название модели, серийный номер, карту
- головок и зонного распределения, таблицу дескрипторов и адаптивных
- параметров, и многое другое. Большинство операций по переконфигурированию
- накопителя как раз и сводится к модификации страниц конфигурации.
- В служебной зоне каждой странице предшествует трехбайтовый заголовок.
- Первый байт - это номер страницы, остальный два - длина страницы в байтах.
- (длина каждой страницы фиксирована и не может быть изменена). Далее без
- разрыва следует сама страница, за ней - заголовок следующей страницы и т.д.
- Это поволяет найти нужную страницу путем просмотра всей цепочки. Тем не
- менее гораздо удобнее и правильнее для доступа к страницам использовать
- команды Super 02 и Super 03, а не ковыряться в секторах служебки.
- Далеко не для всех страниц понятен их формат и назначение. Далее описывается
- то, что удалось понять.
- # длина описание
- 00 1 Customer Number (00 - generic, 01 - SUN)
- 01 2
- 02 16 Производитель (QUANTUM)
- 03 16 Модель (Fireball ST xxx)
- 04 8 Версия микропрограммы
- 05 12 Серийный номер. Формат серийного номера есть в мануалах
- на соответствующи винт. Следует заметить, что есть взаимосвязь
- между третьей цифрой серийного номера и количеством головок
- винта. При нарушении этого соответствия винт при включении
- стучит головами и останавливает шпиндель. Это происходит,
- в частности, при заливке в винт служебки от винта другой
- емкости. Радикальным способом борьбы с этим неприятным
- эффектом является запись цифры 0 в качестве третьей цифры
- серийного номера. Тогда винт просто игнорирует серийник
- и работает с тем количеством голов, которое есть в наличие.
- Поэтому перед отключением голов обязательно надо третьей
- цмфрой серийника прописать 0.
- 06 32 слово GENERIC
- 07 11 Логические параметры: C/H/S/ ControlFlags
- 08 1 Количество физических головок. Для отключения верхней головки
- это число надо уменьшить на 1. При изменении этого числа
- автоматически пересчитывается карта зонного распределения.
- Hе забудьте про 0 в третьей цифре серийного номера!
- 09 16
- 10 555 Карта зонного распределения.
- 11 4 Ограничитель Max. LBA
- 12 1
- 13 2 Family code. Этот код однозначно определяет модель винта.
- Старший байт - общий код всего семейства. Младший - код
- модели конкретного винта. Обычно в нем содержится количество
- физических головок.
- 14 6 Карта используемых головок. Байты 0 и 3 представляют собой
- битовую карту, каждый бит которой соответствует головке с
- соответствующим номером. Так, у четырехголового винта ST3.2
- оба байта равны 0F (00001111). Если этому винту физически
- оторвать головку 2 (нумеруются головки с 0), то оба байта
- примут значение 0B (0001011). Тем не менее, использовать
- эту страницу для программного отключения головок пока не
- получается.
- 15 178 Каталог программных модулей.
- 16 2 HDA controls.
- 17 3073 Адаптивные параметры для каждой зоны и головки
- 18 380 Таблица дескрипторов секторов.
- 19 33
- 20 1
- 21 1093
- 22 1
- 23 274
- 24 31
- 25 3
- Основные дефектлисты.
- Основные дефектлисты предназначены для хранения информации о дефектных
- секторах пользовательской области диска. Всего в служебной области имеется
- 2 листа - G-list и P-list. Дефект может находиться или только в G-list или
- сразу в обоих (только в P-list дефект находиться не может - по крайней
- мере, наблюдать такое нам не приходилось).
- P-list предназначен для хранения заводских дефектов, найденных в
- процессе изготовления винта (при прохождении им процедуры SELFSCAN).
- Дефекты, помещаемые в P-list, могут быть скрыты методом пропуска сектора
- (см. главу "Обработка дефектов") так, чтобы не давать выбросов на графике
- линейного чтения/верификации. (Hа самом деле скрыть таким образом можно не
- более 32 секторов на каждые 65504). Еще раз стоит отметить, что дефекты,
- заносимые в P-list, также должны быть занесены и в G-list.
- G-list хранит дефекты, образующиеся в процессе эксплуатации винта.
- Дефекты добавляются в этот лист или автоматически (при отработке
- алгоритмов AWRE и ARRE) или вручную командами Reallocate и Reallocate Phys
- (Super 10). Эти дефекты всегда скрываются методом замещения (также
- называемого словом "ремап"), что гарантирует сохранность пользовательской
- информации, поскольку сответствие PBA<->LBA для всех остальных секторов не
- нарушается. Такие дефекты вызывают явные выбросы на графике
- чтения/верификации. Кроме вышеописанных, G-list также содержит в себе
- полную копию P-list.
- Каждый дефектлист представляет собой массив из 7-байтовых записей
- длиной 7168 байт, в конце которого записан 1 байт контрольной суммы.
- Каждая запись состоит из трех полей. Байты 0-2 определяют PBA дефектного
- сектора. Байт 3 хранит код ошибки (с этим кодом пока не все ясно - хотелось
- бы получить полный список возможных кодов и что они означают). Байты 4-6
- хранят дополнительную информацию о дефекте. Так, если дефект вводится в
- режиме переназначения, то это поле хранит PBA замещающего сектора.
- Код ошибки, равный FF, означает конец списка. То есть запись с таким
- кодом всегда присутствует в дефектлисте (если он пуст, то это -
- единственная запись). Остальные байты в такой записи равны 0.
- Дефектлисты используются транслятором при трансляции логических
- параметров LCHS (или LBA) в PBA. При работе с поверхностями на уровне
- физических адресов CHS или PBA эти листы игнорируются, и к дефектным
- секторам открывается полный доступ.
- Серво-дефектлист.
- Этот дефектлист хранит информацию о плохих сервометках. В отличие от
- P- и G-листа, серводефектлист используется не транслятором, а всей
- микропрограммой винта. К секторам, адресуемым дефектной сервометкой,
- блокируется доступ даже по физическим параметрам (что позволяет избежать
- стуков и срывов серво-синхронизации).
- Дефектлист состоит из 4-байтовых записей. Первые два байта - это номер
- цилиндра и головы, упакованные следующим образом: частное от деления
- этого слова на 8 дает номер цилиндра, а остаток - номер головы. Остальные
- два байта записи - это номера дефектных сервометок. Таким образом, на
- дорожке может быть скрыто не более 2-х сервометок. Если на дорожке дефектна
- только одна сервометка, то вместо номера второй сервометки записывается FF.
- Конец таблицы - четыре подряд идущих байта FF.
- Этот дефектлист формируется в процессе прохождения теста 05 (Svfy)
- селфскана. Аселабовский тест сервометок не имеет к этому дефектлисту
- никакого отношения.
- Программные модули
- Программные модули - это резидентный программный код, загружаемый при
- страте винта из служебной области и необходимый для полноценной работы
- винта. При невозможности считать модули из служебки винт запускается в Safe
- mode, и требует загрузки модулей через интерфейс (с помощью лоадера).
- Каждый модуль состоит из заголовка и тела модуля. Формат заголовка:
- Смещ. Длина Описание
- -------------------------
- 0 1 ID модуля - уникальный для каждого модуля код
- 1 1 младший байт family code микропрограммы винта, определяет
- принадлежность модуля к конкретному семейству винтов
- 2 3 Код микропрограммы, определяет соответствие
- модуля и модели винта, для которой он предназначен.
- Является первыми тремя символами версии микропрограммы
- (например, A0F для Quantum ST).
- 5 2 b0 00 для ST, 22 00 для TM, 4b 00 для SE.
- Пока ХЗ, для чего оно надо.
- 7 1 Длина модуля в секторах
- Далее следуют еще несколько байт, явно относящихся к заголовку, но
- назначение их пока неясно, и без дизассемблера не особо интересно.
- Все модули, хранящиеся в служебке, имеют одинаковый Family code и код
- микропрограммы, поскольку относятся к одному и тому же винту. Различаются
- они идентификатором ID. В странице конфигурации CP15 имеется карта модулей,
- описывающая физические координаты модулей, хранящихся в служебке. Карта
- состоит из 11-байтных записей, имеющих такой формат:
- struct cp15 {
- char len; // длина модуля в секторах
- int c1; // номер основного цилиндра служебки, где находится модуль
- int c2; // номер запасного цилиндра служебки, где находится модуль
- unsigned sec; // номер сектора, с которого начинается модуль
- char id_next; // идентификатор следующего в цепочке модуля
- int csum; // контрольная сумма.
- char trash; // ХЗ
- }
- Таким образом, все модули увязаны в цепочку. Признаком последней
- записи в таблице является id_next равный FF. И, естественно, в служебке
- хранится по 4 копии модуля (на головках 0 и 1, на основной и запасной
- дорожках).
- Кроме того, есть единственный модуль ID=82, который присутствует на
- диске, но не входит в карту модулей. Поэтому PC-3000 этот модуль
- игнорирует. Тем не менее, он необходим для нормальной работы винта - без
- него невозможна загрузка остальных модулей. Еще существуют модули ID=80 и
- 81, отсутствующие в служебной области, но входящие в лоадер (начальный
- загрузчик и карта загрузки, соответственно), а также модули 83, 40 и 41,
- входящие в загрузчик страниц конфигурации LCP.
- Hазначение большинства модулей пока неясно. Для того, чтобы в этом
- разобраться, необхдим дизассемблер на NEC 78k4. Пока только понятно, что
- модуль 20 представляет собой процедуры обслуживания selfscan-скриптов. По
- крайней мере, нам удалось вытащить из него список поддерживаемых модулем
- тестов.
- Будем разбираться дальше.
- History Record.
- Это поле заполняется конфигцентром по одноименной команде и содержит
- дату/время запуска, ключи командной строки ирезультат выполнения. При
- каждом выполнении команды область дополняется новой записью.
- Модуль Selfscan.
- Модуль Selfscan - это скрипт, используемый на заводе-изготовителе для
- начального тестирования винта. По-видимому, скрипт пишется изначально на
- каком-то специальном языке, и транслируется затем в форму модуля. Поскольку
- об этом языке мы никогда ничего не узнаем, то работать мы можем только с
- двоичным образом модуля.
- Модуль состоит из сектора заголовка и нескольких секторов, содержащих
- собственно скрипт.
- Заголовок имеет следующий формат:
- Смещ. Длина Описание
- -------------------------
- 0 2 Контрольная сумма модуля.
- 2 6 Заполнено 00
- 8 8 Ключевое слово SELFSCAN
- 16 16 Версия модуля, заканчивается байтом 00
- 32 16 Дата/время запуска скрипта, необязательное поле
- (может состоять из байтов 00)
- 48 1 Символ 'S' - признак активности скрипта
- Далее до конца сектора расположена информация, смысл которой до конца
- пока не понятен.
- Во всех последующих секторах расположен собственно скрипт. Он состоит
- из следующих друг за другом записей переменной длины. Каждая запись имеет
- следующий формат:
- struct sso_record {
- char id; // идентификатор теста - определяет, какой тест запускать
- char len; // длина записи в байтах, с учетом полей id и len
- char body[len-2]; // тело записи - аргументы, передаваемые программе,
- // выполняющей данный тест
- }
- ID теста однозначно определяет, какой тест запускать. В модуле 20
- имеется таблица, содержащая список всех возможных тестов, которые
- поддерживаются данной версией фирмвари.
- Вот примерный список возможных тестов:
- 19 Тест буферной памяти
- 25 KLOOPC !
- 27 OptPCmp !
- 2B OptTDFE !
- 2C AdptLDFE ! - это все тесты настройки адаптивных переменных
- 2F Perform !
- 29 OptWAmp !
- 28 THRU !
- 05 Тест сервометок
- 0F Runout, тест точности позиционирования RRO/NRRO
- 1B Hd&STS
- 0A Random Seek
- 16 Fixed seek
- 24 HdGTst
- 26 Тест резонанса БМГ
- 01 Скан по физике
- 12 ScrFill
- 03 Reformat In Line - упорядочивание таблицы дефектов
- 21 Случайное чтение по логике
- 20 Custom Scan
- 0C Тест останова/запуска шпинделя
- 1A Тест коррекции ECC
- 14 Logical
- 15 Тест открытия/закрытия Airlock
- 02 Закрытие лога и SSO-скрипта
- FE Тест перезапуска Selfscan (формируется автоматически при
- выключении питания во время работы - в скрипт он не входит)
- FF Конец цепочки тестов
- Заканчивается цепочка тестов записью, начинающейся с байта FF.
- Остальная часть модуля заполнена байтами 00. Таким образом, можно собрать
- свой Selfscan-модуль под определенную задачу, например тест сервометок. Для
- этого надо скопировать сектор заголовка стандартного модуля, а скрипт
- составить из следующих друг за другом записей, выделенных из полного
- скрипта. В конце обязательно надо добавить тест 02 и FF. Таким образом, для
- теста сервометок нужно собрать скрипт из тестов 05, 02 и FF, а для теста по
- физике - из тестов 01,12,03,02 и FF.
- Запускается селфскан командой Super 85. Если в процессе работы
- селфскана выключить/включить питание, то скрипт перезапускается с
- текущего теста. Это позволяет после запуска скрипта перевесить винт на
- отдельный блок питания, чтобы не мешал дальнейшей работе. Там он спокойно
- дойдет до конца, в конце остановит шпиндель и начнет равномерно мигать
- светодиодом. 3-4 раза в секунду - скрипт завершился успешно (PASS), 1-2
- раза в секунду - завершился с ошибкой (FAIL).
- После отработки скрипта, в случае успешного завершения, заголовок
- модуля видоизменяется - буква S заменяется на байт 00, а ключевое слово
- SELFSCAN - на RunNoMor для ST/SE или Deadbeef для TM. Такой скрипт является
- неактивным - то есть он уже не запустится ни автоматически, ни по Super 85.
- Hапротив, если селфскан завершился с ошибкой, то заголовок не изменяется, и
- через некоторое время селфскан может перезапуститься автоматически. Во
- избежании этого скрипт необходимо деактивировать принудительно - прописав
- что-либо вместо слова SELFSCAN в заголовок.
- В служебной зоне каждого винта фирмы Quantum обязательно имеется
- неактивный селфскан-модуль, оставшийся там после отработки на заводе при
- первоначальном запуске винта. Это дает замечательную возможность прогнать
- процедуру самотеста абсолютно на любом винте, даже совершенно
- нераскопанном. Для этого надо:
- - найти в служебной зоне неактивный модуль и слить его в файл
- - активировать скрипт - как минимум, прописать ему слово
- SELFSCAN и правильную контрольную сумму в заголовок
- - залить модуль обратно
- - дать винту Super 85.
- Все это можно проделать с помощью нашей программы cp.exe для младших и
- средних квантумов - от самых мелких типа LPS ProDrive до Fireball SE. Для
- более старших квантумов все выглядит несколько иначе - но это тема для
- отдельного длинного разговора.
- Основной лог селфскана.
- В этой области хранится основной протокол работы SELFSCAN-скрипта. В
- начале модуля находится контрольная сумма (она нам не нужна, разумеется -
- ее считает винт, а не мы). По смещению +30h находится результирующее слово
- - PASS, если скрипт завершился успешно, FAIL - если завершился с ошибкой и
- S, если скрипт еще не завершился.
- По смещению +70h начинаются записи результатов каждого теста. Длина
- каждой записи кратна 16 байт. Первые 16 байт записи - это основная запись
- лога теста, остальные 16-байтовые строки - дополнительные записи (они
- могут отсутствовать). Запись имеет такой формат:
- Смещ. Длина Описание
- -------------------------
- 0 1 ID теста, результат которого описывает данная запись
- 1 1 Количество дополнительных 16-байтовых строк, занимаемых
- логом этого теста (0 - дополнительных строк нет).
- 2 1 Код завершения теста ( 0 - успешное завершение)
- 3 1 Байт 00
- 4 2 Время выполнения теста в секундах
- Остальная часть записи специфична для каждого теста. В конце лога
- имеется запись о тесте FF, содержащая общее время выполнения селфскана и
- результирующий код ошибки. Проанализировав лог, можно узнать, какие
- конкретно у винта проблемы и почему селфскан FAIL.
- Описания кодов ошибок можно найти в файле exitcodes.err, входящем в
- комплект конфигцентра на соответствующий винт.
- Дополнительные логи селфскана.
- Кроме основного лога, многие тесты формируют в служебной области
- дополнительные логи и рабочие области. К примеру, временные дефектлисты,
- таблицы RRP/NRRO и т.д. Анализ этих областей позволяет более подробно
- узнать о причинах неуспешного завершения селфскана, и, кроме того,
- позволяет воссоздать основной дефектлист из временного в случае, если
- скрипт завершился с ошибкой, не создав основной дефектлист.
- Я не буду подробно описывать форматы этих областей - много писать
- неохота, да и надоело уже. Если кому интересно - спрашивайте, тогда уж
- расскажу. Есть у меня подозрение, что это мало кому интересно. Тем более
- что некоторые области до сих пор не раскопаны, и их назначение пока
- непонятно.
- S.M.A.R.T.
- В конце дорожки -6 находится область переменных SMART. Эту область
- создает конфигцентр командами # WriteThresholds и ей подобными. Мы не
- анализировали пока эту область, хотя это и не сложно сделать - просто нам
- это пока неинтересно. Если кому оно надо - займитесь, и отпишите о
- результатах. Авось кому пригодится.
- Лоадер.
- Для загрузки программных модулей в винт, не имеющий своих модулей (или
- в винт с поврежденными модулями), а также для обновления версии микрокода
- винта, существуют специальные файлы, называемые лоадерами. Эти файлы
- загружают в винт, используя стандартную команду Download Microcode. После
- загрузки новый программный код получает управление и пытается
- проинициализировать винт. Если ему это удается, то слышен характерный звук
- рекалибровки. Если рекалибровка не произошла - значит, фирмварь не смогла
- до конца проинициализировать винт. Это обычно происходит при повреждении
- некоторых областей служебной зоны.
- Загрузка лоадера может производиться в двух режимах - temporary, когда
- модули загружается только в RAM винта, и permanent, когда модули также
- прописываются в служебную область. Загрузка в режиме permanent возможна
- только в полноценно функционирующий винт, загрузка же в режиме temporary
- возможна также в винт, находящийся в safe mode.
- Лоадер состоит из идущих друг за другом модулей. Структура его такова:
- модуль 80 - начальный загрузчик. Этот модуль не входит в служебную
- зону, и присутствует только в лоадере.
- модуль 82 - загрузчик модулей. Аналогичен соответствующему модулю
- из служебной зоны.
- модуль 81 - карта загрузки модулей. Использется вместо CP15, поскольку
- CP15 в safe mode недоступна. Модуль не входит в служебную зону,
- поскольку там вместо него есть CP15 :)
- модули 00, 01, 10-24 - модули, аналогичные имеющимся в служебной области.
- Таким образом, можно было бы собрать лоадер на любой винт из имеющихся
- модулей. Hо - нужны модули 80 и 81, которых нет в служебке. И если с
- модулем 81 все ясно, то написать модуль 80 пока не представляется возможным
- - надо дизассемблировать и разобрать работу имеющегося модуля 80, что без
- дизассемблера сделать никак невозможно. Так что со сборкой своих лоадеров
- пока придется обождать.
- LCP-лоадер.
- Кроме вышеописанного загрузчика микрокода, поставляемого в файлах
- *.upd и *.ldr, существует также особый вид лоадера, поставляемый в файлах
- *.lcp. Это - загрузчик страниц конфигурации. Он предназначен для начального
- формирования страниц при инициализации служебной зоны, а также для
- необходимой модификации страниц при обновлении версии микрокода. Часто с
- программой-апдейтом микрокода вместе с обычным лоадером UPD поставляется
- также и LCP. В этом случае LCP-файл _обязательно_ должен быть загружен в
- винт после загрузки UPD-файла.
- LCP-лоадер состоит из модуля 83 (начальный загрузчик), 40 и 42 (их
- полное назначение пока ХЗ, можно только догадываться).
- Мы пока подробно не разбирали работу lcp-лоадера - не было времени, да
- и острой необходимости пока не стоит. Hадо будет - займемся.
- Заключение.
- Вот и все пока. Если что-либо из вышенаписанного показалось непонятным
- - пишите, постаемся объяснить подробнее. Хотя вроде бы уж подробнее некуда.
- Также пишите, если нужна дополнительная информация - к примеру, о формате
- вторичных логов селфскана, или о структуре и параметрах суперкоманд.
- Hабивать все это сюда уже сил нет и времени - там еще одна такая же книжка
- получается :)
- Также крайне приветствуются дополнения и замечания - все
- вышеизложенное - это наше IMHO, не претендующее на 100% достоверность.
- Если же кто добудет дизассемблер для Nec 78k4 - благодарность моя не будет
- иметь границ. Ибо дальнейшая раскопка этого винта уперлась рогом в
- отсутствие дизассемблера. В частности, без него нельзя разработать методику
- программного отключения средних голов без перекоммутации.
- Копайте винты. Честное слово, это очень интересно. Гораздо интереснее,
- чем смотреть всякую муть по телевизору или играть в тупые игрушки.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement