硬盘缺陷探秘
硬 盘是目前PC 系统中最主要的存储设备,同时硬盘是 PC 系统中出故障率最高的部件。用户在使用硬盘过程中,硬盘出现故障怎么办呢?如果还在质保期内,当然是 尽量找到销售商要求保修。但现在大多数 IDE 硬盘质保期只有一年,而大多数用户都希望一个硬盘能使用三年以上。如果质保期过后硬盘出了故障,就得考虑更换 或对它进行修理。
 笔者这几年来一直从事硬盘维修工作,经常与国内外的同行交流,查阅过大量的外文专业资料,研究使用过多种专业的硬盘修复 工具,成功修复了近万个硬盘。在这里,笔者与读者探讨一些硬盘缺陷及其修复原理,同时介绍并解释一些专业修复硬盘软件中常用到的概念。但笔者暂不探讨在各 种操作系统下硬盘中的数据结构问题及数据恢复问题,而是直接探讨硬盘本身的缺陷问题。
一、缺陷的分类
如果经检测发现某个硬盘不能完全正常工作,则称这个硬盘是“ 有缺陷的硬盘 ” ( Defect Hard Disk )。
根据维修经验,笔者将硬盘的缺陷分为六大类
①坏扇区( Bad   sector ),也称缺陷扇区( Defect sector )
②磁道伺服缺陷( Track Servo defect ) ?
③磁头组件缺陷( Heads assembly defect )
④系统信息错乱( Service information destruction )
⑤电子线路缺陷( The board of electronics defect )
⑥综合性能缺陷( Complex reliability defect )
1.坏扇区(也称缺陷扇区)
指不能被正常访问或不能被正确读写的扇区。一般表现为:高级格式化后发现有“ 坏簇( Bad Clusters );用 SCANDISK 等工具检查发现有 “B” 标记;或用某些检测工具发现有 “ 扇区错误提示 ” 等。
一般每个扇区可以记录512 字节的数据,如果其中任何一个字节不正常,该扇区就属于缺陷扇区。每个扇区除了记录 512 字节的数据外,另外还记录有一些信息:标志信息、校验码、地址信息等,其中任何一部分信息不正常都导致该扇区出现缺陷。
多数专业检测软件在检测过程中发现缺陷时,都有类似的错误信息提示,常见的扇区缺陷主要有几种情况:
① 校验错误( ECC uncorrectable errors ,又称 ECC 错误)。系统每次在往扇区中写数据的同时,都根据这些数据经过一定的算法运算生成一个校验码( ECC=Error Correction Code ),并将这个校验码记录在该扇区的信息区内。以后从这个扇区读取数据时,都会同时读取其校检码,并对数据重新运算以检查结果是否与校检码一致。如 果一致,则认为这个扇区正常,存放的数据正确有效;如果不一致,则认为该扇区出错,这就是校验错误。这是硬盘最主要的缺陷类型。导致这种缺陷的原因主要 有:磁盘表面磁介质损伤、硬盘写功能不正常、校验码的算法差异。
②IDNF错误( sector ID not found ),即扇区标志出错,造成系统在需要读写时找不到相应的扇区。造成这个错误的原因可能是系统参数错乱,导致内部地址转换错乱,系统找不到指定扇 区;也有可能是某个扇区记录的标志信息出错导致系统无法正确辨别扇区。
③AMNF错误( Address Mark Not Found ),即地址信息出错。一般是由于某个扇区记录的地址信息出错,系统在对它访问时发现其地址信息与系统编排的信息不一致。
④坏块标记错误( Bad block mark )。某些软件或病毒程序可以在部分扇区强行写上坏块标记,让系统不使用这些扇区。这种情况严格来说不一定是硬盘本身的缺陷,但想清除这些坏块标记却不容易。
2.磁道伺服缺陷
现在的硬盘大多采用嵌入式伺服,硬盘中每个正常的物理磁道都嵌入有一段或几段信息作为伺服信息,以便磁头在寻道时能准确定位及辨别正确编号的物理磁道。 如果某个物理磁道的伺服信息受损,该物理磁道就可能无法被访问。这就是“ 磁道伺服缺陷 ” 。一般表现为,分区过程非正常中断;格式化过程无法完成;用检测工 具检测时,中途退出或死机,等等。
3.磁头组件缺陷
指硬盘中磁头组件的某部分不正常,造成部分或全部物理磁头无法正常读写的情 况。包括磁头磨损、磁头接触面脏、磁头摆臂变形、音圈受损、磁铁移位等。一般表现为通电后,磁头动作发出的声音明显不正常,硬盘无法被系统BIOS 检测 到;无法分区格式化;格式化后发现从前到后都分布有大量的坏簇,等等。
4.系统信息错乱
每个硬盘内部都有一个系统保留区 (service area ),里面分成若干模块保存有许多参数和程序。硬盘在通电自检时,要调用其中大部分程序和参数。如果能读出那些程序和参数模块,而且校验正常的话, 硬盘就进入准备状态。如果某些模块读不出或校验不正常,则该硬盘就无法进入准备状态。一般表现为, PC 系统的 BIOS 无法检测到该硬盘或检测到该硬盘却无 法对它进行读写操作。如某些系列硬盘的常见问题:美钻二代系列硬盘通电后,磁头响一声,马达停转; Fujitsu   MPG 系列在通电后,磁头正常寻道,但  BIOS 却检测不到;火球系列,系统能正常认出型号,却不能分区格式化; Western Digital 的 EB 、 BB 系列,能被系统检测到,却不能分区格式化,等等。
5.电子线路缺陷
指硬盘的电子线路板中部分线路断路或短路,某些电气元件或IC 芯片损坏等。有部分可以通过观察线路板发现缺陷所在,有些则要通过仪器测量后才能确认缺陷部位。一般表现为硬盘在通电后不能正常起转,或者起转后磁头寻道不正常,等等。
6.综合性能缺陷
有些硬盘在使用过程中部分芯片特性改变;或者有些硬盘受震动后物理结构产生微小变化(如马达主轴受损);或者有些硬盘在设计上存在缺陷…… 最终导致硬盘 稳定性差,或部分性能达不到标准要求。一般表现为,工作时噪音明显增大;读写速度明显太慢;同一系列的硬盘大量出现类似故障;某种故障时有时无等等。
二、厂家处理缺陷的方式
用户在购买硬盘时,一般都通过各种工具检测硬盘没有缺陷后才会购买。而且,在质保期内可以找销售商将硬盘退回厂家修理。那么,厂家如何保证新硬盘不会被检测到缺陷呢?返修的硬盘又如何处理缺陷呢?首先,让我们来认识硬盘工厂的一些基本处理流程:
1.在生产线上装配硬盘的硬件部分,用特别设备往盘片写入伺服信号( Servo write )。
2.将硬盘的系统保留区( service area )格式化,并向系统保留区写入程序模块和参数模块。系统保留区一般位于硬盘 0 物理面的最前面几十个物理磁道。写入的程序模块一般用于硬盘内部管 理,如低级格式化程序、加密解密程序、自监控程序、自动修复程序等等。写入的参数多达近百项:如型号、系列号、容量、口令、生产厂家与生产日期、配件类 型、区域分配表、缺陷表、出错记录、使用时间记录、 S.M.A.R.T 表等等,数据量从几百 KB 到几 MB 不等。有时参数一经写入就不再改变,如型号、系列 号、生产时间等;而有些参数则可以在使用过程中由内部管理程序自动修改,如出错记录、使用时间记录、 S.M.A.R.T 记录等。也有些专业的维修人员可以 借助专业的工具软件,随意读取、修改写入硬盘中的程序模块和参数模块。
3.将所使用的盘片表面按物理地址全面扫描,检查出所有的缺陷磁道和缺 陷扇区,并将这些缺陷磁道和缺陷扇区按实际物理地址记录在永久缺陷列表( P-list : Permanent defect list )中。这个扫描过程非常严格,能把不稳定不可 * 的磁道和扇区也检查出来,视同缺陷一并处理。现在的硬盘密度极高,盘片生产过程再精密也很难完全避 免缺陷磁道或缺陷扇区。一般新硬盘的 P-list 中都有少则数十,多则上万个缺陷记录。 P-list 是保留在系统保留区中,一般用户是无法查看或修改的。 有些专业的维修人员借助专业的工具软件,可以查看或修改大部分硬盘中的 P-list 。
4.系统调用内部低级格式化程序,根据相应的内部参数进 行内部低级格式化。在内部低级格式化过程中,对所有的磁道和扇区进行编号、信息重写、清零等工作。在编号时,采用跳过( skipped )的方法忽略掉记录 在 P-list 中的缺陷磁道和缺陷扇区,保证以后用户不会也不能使用到那些缺陷磁道和缺陷扇区。因此,新硬盘在出售时是无法被检测到缺陷的。如果是返修的 硬盘,一般就在厂家特定的维修部门进行检测维修。
小知识:什么是硬盘的磁道和扇区?磁道是磁盘一个面上的单个数据存储圆圈。如果将磁道作为一个存 储单元,从数据管理效率来看实在是太低了,因此,磁道被分成若干编上号的区域,称之为扇区。这些扇区代表了磁道的分段(如图)。在PC 系统中,通过标准格 式化的程序产生的扇区容量都为 512 字节。这里大家需注意的是 “ 扇区 ” 与 “ 簇 ” 的关系, “ 簇 ” 是操作系统在读或写一个文件时能处理的最小磁盘单元,一个簇 等于一个或多个扇区。
三、硬盘缺陷的处理
如果不在硬盘工厂中,对普通用户或维修人员来说,又如何处理硬盘的缺陷呢?前面我们把硬盘的缺陷分为六大类,不同类型的缺陷用不同的处理方法。
1.对于综合性能缺陷,一般涉及到稳定性问题,用户随时有丢失数据的危险,可以说是 “ 用之担惊,弃之可惜 ” 。维修人员很难从根本上解决问题,建议用户还是趁早更换硬盘。
2.对于磁头组件缺陷,解决办法是更换磁头组件,这对设备及环境要求较高,维修成本也很高。除非是要求恢复其中的数据,否则不值得进行修复。有条件的维修公司可以在百级净化室中更换硬盘的磁头组件,对数据进行拯救。
3.对于线路缺陷,一般要求维修人员有电子线路基础,要有测试线路的经验和焊接芯片的设备,当然还要有必需的配件以备更换。目前许多专业维修硬盘的公司都有条件解决这类缺陷。对普通用户而言,最简单的判别和解决办法是找一个相同的正常线路板换上试试。
4.对于系统信息错乱,需要有专业的工具软件才能解决。首先要找个与待修硬盘参数完全相同的正常硬盘,读出其内部所有模块并保存下来;检查待修硬盘的系 统结构,查到出错的模块,并将正常模块的参数重新写入。笔者用这个方法成功地修复了数以千计有这种缺陷类型的硬盘,而且一般不会破坏原有数据。要想写某系 列硬盘的系统信息,相应的工具软件必须有严格针对性;该硬盘的 CPU 专用指令集;该硬盘的 Firmware 结构;内部管理程序和参数模块结构。一般只有硬 盘厂家才能编写这样的专业工具软件,而且视为绝密技术,不向外界提供。但也有一些专业的硬盘研究所研究开发类似的专业工具软件,一般要价很高而且很难买 到。
5.对于伺服缺陷,也要借助于专业工具。相应的专业工具可以通过重写来纠正伺服信息,解决部分磁道伺服缺陷。如果有部分无法纠正,则要对 盘片进行物理磁道扫描找出有伺服缺陷的磁道,添加到 P-list (或另外的专门磁道缺陷列表)中。然后,运行硬盘内部的低级格式化程序。这段程序能自动根 据需要调用相关的参数模块,自动完成硬盘的低格过程,不需要 PC 系统的干预。
坏扇区是最常见的缺陷类型,下面笔者着重论述。
四、坏扇区的修复原理
按“ 三包 ” 规定,如果硬盘在质保期内出现缺陷,商家应该为用户更换或修理。现在大容量的硬盘出现一个坏扇区的概率实在很大,如果全部送修的话,硬盘商家 就要为售后服务忙碌不已了。很多硬盘商家都说,硬盘出现少量坏扇区往往是病毒作怪或某些软件造成的,不是真正的坏扇区,只要运行硬盘厂家提供的某些软件, 就可以纠正了。到底是怎么回事呢?从前面对坏扇区的说明来看,坏扇区有多种可能的原因,修复的方法也有几种:
1.通过重写校验码、标志信息等 可以纠正一部分坏扇区。现在硬盘厂家都公开提供有一些基本的硬盘维护工具,如各种版本的 DM 、 POWERMAX 、 DLGDIAG 等,其中都包括有这样的功 能项: Zero fill (零填充)或 Lowlevel format (低级格式化)。进行这两项功能都会对硬盘的数据进行清零,并重写每个扇区的校验码和标志信息。如果不是磁盘表面介质损伤的话,大部分的坏扇 区可以纠正为正常状态。这就是常听说的: “ 逻辑坏扇区可以修复 ” 的道理。
2.调用自动修复机制替换坏扇区。为了减少硬盘返修的概率,硬盘厂商 在硬盘内部设计了一个自动修复机制 ?Automatic Reallcation 或 Automatic Reassign? 。现在生产的硬盘都有这样的功能:在对硬盘的读写过程中,如果发现一个坏扇区,则由内部管理程序自动分配一个备用扇区来替换该扇区,并 将该扇区物理位置及其替换情况记录在 G-list (增长缺陷表, Grown defects list? 中。这样一来,少量的坏扇区有可能在使用过程中被自动替换掉了,对用户的使用没有太大的影响。也有一些硬盘自动修复机制的激发条件要严格一些, 需要运行某些软件来检测判断坏扇区,并发出相应指令激发自动修复功能。比如常用的 Lformat (低格) ?DM 中的 Zero fill , Norton 中的 Wipeinfo 和校正工具,西数工具包中的 wddiag , IBM 的 DFT 中的 Erase ,还有一些半专业工具如:  HDDspeed 、 MHDD 、 HDDL 、 HDDutility 等(大家可以上网搜索下载)。这些工具之所以能在运行过后消除了一些坏扇区,很重要的原因就 是这些工具可以在检测到坏扇区时激发自动修复机制。如果读者能查看 G-list 就知道,这些 “ 修复工具 ” 运行前后, G-list 记录有可能增加一定数量。 如:用 HDDspeed 可以查看所有 Quantum Fireball 系列的 P-list 和 G-list ; MHDD 可以查看 IBM 和 FUJITSU 的 P-list 和 G-list 。
当然,G- list 的记录不会无限制,所有硬盘的 G-list 都会限定在一定数量范围内。如火球系列限度是 500 条,美钻二代的限度是 636 条,西数 BB 的限度是  508 条,等等。超过限度,自动修复机制就不能再起作用。这就是为何少量的坏扇区可以通过上述工具修复,而坏扇区多了不能通过这些工具修复。
3.用专业软件将缺陷扇区记录在 P-list 中,并进行内部低级格式化。用户在使用硬盘时,是不能按物理地址模式来访问硬盘的。而是按逻辑地址模式来访 问。硬盘在通电自检时,系统会从系统保留区读取一些特定参数(与内部低级格式化时调用的参数有密切关系)存在缓冲区里,用作物理地址与逻辑地址之间转换的 依据。有些专业软件可以将检测到的坏扇区的逻辑地址转换为对应的物理地址,直接记录在 P-list 中,然后调用内部低级格式化程序进行低级格式化。这样可 以不受 G-list 的限制,能修复大量的坏扇区,达到厂家修复的效果。
五、关于“ 坏道 ” 的一点补充
“坏道( Bad track ) ” 这个概念源于十多年前小容量硬盘(如 ST506 接口、 100MB 以下)。当时的硬盘内部没有什么系统保留区,也就没有 P-list 或 G- list 。出厂前,厂家就扫描硬盘中存在坏扇区的磁道,并将其位置记录在一张小表格中,贴在硬盘外壳上,注明 “Bad track list” ,即常说的 “ 坏道表 ” 。而 “ 坏道表 ” 上就列出某磁头某柱面的磁道是坏磁道,这就是我们常听人说的 “ 坏道 ” 。当时所有的硬盘在第一次使用前都要求 做低级格式化( Low level format ,简称 “ 低格 ” ),在使用过程中也可以根据需要做低级格式化。在对这个硬盘进行低级格式化前(如用 ADM 、低版本 DM 、早期主板中自带的低格 工具等),要将坏道表中记录都填入,或用工具自动扫描所有坏道,然后才进行低级格式化过程。低格过程中,低格程序对所有磁道按一定的规律进行编号,同时将 前面记录或扫描到的坏道排除在外,即 “ 跳过( Skipped ) ” 那些位置,对用户来说可以算是 “ 修好 ” 了 “ 坏道 ” 。而如果哪个用户轻易对硬盘进行低格,却 没有登记坏道,那么低格会令以前曾 “ 跳过 ” 的坏道一个个又重新显现出来,这就是为什么当时人们常说低格会令硬盘增加坏道的原因。
那么,现在笔 者为什么不用“ 坏道 ” 概念而用 “ 缺陷 ” 概念呢?以前的老硬盘,通过低格来修复,只要某磁道中出现一个坏扇区,该磁道就算 “ 坏磁道( Bad Track ) ” ,修复时就整个磁道所有扇区一起 “ 跳过( skipped ) ” 。所以,坏磁道和坏扇区没有区别开来,一起被称为 “ 坏道 ” 也还算贴切。而现在的 硬盘,每个磁道划分为数百上千个扇区,不能因为有一个坏扇区就丢掉整个磁道。而且有些硬盘出厂前 P-list 就记录数千个坏扇区,如果丢掉数千个磁道(意 味道要丢掉数 GB 的空间)就太浪费了。而现在的硬盘不同的缺陷有不同的表现,不同的原因,修复方法也各不相同。如果继续用 “ 坏磁道 ” 或 “ 坏道 ” 来概括多种 缺陷,很明显词不达意。

六、Linux 检测硬盘坏道 (badblocks)
badblocks

功能说明:检查磁盘装置中损坏的区块。

语法:badblocks [-svw][-b ][-o ][ 磁盘装置 ][ 磁盘区块数 ][ 启始区块 ]

补充说明:执行指令时须指定所要检查的磁盘装置,及此装置的磁盘区块数。

参数:
-b 指定磁盘的区块大小,单位为字节。
-o 将检查的结果写入指定的输出文件。
-s 在检查时显示进度。
-v 执行时显示详细的信息。
-w 在检查时,执行写入测试。
[磁盘装置 ]  指定要检查的磁盘装置。
[磁盘区块数 ]  指定磁盘装置的区块总数。
[启始区块 ]  指定要从哪个区块开始检查。
badblocks 检测磁盘坏块
1)$badblocks -s //显示进度  -v // 显示执行详细情况  /dev/sda1

