迈拓硬盘虽然已被希捷收购,但由于迈拓曾经的市场占有率非常高,并且迈拓硬盘的固件结构比较复杂,固件包含的模块多、故障率高,所以本书选择迈拓硬盘为例,讲解使用PC-3000 UDMA修复硬盘固件的方法。
PC-3000对硬盘的处理需要严格区分型号,所以学会识别硬盘型号是使用PC-3000的第一步。
迈拓硬盘的分类见表13-1所示。
表13-1 迈拓硬盘型号对应表
迈拓硬盘固件主要由微程序、模块、校准程序三部分组成,下面分别进行说明。
迈拓硬盘的微程序在主存储器中运行,微程序可以从三个地方载入:第一,硬盘主处理器的掩模ROM;第二,电路板上的Flash ROM;第三,固件区。
硬盘在正常运转状态下,在进行初始化时会将固件区的程序写入到电路板上。如果由于某些原因不能从固件区启动程序,硬盘就会进入“FAIL(失败)”的状态,这类似“安全模式”状态,硬盘会被检测为属系名。要想脱离“FAIL”状态,应该使用LDR文件引导,将所有微程序(ROM+Overlay)强制写入微处理器中的主存储器(RAM)中。
硬盘微程序的版本标识在硬盘外部的标签上,格式如6Y080L0422011C(MODEL+ HAD+PCBA+UNIQUE)。运行程序菜单“Utility status(程序状态)”就显示模块PN=48(名称为LABLE)中的内容,如图13-7所示。
如果不能读取版本模块,那么就不会显示版本信息,而代之以圆点。
迈拓硬盘固件区的数据结构如图13-8所示。
图13-8最顶层是硬盘的物理区域,此区域是独立的,位密度也是独立的。磁头通过UBA寻址来寻找活动固件区,在多磁头的硬盘中只有一个磁头上固件区为活动固件区,这是硬盘运转时使用的固件区。活动固件区由模块组组成,而每个模块组都有备份。向固件区进行写入时会写入模块组的所有备份,因此不可能利用模块备份来修复写入操作时造成的模块损坏,因为模块备份也同时损坏了。
“模块组”按照功能进行分类可分为“数据模块”、“微程序模块”和“技术模块”。“微程序模块”用于硬盘读取操作和写入操作,如果它们有故障就会导致短时的写入失败。“技术模块”只在工厂的生产过程中使用,在硬盘的一般运转过程中不会被调用。
模块根据UBA地址升序排列,因此可以知道它们的位置关系,迈拓硬盘的数据模块见表13-2。
表13-2 迈拓硬盘的数据模块列表
位置码(十六进制) | 模块说明 | 重要性 |
---|---|---|
37 | U_LIST,固件区译码表 | A |
1F | DISK,硬盘信息 | B |
78 | RZTBL,Zone表(译码表的组成部分) | A |
18 | AT_PDL(P-List,译码表的组成部分) | A |
21 | RCT,磁盘表面数据的校准信息 | A |
1E | SRV,校准参数 | A |
1A | SECU,安全模块(ATA密码) | C |
2F | S.M.A.R.T.阈值 | C |
30 | S.M.A.R.T.属性 | C |
63 | S.M.A.R.T.属性的拷贝 | C |
22 | ATAF,ATA设置标记 | B |
34 | ARREH | D |
48 | [标签]-硬盘的组件信息 | D |
1D | DMCS | B |
1B | AT_POL(G-List),可增长缺陷表 | C |
35 | AT_XAL | C |
64 | MAXATG | D |
5E | EVTLG_00,与G-List相关联 | D |
70 | S.M.A.R.T.概要日志 | C |
71 | S.M.A.R.T.Self-Test日志 | C |
72 | S.M.A.R.T.生产商信息 | C |
7B | FW | D |
95 | 附加的DISK副本 | B |
93 | FMTI,包含zone分配表的模块 | A |
A7 | AT_POL,G表的副本 | E |
表13-3为微程序模块,前3个为微程序,后三个为生产过程中使用的程序,但并不是所有的硬盘上都有。
表13-3 迈拓硬盘固件区的微程序模块
位置码(十六进制) | 模块说明 | 重要性 |
---|---|---|
39 | [ROM_SA],ROM的副本 | B |
38 | [OVL_ATA],程序Overlay的第一部分 | B |
4F | [OVL_TECH],程序Overlay的第二部分 | B |
97 | [ROM_ST],ROM的副本 | E |
96 | [OVL_ST1],程序Overlay的第一部分 | E |
98 | [OVL_ST2],程序Overlay的第二部分 | E |
表13-4为技术模块,包括自校准设置和日志。
表13-4 迈拓硬盘固件区的技术模块
位置码(十六进制) | 模块说明 | 重要性 |
---|---|---|
33 | HLUTL&HUSR-缺陷表 | D |
11 | MX_ST_CFG1 | D |
43 | MX_ST_CFG2 | D |
0D | MX_ST_CFG3 | D |
0E | MX_ST_SCRIPT | D |
7A | U_LIST,固件区译码表的副本 | D |
83 | 硬盘组件的数据 | D |
31 | DISK,硬盘信息的副本 | D |
14 | STRS | D |
46 | OPTI,self-testing的参数 | D |
47 | STRS | D |
对模块的“重要性”说明如下:
A——在硬盘中此模块是独一无二的,包括自校准参数和译码表,从其他硬盘中复制这类模块将导致读/写参数丢失和数据丢失(如自校准数据)。
B——此类模块是必需的,但是可以使用其他硬盘中的代替,替换时需要是同型号硬盘和同版本的模块。
C——此类模块是必需的,但是部分的损坏不会影响硬盘启动。硬盘在特定的情况下可以自动修复模块的内容。
D——不会影响硬盘运转。通常为信息模块。
E——即使没有此模块驱动器也可以正常运行。
各模块的作用如下:
①固件区译码表U_LIST(PN=37H)。此模块有8个备份,不过模块列表中只显示了两个副本。此模块中含有固件区缺陷数量和缺陷类型的列表,如果固件区缺陷列表中含有缺陷,那么U_LIST就会是独一无二的。
②配置模块DISK(PN=1FH)。此模块中包含磁盘的配置数据:硬盘型号、串号、最大LBA、物理磁头的数量和映射。
③RZTBL模块(PN=78H)。此模块是译码表的一部分,此模块中的参数将硬盘表面划分成多个区域。
④AT_PDL模块(PN=18H)。此模块的表中包含有出厂时用户区的缺陷。
⑤AT_POL模块(PN=1BH)和副本(PN=A7H)。此模块中记录的是硬盘使用过程中出现的缺陷。
⑥FMTI模块(PN=93H)。此模块只用于全容量的硬盘中,其中包含每个磁头的Zone表和每个Zone的自校准参数。
⑦_RCT_模块(PN=21H)。对此模块的结构和功能还在研究当中,不过如果从其他硬盘复制了一个此模块,或者此模块损坏不会对硬盘带来灾难性的影响,硬盘在多数情况下可以进行读取和写入操作。此模块在进行自校准时生成,也就是说,如果此模块丢失,就不能修复此模块。
⑧_SRV_模块(PN=1EH)。对此模块结构和功能的研究还在进行当中。如果使用其他硬盘上的模块来替代它,将会发生读取故障,并且不能再对硬盘进行写入操作。此模块在工厂测试时根据伺服校准生成。
⑨[ROM_SA]模块(PN=39H)。此模块是硬盘正常运转时载入ROM的程序部分。
⑩Overlay ATA[OVL ATA](PN=38H)。此Overlay是硬盘正常运转时最重要的微程序。如果某一Overlay不能读取,那么就不能执行所有的ATA指令,如S.M.A.R.T.指令。Overlay表示程序代码被分段从主存储器中载入主处理器,同一时间只有一个Overlay被载入。
⑪实现技术指令的Overlay[OVL TECH](PN=4FH)。此Overlay用于技术功能的运行。
⑫微程序切换模块(PN=95H)。硬盘通过检测此模块的第2个字(第4字节和第5字节)来决定启动程序1或程序2。
⑬[ROM_ST](PN=96H),[OVL_ST](PN=97H)和PN=98H。这些模块来自“程序2”,它们的功能取决于硬盘属系和固件区(基本或备用)。
⑭模块AT_XAL(PN=35H)。有时由于某些原因硬盘可以启动,但是不能以LBA方式运转。在老DSP如RIGEL硬盘中,此模块用于将缺陷写入G表时的临时表。
⑮模块HLUTL&HUSR(PN=33H)。该模块由短的HList组成一组表,首先是16384B(包括8B的头部和校验和)的HLUTL,HLUTL为固件区缺陷表;然后是一系列的HUSRxxxx,其中xxxx为数字,每个HUSRxxxx为8192B,每一个HUSRxxxx都具有头部和校验和,总共有多少个HUSRxxxx取决于用户区的缺陷数量。
Maxtor硬盘中含有校准数据的模块是不可替代的,校准数据用于磁头读/写磁盘表面。如果使用其他硬盘的校准数据来替代,那么至少用户区的数据就会无法读取。
校准数据的重要性随着硬盘数据密度的增长而增长。例如,可以通过热交换修复ATNENA系列的硬盘,但是却不能通过热交换修复N40P或CALYPSO系列的硬盘,这是由于用于磁头读/写定位的自校准参数可能使定位的误差超过2~3个磁道的距离。
如果译码表损坏,那么在载入LDR时,就不会使用固件区译码表来读取校准模块。因此,如果使用了其他硬盘的校准模块进行代换,就不能再写回它们了。
执行自校准重新计算自校准数据可以帮助修复硬盘,但是不能用于数据恢复,因为重新计算后的校准数据不会与原来的相一致。
迈拓硬盘主服务区的固件叫“Program A”,一般习惯称它为“A区”。
在属系为N40P、CALYPSO、SABRE、FALCON的硬盘中,厂家又使用了工厂备用服务区,这个工厂备用服务区被称为“Program C”,习惯上也称它为“C区”。
但不是所有N40P属系的硬盘都有C区固件,如果N40P属系的硬盘存在95H号模块,说明这个硬盘没有C区。不过有一个特殊的情况,如果在一个具有C区的N40P硬盘上加载了一个创建自没有C区的硬盘的LDR以后,那么在模块列表中会出现95H号模块,打开这个模块,会发现它是空的,这样的N40P硬盘,是具有C区的。而CALYPSO、SABRE、FALCON属系的硬盘全部具有C区。
N40P属系硬盘C区的固件版本号类似于“NCRxxxx0”,CALYPSO属系硬盘C区的固件版本号类似于“YCRxxxx0”,注意到第二个字母都是“C”,而只有FALCON属系的硬盘比较特殊,它的C区的固件版本号类似于“RDMxxx0”,第二个字母是“D”,因此,FALCON属系硬盘的工厂备用服务区也被称为“D区”。
C区是厂家用来在生产过程中创建主服务区以及隐藏缺陷扇区的,在C区中包含了该硬盘的部分原始模块,它的结构与主服务区类似,但是功能与模块内容是有区别的,所以直接把C区的模块复制到A区使用并不一定能使硬盘完全正常。
而在2F、4R、6L等型号的迈拓硬盘中,除了A区以外,还有一个“B区”。B区的功能和C区功能是一样,也是工厂备份区,不过它的固件模块大多数和A区的能够通用,所以在B区里生成的LDR实际上就是A区的LDR,这一点和C区不太一样。
一个具有C区的硬盘在引导过程中,主轴电机启转后,引导ROM首先从A区读取模块中的微程序以及译码器,并检查它们的结构状态,如果它们的结构无效或者无法读取,引导ROM便转向C区装载备用固件。也就是说,当主服务区的微程序模块或者译码器存在异常,引导ROM就去加载备用固件区。
那么在修复迈拓硬盘的固件时,如何进入C区呢?有两个办法:
①将硬盘跳线设置为安全模式,使用专用的C区LDR程序引导硬盘进入到C区。
这种方法适用于无法从A区正常引导的硬盘。
②在PC-3000程序的“Utility status”对话框中,选择“Write all module copies”,然后在Module viewing中打开18H号模块,并修改该模块的前两个字节为任意字符,之后回写模块并存盘,最后重新加电就能够进入硬盘的C区。
这种方法适用于可从A区完整引导的硬盘。
前面提到过,C区是厂家用来在生产过程中创建主服务区以及隐藏缺陷扇区的,所以工厂在给硬盘做Self-Test(SF)的过程中,C区的固件起着非常重要的作用。如果迈拓硬盘损坏严重,我们可以尝试从C区启动Self-Test程序,就有可能对故障硬盘进行修复。
所以C区在硬盘维修中还是比较有用的,但对于数据恢复来说,意义就没有那么大了。
不过这个C区的存在,给我们提供了一个判断硬盘主磁头是否损坏的方法,那就是在A区加载LDR后,如果不能进入主菜单,可以尝试加载C区的LDR,如果能正常加载C区的LDR进入主菜单操作,并且固件中没有什么重要模块损坏,那么就能确认硬盘的主磁头没有故障,硬盘的故障就可能是由于A区固件不正确或硬盘的工作环境不正确所引起的。这时如果想修复这块硬盘,可以尝试启动C区的SF去修复A区固件。
注意:做过SF的硬盘,数据将全部丢失。
备份固件是最基本的操作之一,一般对于固件出错的迈拓硬盘,先加一个匹配的LDR文件,认盘后把故障盘的固件备份出来,以备不时之需。
备份固件的方法很简单,在PC-3000 UDMA的迈拓程序里选择“Tests”→“Service information”→“Work with service area”→“Reading modules”进行固件的模块备份,如图13-9所示。
选中所有的模块,并给硬盘的固件选择一个备份的路径,如图13-10所示。
路径选择好后单击“OK”按钮,所有模块就备份到我们指定的路径下了,如图13-11所示。
备份完后我们可以到指定的路径下看看备份出来的模块,如图13-12所示。
为了知道硬盘固件中的哪些模块损坏了,可以使用PC-3000 UDMA的模块检测功能。
选择“Tests”→“Service information”→“Work with service area”→“SA structure test”进行模块检测,如图13-13所示。
模块检测的过程如图13-14所示。
模块检测完之后会生成一份报告,从报告中就可以看到是哪些模块出错了。该硬盘的检测报告如图13-15所示。
修复迈拓硬盘损坏的固件有多种方法,下面简单介绍几种:
(1)用同型号硬盘的固件替换
对故障盘做完固件检测后,PC-3000 UDMA会给出一个检测报告,告诉我们哪些模块损坏了。如果损坏的模块是可替换的,那么就可以从同型号的无故障硬盘中备份出这些模块,然后再写入故障盘中替换损坏的模块即可。
(2)用其他磁头的固件替换
很多迈拓硬盘都有多个磁头映射,在每个磁头上都有一份固件。如果主磁头的固件损坏了,可以考虑用其他磁头上的固件替换主磁头的固件。
(3)用备份固件区的固件替换
前面我们提到过迈拓硬盘的A区、B区、C区的固件,A区的某些模块损坏了,也可以考虑用B区或者C区的模块替换。
(4)用工具修复
迈拓硬盘的很多模块是不能用替换法进行替换的,对于这样的模块,只能采用修复法了。先把损坏的模块备份出来,然后用MRT等工具进行修复,如果能修复好,再写回故障盘就可以了。
另外,如果对模块的结构比较熟悉,还可以用WinHex编辑并修改模块的内容,修改正确后,再写回故障盘。