希捷硬盘的前好后坏故障是数据恢复行业的一个难题,这种故障出现的几率很高,修复耗时并且成功率较低。
相比起希捷硬盘的其他故障,前好后坏故障非常容易判断和辨识,症状是磁盘扫描的时候,从0号扇区开始到某一具体扇区为止都是可以正常读取数据的,但是这一扇区后面的全部扇区都无法正常读取数据。并且扫描这些无法读取的用户扇区时会返回ERR/UNC错误(也就是设备状态灯的ERR灯会亮起,错误状态灯的UNC灯会亮起),有以上两点,我们就可以确定是前好后坏故障。
现在市面上的希捷维修工具基本上都能够解决部分前好后坏问题,但是大家使用多了就会发现,总是还会碰到这些工具无法修复好的前好后坏,这是为什么呢?这是因为前好后坏实际上是分为四种类型的,不同的类型前好后坏解决的方法也是不一样的,所以本文档将深度剖析希捷硬盘前好后坏的原理,知其然知其所以然才能最快地理解定位问题并使用最佳的解决办法。
实际上,希捷硬盘前好后坏的根本原因在于编译器发生了错乱。下面我们来探讨下编译器发生错乱的成因:
我们知道编译器其实是一个地址翻译器。电脑读取硬盘数据时,告诉硬盘需要哪个LBA地址(逻辑地址)的内容,然后硬盘返回相应地址的数据给电脑。但是,硬盘底层固件的地址描述形式需要定位到C(磁道),H(磁头)和S(磁道内扇区偏移)。并且在翻译过程中,可以将某些坏的扇区被屏蔽起来。使得逻辑地址看起来是连续的线性地址,而对应的物理地址则发生映射性的跳跃。如下图:
简单来说,也就是在没有任何屏蔽扇区的情况下,PBA=LBA;在有屏蔽扇区的情况下,PBA=LBA+屏蔽扇区的长度。
PBA=LBA这种情况是一种理想状态,因为硬盘从生产开始就会不断产生坏扇区。硬盘的全部扇区可以划分为固件区、工作区和保留扇区。固件区和保留扇区一般用户无法直接进行操作。其实硬盘的实际扇区数比我们看到的硬盘标签上标定的要大,其中一部份用于存储硬盘的固件;一部分是用户存储数据的区域,即工作区,也就是硬盘标定容量的扇区;剩下的就是保留区。实际上硬盘上并不会物理划出一个保留区域,只是在工厂生产时标定了全部的有效扇区,而硬盘的容量是小于其实际扇区总数的,在固件里定义了硬盘的容量,超过硬盘容量的那些扇区我们就称为保留扇区。
讨论完了硬盘全部扇区的组成结构,现在我们来探讨下单个扇区的结构。一个完整的硬盘扇区结构有两个主要部分:存储数据地点的标识符和存储数据的数据段。如图所示:
扇区的第一个主要部分是标识符。标识符,就是扇区头标,包括组成扇区三维地址的三个数字:扇区所在的磁头(或盘面)、磁道(或柱面号)以及扇区在磁道上的位置(即扇区号)。头标中还包括一个字段,其中有显示扇区是否能可靠存储数据,或者是否已发现某个故障因而不宜使用的标记。有些硬盘控制器在扇区头标中还记录有指示字,可在原扇区出错时指引磁盘转到替换扇区或磁道。最后,扇区头标以循环冗余校验(CRC)值作为结束,以供控制器检验扇区头标的读出情况,确保准备无误。
扇区的第二个主要部分是存储数据的数据段,可分为数据和保护数据的纠错码(ECC)。在初始准备期间,计算机会用512个虚拟信息字节(实际数据的存放地)和与这些虚拟信息字节相对应的ECC数字填入这个部分。
ECC(Error Checking and Correcting)中文简称错误检查和纠正,是一种能够实现错误检查和纠正的技术。ECC纠错码有它自己的一套计算公式和算法。在希捷硬盘中。ECC是Data和LBA的共同函数,具体计算公式是:ECC=f (Data, LBA)
Data和LBA都是输入参数。这也就意味着LBA的变化会导致ECC值的变化。而前好后坏会亮起UNC错误灯的原因正是因为LBA发生了变化,导致读写子系统使用变化后的LBA计算出的ECC与扇区原本保存的ECC不符合,于是读写子系统认为此扇区数据已不可信,报告UNC错误。但是值得注意的是,并不是所有硬盘的ECC计算公式都是这样设计的,比如西部数据的公式是ECC=f (Data),也就是没有LBA作为参数,这也就是为什么西部数据硬盘不存在前好后坏问题而希捷硬盘中会存在的原因。用一句话总结就是ECC参数中包含LBA地址的硬盘,都可能存在前好后坏问题,比如希捷硬盘,日立硬盘的ARM系列;ECC中不包含LBA参数的硬盘,不会有前好后坏问题,比如西部数据硬盘,东芝硬盘等。
谈到LBA发生变化,那么就不得不谈到缺陷表。我们知道硬盘数据存储的密度很大,在生产过程中不可避免的会产生缺陷扇区,并且在使用过程中,那些不稳定的扇区也会逐渐老化而产生数据读写错误,成为缺陷扇区。这些缺陷和不稳定扇区都会严重威胁硬盘的数据安全,为了保障数据安全,硬盘厂商为硬盘设计了两个缺陷列表——P表(P-list)和G表(G-list)来处理这些有缺陷的扇区。P表和G表被用于记录硬盘缺陷扇区的情况。
P表又称为永久缺陷列表,用于记录硬盘生产过程中产生的缺陷。缺陷扇区被加入P表后,硬盘不会再读写该扇区,而是将原读写该扇区的操作顺延到读写坏扇区的下一个扇区,该扇区以后的所有扇区的LBA值都发生了改变,原来保留扇区的一个扇区成为了硬盘的LBAmax。如图所示:
G表又称为增长缺陷列表,用于记录硬盘使用过程中由于磁介质性能变弱而引起的缺陷。缺陷扇区被加入G表后,当硬盘需要读该扇区时,会被重定位到保留扇区中的一个扇区,硬盘工作区的其它扇区不会受影响,如图所示:
也就是说如果缺陷表的变动能够导致LBA发生位移,那么ECC就会发生变化,进 而造成UNC错误。这也就是为什么希捷硬盘的缺陷表出现故障时,会导致编译 器发生错乱,从而造成数据区前面扇区扫描读取正常,后面扇区无法扫描读取 的情况。
但是我们应该注意,并不是所有缺陷表都能导致LBA错位的。必须是“挖掉”表才能有这个效果,“替换”表是不会导致LBA错位的。挖掉表是这个效果:
替换表是这个效果:
结合上面两张图和之前讲P表,G表内容时的配图我们可以发现,所谓的“挖掉”表其实就是意味着从被“挖掉”的坏扇区开始的下一个扇区起,后面所有扇区的LBA都会发生变化。而“替换”表则意味着会从保留扇区中调用一个空闲扇区出来去替换掉这个坏扇区,坏扇区后面的扇区LBA是不会发生任何改变的。
综合缺陷表是编译器的主要组成部分,综合缺陷表中包含以下缺陷表:
V1:用户区slip list (相当于V10和V40的合集)
V4:alt list (俗称A表,属于替换表,包含已决部分和未决部分)
V10 : P表 (主缺陷表,为03模块,一般为出厂生成,恢复数据必须的模块,在系统文件和模块中有指向)
V40:非常驻G表
V80:常驻G表
V100:P表 (V10的另一种显示方式,编译器中生效的P表)
在希捷硬盘中,V40和P表都属于“挖掉”表,也就是说,缺陷表中能够引起前好后坏故障的只有两个,分别是V40(非常驻G表)和V10(P表)。我们还需要了解的是这两个缺陷表中增删条目都会引起前好后坏故障,所以这也就是我们文章开头说的,前好后坏故障可以分为四种类型的原因。这四种类型分别是:
1. V40条目缺失(非常驻表中少了缺陷条目)
2. V40条目冗余(非常驻表中多了缺陷条目)
3. V10条目缺失(P表中少了缺陷条目)
4. V10条目冗余(P表中多了缺陷条目)
总结:
希捷硬盘的前好后坏是因为V40和V10缺陷表条目丢失或增加导致的,至于为什么会丢失或增加,有时候是由于固件内部的错误导致的,有时候是由于维修人员用了错处的参数重建编译器,导致的二次损坏。常见原因可以归纳为以下三点:
1.由于固件内部的错误导致的
2.维修人员用了错处的参数重建编译器,导致的二次损坏
3.错误的执行了G转P指令,导致P表加入了G表的条目
转载请注明:成都千喜数据恢复中心 » 希捷前好后坏原理分析