Advertisement
Guest User

DISKWARE.TXT

a guest
Jan 25th, 2018
225
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 47.85 KB | None | 0 0
  1. В этом документе описывается структура служебной зоны Quantum ST/SE.
  2. Служебная зона TM несколько отличается от ST/SE. Различия между
  3. ними описаны в отдельном документе.
  4.  
  5. Служебная зона.
  6.  
  7. Кроме зон 1-15, содержащих пользовательские сектора, существует зона
  8. 0, называемая служебной зоной. Здесь хранится информация, необходимая для
  9. работы микропрограммы - программные модули (firmware), страницы
  10. конфигурации CP, таблицы дефектов, а также многие другие полезные
  11. структуры данных. Сектора этой зоны не имеют LBA, и в обычном
  12. (пользовательском) режиме работы недоступны. Для доступа к этой зоне
  13. используются отрицательные номера дорожек в суперкомандах чтения/записи по
  14. физическим параметрам CHS. Всего имеется 6 дорожек с номерами от -2 до -7.
  15. В служебной зоне информация хранится только на головках 0 и 1; на дорожках
  16. остальных головок, если они присутствуют в конфигурации винта, не
  17. содержится никакой полезной нформации - обычно они вообще не
  18. отформатированы. Hа дорожках используются сектора с номерами от 1 до 150
  19. (на дорожках -4 и -5 также имеется сектор 0), несмотря на то, что SPT этой
  20. зоны равен 275.
  21. Содержимое дорожек на одном и том же цилиндре по головкам 0 и 1
  22. полностью совпадает - они являются резервными копиями друг друга. Кроме
  23. того, совпадает содержимое дорожек -2 и -3, а также -4 и -5. Таким образом,
  24. в служебной зоне можно выделить три фрагмента, составляющих служебную
  25. информацию - сектора 1-150 дорожки -2, сектора 0-150 дорожки -4, и сектора
  26. 1-150 дорожки -6. Именно в таком порядке информация записывается в RSC-файл
  27. программой PC-3000, за исключением сектора 0 дорожки -4 - его, по
  28. непонятным причинам, программисты АСЕлаб игнорировали (что может давать
  29. неприятные последствия типа невозможности полностью восстановить служебку
  30. средствами РС-3000). Дорожка -7, по-видимому, не содержит никакой полезной
  31. информации - по крайней мере, ни разу не удалось заставить винт что-либо
  32. записать туда или отреагировать на полную ее очистку.
  33.  
  34. Формат служебной зоны.
  35.  
  36. Далее следует описание областей данных, хранящихся в служебной зоне.
  37. Hазначение некоторых областей пока не понятно - нужно разбираться дальше.
  38. Такие области обозначены идентификатором ХЗ (т.е. Хотелось бы Знать :)
  39. Графа "RSC" в таблице описывает адрес области данных в RSC-файле (в
  40. HEX-коде). Графа "смещение" описывает смещение до данного поля от начала
  41. сектора.
  42.  
  43. Цилиндр -2.
  44. -------------
  45.  
  46. Сек. Смещ. RSC Описание
  47.  
  48. 1 000 00024 Системный дефектлист
  49. 061 00085 Заполнено 00
  50. 2 000 00224 ХЗ
  51. 094 002b8 Кусок CP10 (365 байт) Зачем он нужен - ХЗ.
  52. 3 000 00424 Заголовок CP00
  53. 003 00427 CP00
  54. 004 00428 Заголовок CP01
  55. 007 0042b CP01
  56. 009 0042d Заголовок CP02
  57. 00c 00430 CP02
  58. 01c 00440 Заголовок CP03
  59. 01f 00443 CP03
  60. 02f 00453 Заголовок CP04
  61. 032 00456 CP04
  62. 03a 0045e Заголовок CP05
  63. 03d 00461 CP05
  64. 049 0046d Заголовок CP06
  65. 04c 00470 CP06
  66. 06c 00490 Заголовок CP07
  67. 06f 00493 CP07
  68. 07a 0049e Заголовок CP08
  69. 07d 004a1 CP08
  70. 07e 004a2 Заголовок CP09
  71. 081 004a5 CP09
  72. 091 004b5 Заголовок CP10
  73. 094 004b8 CP10
  74. 4 0bf 006e3 Заголовок CP11
  75. 0c2 006e6 CP11
  76. 0c6 006ea Заголовок CP12
  77. 0c9 006ed CP12
  78. 0ca 006ee Заголовок CP13
  79. 0cd 006f1 CP13
  80. 0cf 006f3 Заголовок CP14
  81. 0d2 006f6 CP14
  82. 0d8 006fc Заголовок CP15
  83. 0db 006ff CP15
  84. 18d 007b1 Заголовок CP16
  85. 190 007b4 CP16
  86. 192 007b6 Заголовок CP17
  87. 195 007b9 CP17
  88. 9 1de 013ba Заголовок CP18
  89. 1e1 013bd CP18
  90. 10 115 01539 Заголовок CP19
  91. 118 0153c CP19
  92. 139 0155d Заголовок CP20
  93. 13c 01560 CP20
  94. 11 03d 01661 Заголовок CP21
  95. 040 01664 CP21
  96. 12 185 019a9 Заголовок CP22
  97. 188 019ac CP22
  98. 189 019ad Заголовок CP23
  99. 18c 019b0 CP23
  100. 13 09e 01ac2 Заголовок CP24
  101. 0a1 01ac5 CP24
  102. 0c0 01ae4 Заголовок CP25
  103. 0c3 01ae7 CP25
  104. 0c6 01aea ХЗ
  105. 17 000 02024 дефектлист G-list
  106. 31 000 03C24 дефектлист P-list
  107. 45 000 05824 servo-дефектлист
  108. 46 000 05a24 Formatter descriptor table, дескрипторы секторов
  109. 49 000 06224 Пустое поле
  110. 65 000 08224 Модуль ID 20 (длина 8192 байт)
  111. 81 000 0a224 Модуль ID 21 (длина 8192 байт)
  112. 97 000 0c224 Модуль ID 22 (длина 8192 байт)
  113. 113 000 0e224 Модуль ID 23 (длина 8192 байт)
  114. 129 000 10224 Модуль ID 24 (длина 8192 байт)
  115.  
  116. Цилиндр -4
  117. --------------
  118.  
  119. 0 000 (нет в RSC) Модуль ID 82 (длина 512 байт)
  120. 1 000 12c24 Заполнено 00
  121. 2 000 12e24 Модуль ID 00 (длина 1536 байт)
  122. 5 000 13424 Модуль ID 01 (длина 20992 байт)
  123. 46 000 18624 Модуль ID 10 (длина 4096 байт)
  124. 53 000 19624 Модуль ID 11 (длина 4096 байт)
  125. 62 000 1a624 Модуль ID 12 (длина 4096 байт)
  126. 70 000 1b624 Модуль ID 13 (длина 4096 байт)
  127. 77 000 1c624 Модуль ID 14 (длина 4096 байт)
  128. 86 000 1d624 Модуль ID 15 (длина 4096 байт)
  129. 94 000 1e624 Модуль ID 16 (длина 4096 байт)
  130.  
  131. Цилиндр -6
  132. ------------
  133.  
  134. 1 000 25824 Пустое поле
  135. 5 000 26024 History record - отчет конфигцентра
  136. 14 000 27424 Пустое поле
  137. 33 000 29824 модуль SELFSCAN (замещается на RunNoMor тестом 02)
  138. 39 000 2a424 Основной лог селфскана (модуль PASS/FAIL)
  139. 51 000 2bc24 Временный дефектлист селфскана
  140. 83 000 2fc24 Временный серво-дефектлист селфскана
  141. 87 000 30424 Отчет тестов настройки адаптивов
  142. 95 000 31624 Результаты селфскана
  143. 97 000 31a24 Результаты селфскана
  144. 102 000 32224 Отчет теста Performance
  145. 103 080 32334 Поле заполнено FF
  146. 104 000 32624 Пустое поле
  147. 113 000 33824 S.M.A.R.T. Value, Worst, Raw.
  148. 114 000 33a24 S.M.A.R.T. Id, Threshhold
  149. 115 000 33c24 Пустое поле, до конца дорожки
  150.  
  151. Системный дефектлист
  152.  
  153. В этот лист заносится информация о дефектных секторах служебной зоны.
  154. Hеобходимость в этом листе возникает потому, что сектора служебной зоны не
  155. имеют PBA и не могут быть занесены в обычные P- и G-list. В системный
  156. дефектлист информация заносится обычной командой Super 10 (Reallocate Phys)
  157. путем указания отрицательного номера цилиндра, а также автоматически в
  158. процессе работы процедуры SELFSCAN.
  159. Область состоит из 6 записей по 16 байтов каждая. Каждая запись
  160. соответствует одному цилиндру служебной области следующим образом:
  161.  
  162. адрес записи дорожка
  163. 000 -7
  164. 010 -2
  165. 020 -3
  166. 030 -4
  167. 040 -5
  168. 050 -6
  169.  
  170. Здесь адрес - смещение до записи от начала сектора, дорожка - номер
  171. дорожки служебной области, за которую отвечает запись с указанным
  172. адресом.
  173. Каждая запись состоит из номеров секторов, считающихся плохими.
  174. Информации о головках нет вообще - то есть если по одной головке сектор
  175. считается плохим, то сектор с тем же номером на другой головке
  176. автоматически исключается из работы. Это позволяет поддерживать полную
  177. идентичность информации по обоим головкам. Когда какой-либо сектор
  178. исключается из работы, то информация, содержащаяся во всех последующих
  179. секторах автоматически сдвигается вперед. К примеру, если плохим
  180. объявляется сектор 148, то его содержимое копируется в сектор 149,
  181. содержимое сектора 149 - в сектор 150, а сектора 150 - в 151.
  182. Из вышесказанного следует важный вывод - если в системном дефектлисте
  183. отмечены плохие сектора, то корректно сохранить служебку средствами данной
  184. программы (впрочем как и РС3000) нельзя. И наоборот - если на такой винт
  185. залить служебку, то информация о дефектных секторах служебной зоны
  186. погибнет безвозвратно.
  187.  
  188. Страницы конфигурации СР.
  189.  
  190. Страницы конфигурации хранят самую разнообразную информацию о
  191. конфигурации и настройках винта - название модели, серийный номер, карту
  192. головок и зонного распределения, таблицу дескрипторов и адаптивных
  193. параметров, и многое другое. Большинство операций по переконфигурированию
  194. накопителя как раз и сводится к модификации страниц конфигурации.
  195. В служебной зоне каждой странице предшествует трехбайтовый заголовок.
  196. Первый байт - это номер страницы, остальный два - длина страницы в байтах.
  197. (длина каждой страницы фиксирована и не может быть изменена). Далее без
  198. разрыва следует сама страница, за ней - заголовок следующей страницы и т.д.
  199. Это поволяет найти нужную страницу путем просмотра всей цепочки. Тем не
  200. менее гораздо удобнее и правильнее для доступа к страницам использовать
  201. команды Super 02 и Super 03, а не ковыряться в секторах служебки.
  202.  
  203. Далеко не для всех страниц понятен их формат и назначение. Далее описывается
  204. то, что удалось понять.
  205.  
  206. # длина описание
  207. 00 1 Customer Number (00 - generic, 01 - SUN)
  208. 01 2
  209. 02 16 Производитель (QUANTUM)
  210. 03 16 Модель (Fireball ST xxx)
  211. 04 8 Версия микропрограммы
  212. 05 12 Серийный номер. Формат серийного номера есть в мануалах
  213. на соответствующи винт. Следует заметить, что есть взаимосвязь
  214. между третьей цифрой серийного номера и количеством головок
  215. винта. При нарушении этого соответствия винт при включении
  216. стучит головами и останавливает шпиндель. Это происходит,
  217. в частности, при заливке в винт служебки от винта другой
  218. емкости. Радикальным способом борьбы с этим неприятным
  219. эффектом является запись цифры 0 в качестве третьей цифры
  220. серийного номера. Тогда винт просто игнорирует серийник
  221. и работает с тем количеством голов, которое есть в наличие.
  222. Поэтому перед отключением голов обязательно надо третьей
  223. цмфрой серийника прописать 0.
  224. 06 32 слово GENERIC
  225. 07 11 Логические параметры: C/H/S/ ControlFlags
  226. 08 1 Количество физических головок. Для отключения верхней головки
  227. это число надо уменьшить на 1. При изменении этого числа
  228. автоматически пересчитывается карта зонного распределения.
  229. Hе забудьте про 0 в третьей цифре серийного номера!
  230. 09 16
  231. 10 555 Карта зонного распределения.
  232. 11 4 Ограничитель Max. LBA
  233. 12 1
  234. 13 2 Family code. Этот код однозначно определяет модель винта.
  235. Старший байт - общий код всего семейства. Младший - код
  236. модели конкретного винта. Обычно в нем содержится количество
  237. физических головок.
  238. 14 6 Карта используемых головок. Байты 0 и 3 представляют собой
  239. битовую карту, каждый бит которой соответствует головке с
  240. соответствующим номером. Так, у четырехголового винта ST3.2
  241. оба байта равны 0F (00001111). Если этому винту физически
  242. оторвать головку 2 (нумеруются головки с 0), то оба байта
  243. примут значение 0B (0001011). Тем не менее, использовать
  244. эту страницу для программного отключения головок пока не
  245. получается.
  246. 15 178 Каталог программных модулей.
  247. 16 2 HDA controls.
  248. 17 3073 Адаптивные параметры для каждой зоны и головки
  249. 18 380 Таблица дескрипторов секторов.
  250. 19 33
  251. 20 1
  252. 21 1093
  253. 22 1
  254. 23 274
  255. 24 31
  256. 25 3
  257.  
  258.  
  259. Основные дефектлисты.
  260.  
  261. Основные дефектлисты предназначены для хранения информации о дефектных
  262. секторах пользовательской области диска. Всего в служебной области имеется
  263. 2 листа - G-list и P-list. Дефект может находиться или только в G-list или
  264. сразу в обоих (только в P-list дефект находиться не может - по крайней
  265. мере, наблюдать такое нам не приходилось).
  266. P-list предназначен для хранения заводских дефектов, найденных в
  267. процессе изготовления винта (при прохождении им процедуры SELFSCAN).
  268. Дефекты, помещаемые в P-list, могут быть скрыты методом пропуска сектора
  269. (см. главу "Обработка дефектов") так, чтобы не давать выбросов на графике
  270. линейного чтения/верификации. (Hа самом деле скрыть таким образом можно не
  271. более 32 секторов на каждые 65504). Еще раз стоит отметить, что дефекты,
  272. заносимые в P-list, также должны быть занесены и в G-list.
  273. G-list хранит дефекты, образующиеся в процессе эксплуатации винта.
  274. Дефекты добавляются в этот лист или автоматически (при отработке
  275. алгоритмов AWRE и ARRE) или вручную командами Reallocate и Reallocate Phys
  276. (Super 10). Эти дефекты всегда скрываются методом замещения (также
  277. называемого словом "ремап"), что гарантирует сохранность пользовательской
  278. информации, поскольку сответствие PBA<->LBA для всех остальных секторов не
  279. нарушается. Такие дефекты вызывают явные выбросы на графике
  280. чтения/верификации. Кроме вышеописанных, G-list также содержит в себе
  281. полную копию P-list.
  282. Каждый дефектлист представляет собой массив из 7-байтовых записей
  283. длиной 7168 байт, в конце которого записан 1 байт контрольной суммы.
  284. Каждая запись состоит из трех полей. Байты 0-2 определяют PBA дефектного
  285. сектора. Байт 3 хранит код ошибки (с этим кодом пока не все ясно - хотелось
  286. бы получить полный список возможных кодов и что они означают). Байты 4-6
  287. хранят дополнительную информацию о дефекте. Так, если дефект вводится в
  288. режиме переназначения, то это поле хранит PBA замещающего сектора.
  289. Код ошибки, равный FF, означает конец списка. То есть запись с таким
  290. кодом всегда присутствует в дефектлисте (если он пуст, то это -
  291. единственная запись). Остальные байты в такой записи равны 0.
  292. Дефектлисты используются транслятором при трансляции логических
  293. параметров LCHS (или LBA) в PBA. При работе с поверхностями на уровне
  294. физических адресов CHS или PBA эти листы игнорируются, и к дефектным
  295. секторам открывается полный доступ.
  296.  
  297. Серво-дефектлист.
  298.  
  299. Этот дефектлист хранит информацию о плохих сервометках. В отличие от
  300. P- и G-листа, серводефектлист используется не транслятором, а всей
  301. микропрограммой винта. К секторам, адресуемым дефектной сервометкой,
  302. блокируется доступ даже по физическим параметрам (что позволяет избежать
  303. стуков и срывов серво-синхронизации).
  304. Дефектлист состоит из 4-байтовых записей. Первые два байта - это номер
  305. цилиндра и головы, упакованные следующим образом: частное от деления
  306. этого слова на 8 дает номер цилиндра, а остаток - номер головы. Остальные
  307. два байта записи - это номера дефектных сервометок. Таким образом, на
  308. дорожке может быть скрыто не более 2-х сервометок. Если на дорожке дефектна
  309. только одна сервометка, то вместо номера второй сервометки записывается FF.
  310. Конец таблицы - четыре подряд идущих байта FF.
  311. Этот дефектлист формируется в процессе прохождения теста 05 (Svfy)
  312. селфскана. Аселабовский тест сервометок не имеет к этому дефектлисту
  313. никакого отношения.
  314.  
  315. Программные модули
  316.  
  317. Программные модули - это резидентный программный код, загружаемый при
  318. страте винта из служебной области и необходимый для полноценной работы
  319. винта. При невозможности считать модули из служебки винт запускается в Safe
  320. mode, и требует загрузки модулей через интерфейс (с помощью лоадера).
  321. Каждый модуль состоит из заголовка и тела модуля. Формат заголовка:
  322.  
  323. Смещ. Длина Описание
  324. -------------------------
  325. 0 1 ID модуля - уникальный для каждого модуля код
  326. 1 1 младший байт family code микропрограммы винта, определяет
  327. принадлежность модуля к конкретному семейству винтов
  328. 2 3 Код микропрограммы, определяет соответствие
  329. модуля и модели винта, для которой он предназначен.
  330. Является первыми тремя символами версии микропрограммы
  331. (например, A0F для Quantum ST).
  332. 5 2 b0 00 для ST, 22 00 для TM, 4b 00 для SE.
  333. Пока ХЗ, для чего оно надо.
  334. 7 1 Длина модуля в секторах
  335.  
  336. Далее следуют еще несколько байт, явно относящихся к заголовку, но
  337. назначение их пока неясно, и без дизассемблера не особо интересно.
  338. Все модули, хранящиеся в служебке, имеют одинаковый Family code и код
  339. микропрограммы, поскольку относятся к одному и тому же винту. Различаются
  340. они идентификатором ID. В странице конфигурации CP15 имеется карта модулей,
  341. описывающая физические координаты модулей, хранящихся в служебке. Карта
  342. состоит из 11-байтных записей, имеющих такой формат:
  343.  
  344. struct cp15 {
  345. char len; // длина модуля в секторах
  346. int c1; // номер основного цилиндра служебки, где находится модуль
  347. int c2; // номер запасного цилиндра служебки, где находится модуль
  348. unsigned sec; // номер сектора, с которого начинается модуль
  349. char id_next; // идентификатор следующего в цепочке модуля
  350. int csum; // контрольная сумма.
  351. char trash; // ХЗ
  352. }
  353. Таким образом, все модули увязаны в цепочку. Признаком последней
  354. записи в таблице является id_next равный FF. И, естественно, в служебке
  355. хранится по 4 копии модуля (на головках 0 и 1, на основной и запасной
  356. дорожках).
  357. Кроме того, есть единственный модуль ID=82, который присутствует на
  358. диске, но не входит в карту модулей. Поэтому PC-3000 этот модуль
  359. игнорирует. Тем не менее, он необходим для нормальной работы винта - без
  360. него невозможна загрузка остальных модулей. Еще существуют модули ID=80 и
  361. 81, отсутствующие в служебной области, но входящие в лоадер (начальный
  362. загрузчик и карта загрузки, соответственно), а также модули 83, 40 и 41,
  363. входящие в загрузчик страниц конфигурации LCP.
  364. Hазначение большинства модулей пока неясно. Для того, чтобы в этом
  365. разобраться, необхдим дизассемблер на NEC 78k4. Пока только понятно, что
  366. модуль 20 представляет собой процедуры обслуживания selfscan-скриптов. По
  367. крайней мере, нам удалось вытащить из него список поддерживаемых модулем
  368. тестов.
  369. Будем разбираться дальше.
  370.  
  371. History Record.
  372.  
  373. Это поле заполняется конфигцентром по одноименной команде и содержит
  374. дату/время запуска, ключи командной строки ирезультат выполнения. При
  375. каждом выполнении команды область дополняется новой записью.
  376.  
  377. Модуль Selfscan.
  378.  
  379. Модуль Selfscan - это скрипт, используемый на заводе-изготовителе для
  380. начального тестирования винта. По-видимому, скрипт пишется изначально на
  381. каком-то специальном языке, и транслируется затем в форму модуля. Поскольку
  382. об этом языке мы никогда ничего не узнаем, то работать мы можем только с
  383. двоичным образом модуля.
  384. Модуль состоит из сектора заголовка и нескольких секторов, содержащих
  385. собственно скрипт.
  386. Заголовок имеет следующий формат:
  387.  
  388. Смещ. Длина Описание
  389. -------------------------
  390. 0 2 Контрольная сумма модуля.
  391. 2 6 Заполнено 00
  392. 8 8 Ключевое слово SELFSCAN
  393. 16 16 Версия модуля, заканчивается байтом 00
  394. 32 16 Дата/время запуска скрипта, необязательное поле
  395. (может состоять из байтов 00)
  396. 48 1 Символ 'S' - признак активности скрипта
  397.  
  398. Далее до конца сектора расположена информация, смысл которой до конца
  399. пока не понятен.
  400. Во всех последующих секторах расположен собственно скрипт. Он состоит
  401. из следующих друг за другом записей переменной длины. Каждая запись имеет
  402. следующий формат:
  403.  
  404. struct sso_record {
  405. char id; // идентификатор теста - определяет, какой тест запускать
  406. char len; // длина записи в байтах, с учетом полей id и len
  407. char body[len-2]; // тело записи - аргументы, передаваемые программе,
  408. // выполняющей данный тест
  409. }
  410.  
  411. ID теста однозначно определяет, какой тест запускать. В модуле 20
  412. имеется таблица, содержащая список всех возможных тестов, которые
  413. поддерживаются данной версией фирмвари.
  414. Вот примерный список возможных тестов:
  415.  
  416. 19 Тест буферной памяти
  417. 25 KLOOPC !
  418. 27 OptPCmp !
  419. 2B OptTDFE !
  420. 2C AdptLDFE ! - это все тесты настройки адаптивных переменных
  421. 2F Perform !
  422. 29 OptWAmp !
  423. 28 THRU !
  424. 05 Тест сервометок
  425. 0F Runout, тест точности позиционирования RRO/NRRO
  426. 1B Hd&STS
  427. 0A Random Seek
  428. 16 Fixed seek
  429. 24 HdGTst
  430. 26 Тест резонанса БМГ
  431. 01 Скан по физике
  432. 12 ScrFill
  433. 03 Reformat In Line - упорядочивание таблицы дефектов
  434. 21 Случайное чтение по логике
  435. 20 Custom Scan
  436. 0C Тест останова/запуска шпинделя
  437. 1A Тест коррекции ECC
  438. 14 Logical
  439. 15 Тест открытия/закрытия Airlock
  440. 02 Закрытие лога и SSO-скрипта
  441. FE Тест перезапуска Selfscan (формируется автоматически при
  442. выключении питания во время работы - в скрипт он не входит)
  443. FF Конец цепочки тестов
  444.  
  445. Заканчивается цепочка тестов записью, начинающейся с байта FF.
  446. Остальная часть модуля заполнена байтами 00. Таким образом, можно собрать
  447. свой Selfscan-модуль под определенную задачу, например тест сервометок. Для
  448. этого надо скопировать сектор заголовка стандартного модуля, а скрипт
  449. составить из следующих друг за другом записей, выделенных из полного
  450. скрипта. В конце обязательно надо добавить тест 02 и FF. Таким образом, для
  451. теста сервометок нужно собрать скрипт из тестов 05, 02 и FF, а для теста по
  452. физике - из тестов 01,12,03,02 и FF.
  453. Запускается селфскан командой Super 85. Если в процессе работы
  454. селфскана выключить/включить питание, то скрипт перезапускается с
  455. текущего теста. Это позволяет после запуска скрипта перевесить винт на
  456. отдельный блок питания, чтобы не мешал дальнейшей работе. Там он спокойно
  457. дойдет до конца, в конце остановит шпиндель и начнет равномерно мигать
  458. светодиодом. 3-4 раза в секунду - скрипт завершился успешно (PASS), 1-2
  459. раза в секунду - завершился с ошибкой (FAIL).
  460. После отработки скрипта, в случае успешного завершения, заголовок
  461. модуля видоизменяется - буква S заменяется на байт 00, а ключевое слово
  462. SELFSCAN - на RunNoMor для ST/SE или Deadbeef для TM. Такой скрипт является
  463. неактивным - то есть он уже не запустится ни автоматически, ни по Super 85.
  464. Hапротив, если селфскан завершился с ошибкой, то заголовок не изменяется, и
  465. через некоторое время селфскан может перезапуститься автоматически. Во
  466. избежании этого скрипт необходимо деактивировать принудительно - прописав
  467. что-либо вместо слова SELFSCAN в заголовок.
  468. В служебной зоне каждого винта фирмы Quantum обязательно имеется
  469. неактивный селфскан-модуль, оставшийся там после отработки на заводе при
  470. первоначальном запуске винта. Это дает замечательную возможность прогнать
  471. процедуру самотеста абсолютно на любом винте, даже совершенно
  472. нераскопанном. Для этого надо:
  473. - найти в служебной зоне неактивный модуль и слить его в файл
  474. - активировать скрипт - как минимум, прописать ему слово
  475. SELFSCAN и правильную контрольную сумму в заголовок
  476. - залить модуль обратно
  477. - дать винту Super 85.
  478. Все это можно проделать с помощью нашей программы cp.exe для младших и
  479. средних квантумов - от самых мелких типа LPS ProDrive до Fireball SE. Для
  480. более старших квантумов все выглядит несколько иначе - но это тема для
  481. отдельного длинного разговора.
  482.  
  483. Основной лог селфскана.
  484.  
  485. В этой области хранится основной протокол работы SELFSCAN-скрипта. В
  486. начале модуля находится контрольная сумма (она нам не нужна, разумеется -
  487. ее считает винт, а не мы). По смещению +30h находится результирующее слово
  488. - PASS, если скрипт завершился успешно, FAIL - если завершился с ошибкой и
  489. S, если скрипт еще не завершился.
  490. По смещению +70h начинаются записи результатов каждого теста. Длина
  491. каждой записи кратна 16 байт. Первые 16 байт записи - это основная запись
  492. лога теста, остальные 16-байтовые строки - дополнительные записи (они
  493. могут отсутствовать). Запись имеет такой формат:
  494.  
  495. Смещ. Длина Описание
  496. -------------------------
  497. 0 1 ID теста, результат которого описывает данная запись
  498. 1 1 Количество дополнительных 16-байтовых строк, занимаемых
  499. логом этого теста (0 - дополнительных строк нет).
  500. 2 1 Код завершения теста ( 0 - успешное завершение)
  501. 3 1 Байт 00
  502. 4 2 Время выполнения теста в секундах
  503.  
  504. Остальная часть записи специфична для каждого теста. В конце лога
  505. имеется запись о тесте FF, содержащая общее время выполнения селфскана и
  506. результирующий код ошибки. Проанализировав лог, можно узнать, какие
  507. конкретно у винта проблемы и почему селфскан FAIL.
  508. Описания кодов ошибок можно найти в файле exitcodes.err, входящем в
  509. комплект конфигцентра на соответствующий винт.
  510.  
  511. Дополнительные логи селфскана.
  512.  
  513. Кроме основного лога, многие тесты формируют в служебной области
  514. дополнительные логи и рабочие области. К примеру, временные дефектлисты,
  515. таблицы RRP/NRRO и т.д. Анализ этих областей позволяет более подробно
  516. узнать о причинах неуспешного завершения селфскана, и, кроме того,
  517. позволяет воссоздать основной дефектлист из временного в случае, если
  518. скрипт завершился с ошибкой, не создав основной дефектлист.
  519. Я не буду подробно описывать форматы этих областей - много писать
  520. неохота, да и надоело уже. Если кому интересно - спрашивайте, тогда уж
  521. расскажу. Есть у меня подозрение, что это мало кому интересно. Тем более
  522. что некоторые области до сих пор не раскопаны, и их назначение пока
  523. непонятно.
  524.  
  525. S.M.A.R.T.
  526.  
  527. В конце дорожки -6 находится область переменных SMART. Эту область
  528. создает конфигцентр командами # WriteThresholds и ей подобными. Мы не
  529. анализировали пока эту область, хотя это и не сложно сделать - просто нам
  530. это пока неинтересно. Если кому оно надо - займитесь, и отпишите о
  531. результатах. Авось кому пригодится.
  532.  
  533. Лоадер.
  534.  
  535. Для загрузки программных модулей в винт, не имеющий своих модулей (или
  536. в винт с поврежденными модулями), а также для обновления версии микрокода
  537. винта, существуют специальные файлы, называемые лоадерами. Эти файлы
  538. загружают в винт, используя стандартную команду Download Microcode. После
  539. загрузки новый программный код получает управление и пытается
  540. проинициализировать винт. Если ему это удается, то слышен характерный звук
  541. рекалибровки. Если рекалибровка не произошла - значит, фирмварь не смогла
  542. до конца проинициализировать винт. Это обычно происходит при повреждении
  543. некоторых областей служебной зоны.
  544. Загрузка лоадера может производиться в двух режимах - temporary, когда
  545. модули загружается только в RAM винта, и permanent, когда модули также
  546. прописываются в служебную область. Загрузка в режиме permanent возможна
  547. только в полноценно функционирующий винт, загрузка же в режиме temporary
  548. возможна также в винт, находящийся в safe mode.
  549. Лоадер состоит из идущих друг за другом модулей. Структура его такова:
  550.  
  551. модуль 80 - начальный загрузчик. Этот модуль не входит в служебную
  552. зону, и присутствует только в лоадере.
  553. модуль 82 - загрузчик модулей. Аналогичен соответствующему модулю
  554. из служебной зоны.
  555. модуль 81 - карта загрузки модулей. Использется вместо CP15, поскольку
  556. CP15 в safe mode недоступна. Модуль не входит в служебную зону,
  557. поскольку там вместо него есть CP15 :)
  558. модули 00, 01, 10-24 - модули, аналогичные имеющимся в служебной области.
  559.  
  560. Таким образом, можно было бы собрать лоадер на любой винт из имеющихся
  561. модулей. Hо - нужны модули 80 и 81, которых нет в служебке. И если с
  562. модулем 81 все ясно, то написать модуль 80 пока не представляется возможным
  563. - надо дизассемблировать и разобрать работу имеющегося модуля 80, что без
  564. дизассемблера сделать никак невозможно. Так что со сборкой своих лоадеров
  565. пока придется обождать.
  566.  
  567. LCP-лоадер.
  568.  
  569. Кроме вышеописанного загрузчика микрокода, поставляемого в файлах
  570. *.upd и *.ldr, существует также особый вид лоадера, поставляемый в файлах
  571. *.lcp. Это - загрузчик страниц конфигурации. Он предназначен для начального
  572. формирования страниц при инициализации служебной зоны, а также для
  573. необходимой модификации страниц при обновлении версии микрокода. Часто с
  574. программой-апдейтом микрокода вместе с обычным лоадером UPD поставляется
  575. также и LCP. В этом случае LCP-файл _обязательно_ должен быть загружен в
  576. винт после загрузки UPD-файла.
  577. LCP-лоадер состоит из модуля 83 (начальный загрузчик), 40 и 42 (их
  578. полное назначение пока ХЗ, можно только догадываться).
  579. Мы пока подробно не разбирали работу lcp-лоадера - не было времени, да
  580. и острой необходимости пока не стоит. Hадо будет - займемся.
  581.  
  582. Заключение.
  583.  
  584. Вот и все пока. Если что-либо из вышенаписанного показалось непонятным
  585. - пишите, постаемся объяснить подробнее. Хотя вроде бы уж подробнее некуда.
  586. Также пишите, если нужна дополнительная информация - к примеру, о формате
  587. вторичных логов селфскана, или о структуре и параметрах суперкоманд.
  588. Hабивать все это сюда уже сил нет и времени - там еще одна такая же книжка
  589. получается :)
  590. Также крайне приветствуются дополнения и замечания - все
  591. вышеизложенное - это наше IMHO, не претендующее на 100% достоверность.
  592. Если же кто добудет дизассемблер для Nec 78k4 - благодарность моя не будет
  593. иметь границ. Ибо дальнейшая раскопка этого винта уперлась рогом в
  594. отсутствие дизассемблера. В частности, без него нельзя разработать методику
  595. программного отключения средних голов без перекоммутации.
  596. Копайте винты. Честное слово, это очень интересно. Гораздо интереснее,
  597. чем смотреть всякую муть по телевизору или играть в тупые игрушки.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement