4.7 用软件方法修复Maxtor驱动器
本节介绍软件修复Maxtor驱动器的方法。
4.7.1 诊断固件区故障
向固件区写入错误的固件信息会导致驱动器发生故障,还可能导致电子或机械部件出现问题。此类问题的诊断非常复杂,因为事实上由电子故障和固件区缺陷导致的驱动器行为与由固件模块错误导致的驱动器行为是相同的。
固件区故障可能有以下表现。
驱动器识别正确,但是在使用LBA地址试图从磁盘表面读取数据时,每个扇区都会产生错误(类似于设置了密码的情况)。
驱动器被识别成工厂别名,如“Maxtor ATHENA”。
驱动器电机启动,磁头从停泊区移走,但是不能报告就绪(挂起)。
事实上,出现以上情况时,驱动器的工厂模式命令将不会工作(除CALIPSO属系)。为转换驱动器至工厂模式可启动的状态,必须首先使用LDR文件来启动它,方法有如下两种。
1.不设置安全模式跳线启动驱动器
这种方法在不设置安全模式跳线、PC3000启动时能读出驱动器工厂别名的情况下起作用,其本质在于只加载了部分LDR文件模块。这些模块必须与驱动器本身的模块严格一致,其步骤如下。
第1步 打开驱动器电源,运行pcmx_dsp.exe或pcmx_pkr.exe工具。
第2步 在菜单中选择加载LDR文件命令。
第3步 选择“Modules loader”(加载模块)模式加载LDR文件。如果加载成功,驱动器就可以对固件区进行操作了。
该方法与将驱动器转换至安全模式相比有一个不同之处在于存在这样一个事实:驱动器启动时可以从固件区加载缺陷表和适配参数,在安全模式下就做不到这一点。但如果重要性为A的模块损坏,则此方法无效。
2.使用安全模式跳线启动驱动器
使用安全模式设置启动驱动器,可以看到驱动器的工厂别名。这种方式推荐在驱动器启动时挂起或者不设置安全模式就无法启动的情况下使用。
第1步 将跳线设为安全模式。
第2步 打开驱动器电源,运行pcmx_dsp.exe或pcmx_pkr.exe工具。
第3步 如果是对ROMULUS DSP或者Poker驱动器进行操作,则需要运行从SA初始化命令。
第4步 在菜单模式中选择加载LDR文件选项。
第5步 在加载LDR文件时选择“Load ROM and modules”(加载ROM和模块)方式。如果加载成功,则驱动器的马达就会启动并报告准备就绪。
第6步 对于ROMULUS DSP驱动器,有时需要执行程序启动时禁止重启命令。
第7步 在模式菜单中选择标准模式。进入该模式时如果出现加载模块错误的提示信息,说明加载的LDR文件不合适,导致加载RAM复本时驱动器挂起或者电子/机械设备出现问题。
在LDR文件的帮助下启动驱动器后,为了检测模块状态,可以运行检查磁盘固件结构命令,并对照固件表仔细研究报告的内容。如果报告中包含模块头错误,应使用相应的方法进行修复。
在修复模块之前需要确保固件区扇区写入功能正常,可以通过运行固件区写测试命令来验证写入的正确性。因为通过LDR文件启动驱动器时,固件执行的是不完整的初始化,会导致操作出错。这一测试包括两部分,分别是从模块PN=1EH加载适配数据以及向固件区未使用的名为“SWAP1”的部分的一个扇区写入一些随机选择的内容以测试固件区的写入能力。测试成功将显示信息“Record offser: 0”,表示在固件区正确地进行了写操作。
现在来考虑测试时可能出现的问题。如果模块PN=1EH损坏,那么加载适配数据的程序就会因出错而中止,这意味着想正确覆写固件区是不可能的。如果写入发生偏移,也不可能对固件进行操作,因为这在加载适配数据阶段就会导致驱动器出现故障。
要特别注意,在向驱动器写入任何数据之前应保存所有模块。之所以这样要求,是因为覆写固件区会导致驱动器发生无法确定的情况,也就是说,如果适配数据有问题,一个模块的内容就可能被另一个模块覆盖,如果没有保存固件数据,就会导致不可恢复的固件数据丢失。
4.7.2 自动修复模块头
Maxtor驱动器的一个经常发生的故障是固件模块数据错误,这通常是由于驱动器在读/写操作中发生错误引起的。马达/转接器间失去联系、磁头故障、磁碟表面划伤或者更常出现的突然掉电等情况都会导致这种错误的发生,且有一个共同的特点——译码表模块损坏。
模块损坏通常只限于标识字符串错误,而校验和仍然正确。要修复这种模块(例如P-List),只需写入正确的模块头并重新计算校验和就足够了。P-List(PN=18H)、G-List(PN=1BH)和DMCS(PN=1DH)模块最容易出现这种问题。如果它们被损坏,其标识字符串就会分别变成NO_PLIST、NO_GLIST和NO_DMCS。U_LIST00(PN=37H)模块也会发生类似的错误,不过非常少见。如果此模块头正确,不推荐对其使用自动修复功能。
尽管事实上几乎所有的模块都有复本,却不能使用这些复本来恢复原始模块,因为它们同样也被损坏了。不过,虽然模块的内容可能被损坏,但校验和几乎总是正确的。
为修复这些模块头损坏的模块,可以依次使用命令“Firmware data”(固件数据)、“Work with firmware zone”(固件区操作)、“Restore modules”(修复模块)。按【Enter】键后会显示DMCS、U_LIST、AT_POL(G-List)、AT_PDL(P-List)模块的对应选项,如图4-32所示。如果意外选择了一个实际上没有损坏的模块的修复命令,也不会对它产生影响。
图4-32 选择模块进行修复
修复成功的反馈信息如图4-33所示。
图4-33 模块修复成功提示
通过前面的介绍相信读者可以明白,修复模块命令只修复模块头并重新计算校验和,写入的模块内容保持和从驱动器读出的一样,因此,如果存储在模块中的数据不正确,驱动器在加载该模块将会时挂起,“Module repairing”(模块修复)命令不起任何作用,也不能控制写过程,也就是说,如果驱动器在写模块时发生错误或者写错位置,将不会返回任何出错信息,而且修复模块命令在向固件区写入模块时如果出错,可能会将固件区的重要数据擦掉。因此,最好预先保存模块,并在启动该命令前创建一个LDR文件。
4.7.3 重建译码表
在译码表包含错误数据或者有不可读的扇区时需要重建译码表。如果Pivot Defects Table(模块PN=33H)完整无缺,没有被修改过,就可以在其基础上重建译码表。
使用“Translator regeneration”(译码表重建)命令启动译码表重建工作。这个操作可能花费很长时间,这取决于pivot表中有多少个缺陷记录。重建的译码表不包括服务区重定位缺陷,因此如果固件区存在重定位缺陷,操作就会被阻止。RZEBL模块中的所有隐藏磁道都将转入AT_PDL(P-List)。从理论上说,原始的译码表和重建的译码表之间会有差异,但是在实践中笔者还没有遇到过这种情况。