2)读写方式检测 未挂载的磁盘设备或分区

$badblocks -s //显示进度  -w // 以写去检测  -v // 显示执行详细情况  /dev/sda2



七、Linux 检测硬盘坏道 (Smart ctrl)
利用硬盘的S.M.A.R.T. 功能来做。
简单用法:
1、 smartctl -a  <device>          检查该设备是否已经打开 SMART 技术。
2、 smartctl -s on <device>     如果没有打开 SMART 技术,使用该命令打开 SMART 技术。
3、 smartctl -t short <device>     后台检测硬盘,消耗时间短;
后台检测硬盘,消耗时间长;
前台检测硬盘,消耗时间短;
前台检测硬盘,消耗时间长。
4、 smartctl -X <device>   中断后台检测硬盘。
5、 smartctl -l selftest <device>   显示硬盘检测日志。
6、 smartctl -l error <device>  显示硬盘错误汇总。

八、 Linux检测硬盘坏道 ( badtrk )

badtrk -f/dev/rhd0a 
屏幕显示菜单选项 
显示当前磁道表 
扫描硬盘(可以选择只读方式,也可选破坏方式) 
按柱面/ 磁头数在当前坏道表中增加一些记录项 
按扇区数在当前坏道表中增加一些记录 
从当前坏道表中删除单个记录项 
从坏道表中删除全部记录项 
-e 这个选项在硬盘安装过程中使用。它可以用来修改坏道表的大小。当在已经安装好的系统中使用它时,要特别当心。因为坏道表的大小发生变化时,则要对硬盘的空间重新划分,将破坏硬盘上的内容。 
例如: 
badtrk -e 
屏幕显示:This device contains a valid division table.Additional 
(non-root)filesystems can be preserve across this reinstallation. 
If you wish to be able to preserve these file systems lager, 
Your must not change the current limit of the bad track table 
Which is n bad track.Do you wish to leave it unchanged?(y/n): 
如果回答n ,将会改变坏道表的大小。那么随之而来的 divvy 表等都会遭到破坏,甚至需要重装系统。非根文件系统的数据,可以用后备形式加以保存。 
-m max max是一个十进制数值,这个选项的作用是设置最大坏道数。在 Unix 系统安装过程中,坏道表中的坏道数是允许设置的。一数默认为 15 条磁道。 -m 选项通常与 -e 一起使用,例如: 
badtrk -e -m 15 
-s qtdn 选项 s 表示要进行硬盘扫描,找出坏磁道,并将它放在坏道表中。 
Qtdn分别是四个子选项: 
   Q 快速扫描 
