迈拓硬盘虽然已被希捷收购,但由于迈拓曾经的市场占有率非常高,并且迈拓硬盘的固件结构比较复杂,固件包含的模块多、故障率高,所以本书选择迈拓硬盘为例,讲解使用PC-3000 UDMA修复硬盘固件的方法。

识别迈拓硬盘的型号

PC-3000对硬盘的处理需要严格区分型号,所以学会识别硬盘型号是使用PC-3000的第一步。

迈拓硬盘的分类见表13-1所示。

表13-1 迈拓硬盘型号对应表

用PC-3000 UDMA修复迈拓硬盘的固件-数据恢复迷 用PC-3000 UDMA修复迈拓硬盘的固件-数据恢复迷

迈拓硬盘的固件结构

迈拓硬盘固件主要由微程序、模块、校准程序三部分组成,下面分别进行说明。

微程序

迈拓硬盘的微程序在主存储器中运行,微程序可以从三个地方载入:第一,硬盘主处理器的掩模ROM;第二,电路板上的Flash ROM;第三,固件区。

硬盘在正常运转状态下,在进行初始化时会将固件区的程序写入到电路板上。如果由于某些原因不能从固件区启动程序,硬盘就会进入“FAIL(失败)”的状态,这类似“安全模式”状态,硬盘会被检测为属系名。要想脱离“FAIL”状态,应该使用LDR文件引导,将所有微程序(ROM+Overlay)强制写入微处理器中的主存储器(RAM)中。

硬盘微程序的版本标识在硬盘外部的标签上,格式如6Y080L0422011C(MODEL+ HAD+PCBA+UNIQUE)。运行程序菜单“Utility status(程序状态)”就显示模块PN=48(名称为LABLE)中的内容,如图13-7所示。

用PC-3000 UDMA修复迈拓硬盘的固件-数据恢复迷

图13-7 微程序的版本标识

如果不能读取版本模块,那么就不会显示版本信息,而代之以圆点。

模块

迈拓硬盘固件区的数据结构如图13-8所示。

用PC-3000 UDMA修复迈拓硬盘的固件-数据恢复迷

图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时,就不会使用固件区译码表来读取校准模块。因此,如果使用了其他硬盘的校准模块进行代换,就不能再写回它们了。

执行自校准重新计算自校准数据可以帮助修复硬盘,但是不能用于数据恢复,因为重新计算后的校准数据不会与原来的相一致。

迈拓硬盘A区、B区和C区固件

A区、B区和C区介绍

迈拓硬盘主服务区的固件叫“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区

一个具有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区固件的作用

前面提到过,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所示。

用PC-3000 UDMA修复迈拓硬盘的固件-数据恢复迷

图13-9 模块备份菜单

选中所有的模块,并给硬盘的固件选择一个备份的路径,如图13-10所示。

用PC-3000 UDMA修复迈拓硬盘的固件-数据恢复迷

图13-10 选中所有的模块

路径选择好后单击“OK”按钮,所有模块就备份到我们指定的路径下了,如图13-11所示。

用PC-3000 UDMA修复迈拓硬盘的固件-数据恢复迷

图13-11 模块备份中

备份完后我们可以到指定的路径下看看备份出来的模块,如图13-12所示。

用PC-3000 UDMA修复迈拓硬盘的固件-数据恢复迷

图13-12 备份出来的模块

检测固件

为了知道硬盘固件中的哪些模块损坏了,可以使用PC-3000 UDMA的模块检测功能。

选择“Tests”→“Service information”→“Work with service area”→“SA structure test”进行模块检测,如图13-13所示。

用PC-3000 UDMA修复迈拓硬盘的固件-数据恢复迷

图13-13 进行模块检测

模块检测的过程如图13-14所示。

用PC-3000 UDMA修复迈拓硬盘的固件-数据恢复迷

图13-14 模块检测的过程

模块检测完之后会生成一份报告,从报告中就可以看到是哪些模块出错了。该硬盘的检测报告如图13-15所示。

用PC-3000 UDMA修复迈拓硬盘的固件-数据恢复迷

图13-15 检测报告

修复固件

修复迈拓硬盘损坏的固件有多种方法,下面简单介绍几种:

(1)用同型号硬盘的固件替换

对故障盘做完固件检测后,PC-3000 UDMA会给出一个检测报告,告诉我们哪些模块损坏了。如果损坏的模块是可替换的,那么就可以从同型号的无故障硬盘中备份出这些模块,然后再写入故障盘中替换损坏的模块即可。

(2)用其他磁头的固件替换

很多迈拓硬盘都有多个磁头映射,在每个磁头上都有一份固件。如果主磁头的固件损坏了,可以考虑用其他磁头上的固件替换主磁头的固件。

(3)用备份固件区的固件替换

前面我们提到过迈拓硬盘的A区、B区、C区的固件,A区的某些模块损坏了,也可以考虑用B区或者C区的模块替换。

(4)用工具修复

迈拓硬盘的很多模块是不能用替换法进行替换的,对于这样的模块,只能采用修复法了。先把损坏的模块备份出来,然后用MRT等工具进行修复,如果能修复好,再写回故障盘就可以了。

另外,如果对模块的结构比较熟悉,还可以用WinHex编辑并修改模块的内容,修改正确后,再写回故障盘。