1.7 硬盘缺陷
在老式硬盘中,采用的都是比较古老的CHS结构体系。这是因为当时硬盘的容量非常小,自然就直接采用了与软盘类似的结构。这种结构的硬盘,盘片的每一条磁道都具有相同的扇区数,由此产生了所谓“3D参数”(Disk Geometry),即磁头数(Heads)、柱面数(Cylinders)、扇区数(Sectors)及相应的3D寻址方式。其中,磁头数表示硬盘总共有多少个磁头,也就是使用了多少个盘面,最大值为255(用8个二进制位存储);柱面数表示硬盘每一面盘片上有多少条磁道,最大值为1 023(用10个二进制位存储);扇区数表示每一条磁道上有多少个扇区,最大值为63(用6个二进制位存储);扇区容量一般是512字节。
所以,磁盘最大容量为:
255×1023×63×512/1048576=8024MB(1MB=1048576Byte)
或按硬盘厂商常用的单位计算,最大容量为:
255×1023×63×512/1000000=8414MB(1MB=1000000Byte)
由于在老式硬盘的CHS结构体系中,每个磁道的扇区数相等,外道的记录密度远低于内道,因此会浪费很多磁盘空间。为了进一步提高硬盘容量,现在硬盘厂商都改用(近似)等密度结构的方式生产硬盘。也就是说,每个扇区的磁道长度近似相等,外道的扇区比内道多。这两种方式的对比如图1-20所示。
图1-20 扇区划分的两种方式
采用这种结构后,硬盘不再具有实际的3D参数,寻址方式也改为线性寻址,即以扇区为单位寻址。为与使用3D寻址的软件(如使用BIOS Int 13H接口的软件)兼容,厂商通常会在硬盘控制器内部安装一个地址翻译器,负责将新的线性参数翻译成老式的3D参数。这也是现在硬盘的3D参数可以有多种选择的原因。
在逻辑0扇区之前还有物理0扇区。从物理0扇区到逻辑0扇区是硬盘的系统服务区(Service Area, SA),可用来存储硬盘的各种信息、参数及一些控制程序,有些硬盘的Firmware(固件)也存放在系统服务区。这样虽然可以进一步简化生产流程,加快生产速度,降低生产成本,但是从另一方面看,却又大大增加了硬盘出现致命性损坏的几率,并且缩短了硬盘的使用寿命。例如,十几年前生产的200MB容量的硬盘和8年前生产的1.xGB容量的硬盘到现在还能非常好地工作,别说是坏道,运行时几乎连噪音都没有,但是后来出现的4.3GB、6.4GB、10GB、20GB容量的硬盘,使用年限就短一些,现在的高密度硬盘,其寿命就更难说了。
新式硬盘也不是简单地采用等密度结构生产的硬盘,而是对硬盘盘面进行区域划分,且每个区域的参数都不一样。这些参数可通过专用工具(如PC3000)查看。例如,IBM的桌面之星40GV和75GXP硬盘将盘面划分为15个区域,各个区域的参数如表1-11所示。
表1-11 IBM桌面之星40GV和75GXP盘面划分
这么复杂的系统,在使用一段时间后,难免会出现各种各样的故障。一般来说,硬盘的损坏按大类可以分为硬损坏和软损坏。硬损坏包括磁头组件损坏、控制电路损坏、综合性损坏和扇区物理性损坏4种,软损坏包括磁道伺服信息出错、系统服务区出错和扇区逻辑错误等。
磁道伺服信息出错,是指因为某个物理磁道的伺服信息受损或失效,导致部分物理磁道无法被访问。伺服信息可以散布在磁道中,也可以集中在柱面内,如图1-21所示。
图1-21 伺服信息的分布方式
系统服务区出错,是指硬盘的系统服务区在通电自检时读不出某些模块,或者模块信息校验不正常,导致硬盘无法进入就绪状态。
扇区逻辑错误会导致扇区失效,具体如下。
UNC校验错误:ECC错误和CRC错误。
IDNF错误:扇区标志错误。
AMNF错误:地址标记错误或磁道地址没有被发现。
BBK错误:坏块标记错误。
一般来说,硬盘的软损坏是可以修复的,很多硬盘厂商发布的硬盘管理和维护软件都具备修复硬盘软损坏的能力。像扇区逻辑错误这样的问题,即使是一般的低级格式化软件,也是完全可以胜任的。不过在所有的软损坏当中,系统服务区出错属于比较难以修复的种类,因为即使是同一家厂商生产的同一种型号的硬盘,系统服务区也不一定相同,而且硬盘厂商一般不会公开自己产品的系统服务区的内容和读取的指令代码。目前只有IBM和日立硬盘的系统服务区有公开的修复程序。日立的DFT和IBM的DDD-SI软件对系统服务区出错的修复成功率还是很高的。这两款软件都是由硬盘厂商发布的,有非常强大的功能,效果和可靠性比第三方软件要好,当然,它们只分别对IBM和日立的产品有效。
其实即使是刚刚出厂的全新硬盘,其盘片上也不可能没有瑕疵。由于磁盘盘片非常精密,对生产环境和移动都有非常高的要求,即使是一粒灰尘、一次很轻微的碰撞,都可能导致几个到几百个坏扇区的产生。所以,一般的,120GB容量的全新硬盘,其盘片上有几千个坏扇区也是很正常的,只不过硬盘厂商会使用专门的设备去扫描盘片,把那些坏扇区和磁介质不稳定的扇区都记录下来,做成一个硬盘缺陷列表(通常称为P-List),并将它写进系统保留区,然后通过控制程序将这些扇区屏蔽,使硬盘的控制程序在读取硬盘数据的时候不会再去读取这些区域。这样,由于在控制层就已经屏蔽了有问题的扇区,所以用户无论使用哪种格式化和分区软件,都不会看到这部分扇区,硬盘看起来就像真的完全没有坏道一样。同时,硬盘里面还有另外一种封闭区域,称为保留容量。这是完全没有问题的区域,只是因为某种原因被封闭起来了。例如,一块硬盘的容量是60GB,而盘片单片容量为40GB,那么由两片盘片构成的硬盘就必须封闭20GB的容量(盘片的生产线都是一定的,厂商为了降低成本,一般只生产一种容量的盘片,所以要通过封闭不同容量的区域来获得不同的实际硬盘容量)。
弄清楚硬盘的生产原理,就很容易理解厂商是如何维修硬盘的了。对于控制电路、磁头等部件的故障,用最简单的替换法,换上新的零件就可以了。对于IC芯片,可以通过重写信息内容或者替换IC芯片等方式修理。对于磁盘盘片的问题,情况会比较复杂。首先,厂商会用专门的仪器或设备对盘片表面按照实际的物理地址重新进行全面扫描,找出所有坏的、不稳定的扇区,形成一个新的硬盘缺陷列表,然后将该列表写进硬盘系统服务区,以替换原来的硬盘缺陷列表,再调用内部低级格式化程序对硬盘进行内部低级格式化。硬盘修复软件会根据新的系统服务区信息,重新对所有的磁道和扇区进行编号、清零,并重写磁道伺服信息和扇区信息,减少扇区的容量则从保留扇区中提取。经过这样的处理,返修的硬盘就又可以像新的硬盘一样使用了。
目前,软件修复硬盘扇区的物理性损坏一般有两种主要方式,分别是反向磁化和修改硬盘缺陷列表。
反向磁化是最先被应用的一种修复硬盘扇区物理性损坏的方式。一般的,硬盘的磁头只能负责读取和写入信号,而读取、写入数据信号所需的电平信号与磁盘表面的磁介质本身是不一样的。而反向磁化就是通过用软件指令迫使磁头产生与磁介质本身相应的高低电平信号,通过多次的往复运动给损坏或者失去磁性的扇区加磁,使这些扇区的磁介质重新获得磁能力,HDD Regenerator是最先采用这种方式的软件。反向磁化最大的缺点是速度慢,对一个磁介质不稳定或失去磁能力的扇区进行磁化,磁头很可能要往复成百上千次。如果硬盘上只有几十个或几百个坏扇区,这种方法或许还可行,但是现今硬盘的容量动辄数百千兆字节(GB)甚至数万亿字节(TB),有上万个坏扇区是很平常的事情,如果再用这种方法去修理,则会大大加快硬盘报废的速度。另外,这些扇区的磁介质本身就不稳定,即使再次被磁化,在一段时间内可以使用,但仍随时有重新失去磁能力的危险,硬盘其实并不稳定。同时,这种方法不能修复物理划伤之类的硬损坏。
对这种硬盘,在需要恢复数据时,一般通过扇区克隆或者镜像工具(如PC3000、MTL、COPR等),将硬盘分区或整个磁盘克隆到正常硬盘上或者做成镜像文件,然后使用手工方式或者软件(常用工具如Runtime、Winhex、R-Studio、UFS Explorer、File Scavenger等)提取数据。
修改硬盘缺陷列表的方式就是对反向磁化的改进,这种方法和上面所介绍的硬盘厂商的维修方法非常相似。由第三方服务商根据厂商公开的技术资料,结合分析和逆向工程,逐步破解厂商的部分指令代码甚至固件,编制出程序软件,实现读取、修改和重写硬盘系统服务区信息的功能。这样,第三方服务商就可以像硬盘厂商一样,对磁盘盘面按照物理地址进行扫描,重新构造缺陷扇区列表,并将该列表写进系统服务区来替换原有的列表。经过这样的软件方法维修的硬盘,从理论上说,与硬盘厂商维修的硬盘是没有差别的。PC3000、MHDD、HRT、效率源等就属于这种工具。