t   完全扫描 
d   破坏性扫描(硬盘原有数据破坏) 
n   非破坏性扫描(保持硬盘原有数据) 
-v  它与 -e 选项一起使用,作用是在硬盘扫描过程中,屏幕显示信息,提示硬盘已经扫描了多少。 
badtrk 命令必须在单用户方式下使用。这个命令只适用于标准硬盘控制器,它不能在装有 SCSI 或 IDA 控制器的系统上使用。如果破损的位置出现在引导块中,或 Unix 开始的位置上,硬盘和系统就需要重新安装。 

系统在正常运行时,屏幕突然显示如下错误信息,并不断重复显示: 

Warrning:wd0:Error fixed disk dev 
1/42,block=5160,cmd=0x00000020 
status=0x00005940,sector=122340, 
cylinder/heah=477/0

---- 分析处理 : 这种现象一般是硬盘中出现坏块而引起系统报警。在超级用户下执行 badtrk 命令,选择 “2 、 scan   disk” 选项,再选择 “1 、  Scanentire unix partition” 选项中的 “1 、 quickscan” 选项,非破坏性扫描整个 unix  分区,找出硬盘中坏块的位置。扫描结束后,记下硬盘坏块的位置 (Cylinder/Head) ,选择 “3 、 Add entries to current bad track table by Cylinder/Head number” 选项,按照系统提示的格式输入硬盘坏块所在的位置 (Cylinder/Head number) 。所有坏块都输入完后按 Q 退出;屏幕显示:

---- Do you want to update this device with the new table(Y/N)?

---- 选择 Y ;屏幕显示:

---- Do you want to salvage any valid data on the bad tracks(Y/N)?

---- 选择 Y ;结束后,系统返回到 UNIX 超级用户下,屏幕上将不再显示硬盘的报警信息。