- 数据恢复与硬盘修理
- 戴士剑 戴森 房金信编著
- 5434字
- 2020-08-26 22:45:32
1.8 硬盘初始化过程与固件维修基础知识
硬盘电路板上放置了支持硬盘工作的各种电路,包括接口、DSP处理器、ROM、内存(硬盘DSP处理器使用的内部内存,作用与主机内存类似)、信号处理电路和电机驱动电路等。DSP处理器用于控制信号和数据的转换、进行编/解码等操作。ROM中存储了硬盘初始化操作所需的部分程序。ROM可能分为两部分:一部分是集成在DSP内的ROM,这是一定要有的;除了集成在DSP内的ROM,还有扩展ROM,表现为PCB上独立的ROM芯片(可能是EPROM、Flash ROM等)。如果有扩展ROM,则DSP首先从扩展ROM启动。信号处理电路负责对信号进行编/解码和变换。电机驱动电路负责精确控制盘片的转速和进行磁头定位。
正常情况下,硬盘在接通电源之后,都要进行初始化过程,这个过程也称为自检。自检时硬盘都会发出一阵自检声,这些声音的长短和规律视不同品牌而异,但同型号的正常硬盘的自检声是一样的。
自检声是由硬盘内部的磁头寻道及归位动作发出的。为什么硬盘刚通电就需要执行这些动作呢?简单地说,是因为硬盘正在读取记录在盘片中的初始化参数,这些参数就是硬盘的“固件”。由于现在固件的概念用得比较滥,这里姑且约定:DSP使用的微代码,称为程序或微程序;硬盘服务区(有时也称为系统服务区),指的是硬盘上从物理0扇区至逻辑0扇区之间的区域,也就是我们常说的“负磁道”的位置;而固件是没有严格定义的一个词汇,有时候指硬盘内部所有的系统软件和参数,有时候仅指系统服务区内的参数与表格,本书也不加以区分,请读者根据上下文自行判断。以上各部分的位置关系如图1-22所示。
图1-22 微程序、固件等的位置关系
硬盘有一系列基本参数,包括品牌、型号、容量、柱面数、磁头数、每磁道扇区数、系列号、缓存大小、转速、适配数据、区域分配表、S.M.A.R.T值等,这些参数就是固件。其中的一部分会标注在硬盘标签上,有些则只能通过专用软件才能检测出来。这些参数仅仅是初始化参数的一小部分,盘片中记录的初始化参数有数十甚至数百个。重要的是,没有这些参数,硬盘就不能正常工作。
硬盘的DSP处理器在通电后首先运行ROM中的程序(如果有扩展ROM,就从扩展ROM启动;如果没有扩展ROM,就从内部ROM启动),一部分硬盘还会检查各部件的完整性。然后,主轴电机起转,当转速达到预定转速时,磁头开始移动并定位到盘片的服务区,读取存储在硬盘服务区中的微程序和固件。固件在硬盘上的物理位置并不是一定的,完全由硬盘的设计决定。参数以模块的形式表现出来,可能每个参数占用一个模块,也可能几个参数共同占用一个模块。模块的大小也不一样,有些模块只有1字节,有些则达到几十千字节(KB)。参数不是连续存储的,而是各有各的固定位置。同时,也不是所有固件都一定要写在盘片上。一部分硬盘会先将ROM中的系列号与盘片上的系列号进行比较,如果不一致,硬盘会终止初始化工作。如果固件的关键扇区或文件损坏,硬盘就可能出现敲盘、不能被BIOS识别或识别错误等故障。
当所有必需的固件被正常读出后,磁头会定位到硬盘的0柱面、0磁头、1扇区,也就是我们常说的“0道”。一般来说,硬盘的0磁头靠近盘片电机,也就是硬盘的底部,而0道靠近盘片的边缘。硬盘向主机报告就绪后,我们才能对硬盘进行操作。
如果某一项重要参数找不到或出错,启动程序将无法完成正常启动过程,硬盘会进入保护模式,DSP程序结束,无法进入正常的工作状态。在保护模式下,用户可能看不到硬盘的型号与容量等参数,或者无法进行任何读写操作。近来有些系列的硬盘就是因为固件出错而出现类似的问题,如富士通的MPG系列自检声正常却不认盘,迈拓的美钻系列认不出正确型号及自检后停转,西部数据的BB、EB系列能正常认盘却拒绝进行读写操作等。
对一块硬盘来说,并不是所有的空间都用于存储用户的数据信息,有相当一部分空间对用户来说是不可见的,包括系统服务区和备用区(Reserve Area,也称为保留区)。而用户数据、文件系统等,都存储在用户数据区。系统服务区用于存储服务信息,即硬盘的内部程序和一些辅助表格,以保证硬盘能够正常工作。备用区用于替换用户工作区内的故障扇区和磁道。这两个区域在日常使用时是无法访问的,需要在特定模式下通过专用指令进行访问。用户访问的工作区,称为硬盘的逻辑空间,硬盘的容量标签中标注的就是这一部分空间的容量。这一部分空间的容量也是操作系统管理的容量。
而要访问系统服务区,就必须使用相应的指令系统,并在某种条件下进行。一旦进入这个指令系统,我们就可以借助这些技术指令进行很多操作,如读/写系统服务区的扇区信息、获取系统服务区的模块和表格配置图、获取扇区分配表、进行LBA与PCHS(Physical Cylinder Head Sector,物理柱面、磁头、扇区)互换、进行低级格式化、读/写硬盘ROM等,这些都是在通常模式下无法进行的操作。
硬盘是一个复杂的智能系统,要完成复杂的工作,需要很多条件。一个DSP处理系统的工作原理如图1-23所示。
图1-23 DSP处理系统的工作原理
DSP是“Digital Singal Processing”的缩写,使用RISC常采用指令和数据分开的哈佛结构,并采用多线程操作方式,一般用在实时控制系统中,硬盘就是其典型应用之一。DSP的运行需要程序和参数的支持,而程序和参数就存储在ROM和系统服务区中,它们对硬盘的运行来说是必需的。系统服务区的内容可以分为以下几类。
微程序模块(overlay,重载或覆盖,意思是可根据需要加载到内存中运行)。
配置和设置表。
缺陷表(P-List、G-List)。
工作记录表,如自测(SelfScan)、校验(Calibrator)程序的工作结果等。
DSP程序也是分开存储的,其地址空间分为ROM空间和RAM空间,而ROM通常又分为内部ROM和扩展ROM。内部ROM是在硬盘生产过程中写入的固定指令。这部分指令的作用是对DSP进行有限初始化,搜索有效的外部扩展ROM。如果外部扩展ROM存在,则将控制权交给扩展ROM中的程序,或者在检测到安全模式时接受从IDE接口传输的指令,并将控制权交给扩展ROM中的程序,这也是我们能够借助工具操作固件的基础。
外部ROM多采用25P102等串行Flash ROM存储硬盘操作系统的初始化部分。这部分指令的作用是设置DSP的各项参数,从存储介质盘片中加载指令、数据及各种指针、表格,并执行相应的自检和自校准程序,完成后就将相应的寄存器置于就绪(Ready)状态,等待主机指令。
ROM用于存储指令,RAM用于存储数据。由于RAM在断电后内容会丢失,所以RAM中的内容应存储在硬盘服务区中。事实上,ROM虽然在断电后不会丢失内容,但一些意外情况(如温度过高、电源瞬间变化等)也会导致ROM信息丢失或错乱,因此很多硬盘在服务区中会保留ROM的备份,并且其大部分内容也是以overlay的方式存储在磁盘盘片上的,ROM中只有基本的部分。ROM和RAM在盘片的负磁道上采用UBA(Util Block Addressing,用于访问服务区的地址编址)方式分区域存储,并映射0000~7FFF的DSP地址空间。例如,迈拓硬盘固件区主要分为数据区、代码区、缺陷表区、自校区、交换区和保留区,各区域的地址和长度在不同的硬盘中是不一样的,其6E系列的地址空间如下。
数据区:UBA 0000~04B7。
代码区:UBA 04B8~15F7。
缺陷表区:UBA 15F8~2D67。
自校区:UBA 2D68~3A4B。
交换区:UBA 3A4C~472F。
以上每个区域中又有若干子区域,其中最重要的就是ULIST扇区,负责固件模块地址的转换工作。
硬盘微处理器的工作程序包括初始诊断程序、伺服电机旋转控制程序、磁头定位程序、硬盘控制器及缓冲存储器的信息交换程序等,这些程序合称硬盘程序或硬盘系统。在有些型号的硬盘中,工作程序存储在微处理器的内部ROM或外部闪存中,但是对大部分型号的硬盘来说,一部分工作程序存储在磁盘的服务区内,而在电路板的ROM中只存储了初始化程序、定位程序以及从磁盘服务区向内存读取和复制其他程序的工作程序。由于程序是从服务区向微处理器的内存中加载的,而内存又是微处理器的工作地点,因此这些程序只在需要时才会运行,而不需要时就会被其他程序覆盖,所以也可以其称为管理程序或overlay程序。
在服务区内,overlay是以模块的形式存储的,包括模块头部、模块主体以及用于检测该模块完整性的校验区。当overlay加载到内存中时,硬盘微处理器计算其校验值,并将其与模块的检测值进行比较。如果与校验值不一致,就认为该模块已损坏,不能加载到内存中。这也是大多数具有overlay程序的硬盘发生故障的常见原因。通常在出现这种故障时,硬盘是不能够完整地运行的,也就是说,不是所有的overlay程序都能加载到内存之中并参与硬盘的工作。不同的overlay程序出现损坏,会表现出不同形式的故障。例如,硬盘一直处在忙碌(Busy)状态,不能就绪,或者在硬盘的识别过程中,BIOS会将硬盘认成出厂名称,或者虽然能认出硬盘型号,但容量不对,再或者识别出来的硬盘容量没有问题,却不能正常读写硬盘用户区的数据等。
硬盘的配置和设置表包含磁盘空间的逻辑和物理信息。这些表格对于电路板(一个属系的所有型号的硬盘电路板都是统一的)来说是必需的,其目的是让电路板独立地设置到这一属系的具体型号上,也就是说,使电路板正确地选择型号名称、最大LBA值,并正确地指定物理磁头的数量和Zone分配表。
配置表与工作程序一样,也是以模块的形式存储在硬盘的服务区内,同样包括模块头部、模块主体(表格)和校验值。在鉴别硬盘时,配置表以与工作程序相同的方式加载到微处理器的内存之中,并计算其校验值。配置表和工作程序一样,对硬盘的工作是至关重要的。通常情况下,一旦配置表发生损坏,那么硬盘在计算机的BIOS中便无法得到识别和确认,或者在识别过程中显示的硬盘容量、型号、名称及系列号等会出现错误。
目前的技术还不能确保每一片磁盘都没有任何缺陷。载体材料的非单一性、抛光和打磨上的缺陷,以及制作磁层时杂质的介入等因素,都有可能使硬盘的某些区域在读写过程中产生错误。硬盘都有一部分富余容量用于替换工作区中的坏扇区和坏道。在使用了这样一种替换机制后,即使磁盘表面出现了一定数量的缺陷磁道,硬盘的总体容量也不会减少。为了进行这样的替换,硬盘中设置了一个专门的缺陷隐藏程序,叫做“Defect Management”(缺陷管理)。设计该程序的主要目的是发现硬盘中的缺陷区域,并将其放置在一种名为“缺陷表”的专门表格之中,之后,再对逻辑空间向物理空间转换的系统重新进行计算,从而达到隐藏缺陷的目的。
缺陷表是在硬盘厂商的内部试验过程中填写的,厂商发现的所有“坏”扇区序号均在该表之中,这种操作被称为更新(隐藏)缺陷(Update Defect)。这样,当硬盘工作时,就不会访问被隐藏的缺陷扇区,因为它们已经被备用区替换了。所以,新硬盘的用户数据区内是看不到缺陷扇区的。
大部分型号的硬盘都有两个缺陷表,分别称为初始缺陷表(Primary或P-List)和生长缺陷表(Grown或G-List)。初始缺陷表由生产厂商在进行工厂内部检测(SelfScan)的过程中生成。生长缺陷表则不同,它用于记录在硬盘使用过程中所发现的缺陷扇区信息。因此,几乎所有硬盘的用户指令表中都有一个叫做“Assign”的指令,通过该指令,就可以将对坏扇区的访问转向备用区。这一指令被许多检测程序所使用,其中自然也包括厂商推荐的用于修复硬盘坏扇区的程序。在西部数据硬盘中,有一个Data Lifeguard(数据救生)系统,可用于重新指定坏扇区。Data Lifeguard系统可将有缺陷的扇区打上“BAD”(坏)标志,并将用户数据挪到备用区内,以后就由备用扇区代替原来的坏扇区。从隐藏缺陷的类型上讲,这种方法与执行Assign指令一致。富士通、昆腾、迈拓和IBM硬盘可以在“写”的过程中自动隐藏缺陷扇区,也就是说,在将数据写入有缺陷的扇区时,硬盘会自动给缺陷扇区打上“BAD”标志,并将访问指向备用区中用以替换这个坏扇区的扇区,其编号同时被填写到G-List中。
工作记录表包含硬盘生产和运行过程中的一些辅助信息,如检测结果、检测程序运行记录等。在通常情况下,这些表格中的内容并不重要,而且在用户的一般工作状态下,它们的损坏不会影响硬盘的工作。但是,在用户准备对硬盘进行二次使用(刷新),以及执行SelfScan和Calibrator等操作时,就需要使用这些模块了。
一般来说,可以使用两种方法来隐藏有缺陷的扇区,一种是上面介绍的重新指定扇区法(Assign),另一种是忽略缺陷扇区法。重新指定扇区法的示意图如图1-24所示。
图1-24 重新指定扇区法
硬盘厂商隐藏缺陷扇区的方法称为忽略缺陷扇区法。使用这种方法时,缺陷扇区会被忽略,而下一个扇区将被冠以缺陷扇区的序号(以此类推)。这样,原先用户区的最后一个扇区将被移到磁盘的备用区,如图1-25所示。
图1-25 忽略缺陷扇区法
这种隐藏方法会破坏低级格式化的连续性和完整性。LBA向PCHS的转换系统应该考虑坏扇区,并在访问数据时将其忽略。逻辑磁盘空间与物理格式之间的关系可借助一种专用的程序——译码器——来实现。这种专用程序考虑了磁盘的物理格式、区域划分,以及坏扇区与坏磁道已不再工作等因素。所以,忽略缺陷扇区法要求必须对译码表重新进行计算,而且会破坏用户事先写入数据的完整性。正因如此,这种隐藏方法只在硬盘处于一种专门的工作状态时才能使用。
ROM里的程序就是DSP运行的代码,它可以通过反编译进行分析。服务区的内容可以用ROM中的程序读取到内存中运行。DSP内部本身也有ROM和RAM,不过容量都很小,如果程序无法存储,就需要对其进行扩展,扩展后在电路板上就可以看到独立的ROM芯片。有些型号的硬盘只在ROM中保留基本代码,而将真正的引导程序放在硬盘服务区上。由于服务区没有ROM可靠,所以这些硬盘更容易出现问题。
硬盘在正常启动时会与BIOS进行通信,如果启动失败,硬盘中的引导程序就会结束。而处理固件需要通过ROM中的程序来执行,因为只有它才能访问硬盘,所以在处理硬盘固件时,常常需要进行DSP复位。
PC3000能读出硬盘内部的固件信息,以分析每个固件所处的模块是否正常,并且能修正这些参数,将其重新写回盘片中的指定位置,这样就可以把一些因为固件参数错乱而无法正常使用的硬盘恢复到正常状态。另外,服务区也不一定位于盘片的边缘,品牌不同,其位置也不同,而且每个盘片上都有备用服务区。