二. 分区表修复进阶——多分区的计算
本帖隐藏的内容需要回复才可以浏览1. 一主分区,三逻辑分区情况下的计算
前面提到过硬盘上的分区结构是链式的,又由于MBR之后的各分区表往往保存完好,就可以利用后面的各分区MBR来逆向推导MBR的参数~请看下面的分区链式图:
在双分区的实例中,填写的参数可表示为:C盘占用扇区+D盘之前的扇区+D盘占用扇区。由于多个逻辑分区的总和算一个扩展分区(不知道什么是扩展分区和逻辑分区的可以看看我前面的那篇文章),于是多分区的参数无非是:C盘占用扇区+扩展分区前的扇区+(逻辑分区D+逻辑分区E+……),总体来讲还是3大块。
由于分区软件的不同,分区前的保留扇区可能有所不同~比如下图的这块硬盘,采用了diskpart进行分区,分区前的保留扇区达到了2048个而不是常见的63个。
记录C盘占用的扇区数为79871999。由于这是在NTFS模板中查看的信息,所以在做跳转时需要+1,即跳转到2048+79871999+1=79874048扇区。
由于这是一个“虚拟MBR”,它仍然拥有部分MBR特征,所以我们可以调用“主分区引导模板”来查看这个分区的信息。可以看到这里的分区信息有两项,相对于上一个实例多了一个“05”分区表示标识,不过这个05标识我们先不用管它。直接看第一项的两个参数为2048、167772160。
接下来跳转至79874048+2048+167772160=247648256扇区(由于这是在“主引导记录”模板里查看的,所以不需要+1),并调用“主引导扇区”模板查看E盘的信息。
记录两个数值为2048、167772160,注意这个分区仍然有“05”标识。向下跳转到247648256+2048+167772160=415422464扇区。
到这里,分区信息当中只有一项而没有“05”标识,于是可判定这就是整个扩展分区中的最后一个分区。记录其信息2048、209715200。
如果觉得混乱,不妨列出下面这样一个表:
由上面的数据不难算出扩展分区的总扇区数为:(2048+167772160)+(2048+167772160)+(2048+209715200)=545265664。C盘主分区的参数为:保留分区2048,C盘本身占用79872000,于是扩展分区之前的总分区数为2048+79872000=79874048。最后需要填写的参数:
注意这个硬盘装有系统,于是第一分区表项填为80,分区格式代码为07(NTFS);第二分区不作为引导区,为00,由于是扩展分区,分区格式代码为0F(扩展分区)。其他参数上面皆已算出,直接填入即可。此外由于现在硬盘容量很大,原来的“开始头、扇区、柱面”这几个参数已经不足以表达如此大的数字,所以如果不知道这几个数字如何填写就放在那不去管它,默认为00。
另一方面,本例不同于前例。前例由于制图需要,是挨个通过MBR或虚拟MBR寻找NTFS引导扇区的位置并调用NTFS模板查看分区信息;而本例中除了在第一分区调用了NTFS模板以寻找扩展分区起始位置以外,其他的分区只在虚拟MBR中调用了“主引导记录”模板。熟练之后可以多采用后面一种方式以节省时间。
2. “05”标识是怎么回事?
由于虚拟MBR一般不会被破坏,所以多分区计算中,我们不去管那个“05”标识也可以完成参数的计算。不过考虑到喜欢刨根问底的一部分朋友的需要,这里补充一个小节用于讲解MBR或虚拟MBR中分区参数的精细结构。
首先要更正一下虚拟MBR的说法:为了能在硬盘上分出多于4个分区,我们引入了扩展分区的概念,N个扩展分区的分区表的信息组合起来成为MBR中的扩展分区项。这种特殊的分区表结构在本节中将不再被称为“虚拟MBR”,而采用EBR(Extended Boot Record也称作扩展MBR)进行代替。
以上面320G硬盘的分区表为例,该硬盘中存在一个主分区和一个扩展分区,而这个扩展分区下面包含三个逻辑分区。而仅从MBR来看,其中仅包含了C盘的信息和整个扩展分区的信息,那么,电脑如何判断扩展分区里的每个逻辑分区有多大?每个逻辑分区各处于扩展分区的什么位置?很显然,仅凭整体的扩展分区信息不能回答上述问题,所以EBR担负着两个任务:一是描述该分区本身的大小、格式、保留空间等信息(这一点和MBR很类似);二是,在扩展分区内部“划清界限”,即描述自身和其他逻辑分区的位置关系。前者的代码采用对 应的分区格式代码(如0B, 07等,但是没有0F,0F是“整体扩展分区”的参数,不是逻辑盘的参数);后者采用“05”这个特殊标识用以“表明身份”。
如果用图示来表示“05”标识的作用,基本上就是下面这个样子:
可以推断,如果还有G盘的话,那么F盘的05标识项就是:前者表示D+E+F盘大小,后者表示G盘大小,而G盘就没有05标识了。至此,逻辑分区在扩展分区内的定位问题得到完美解决。
最后补充一张图用以说明16个字节的分区参数含义(64字节表示4个分区,故每个分区占用16个字节)
3. 小结
在修复过程中建议利用表格使分区链表变得清晰。
主引导记录 模板中的分区不需要加减,从NTFS模板移动至 主引导记录 中需要+1。
05标识用于扩展分区内部的逻辑分区的定位。
起始磁盘头等信息现在基本停用。占用扇区数最多为FF FF FF FF,每个扇区占用512个字节,计算下来每个分区最大容量为2047G。如果某日硬盘的分区容量大于这个值,那么分区表的计算方式将改写,比如可能把保留分区的4字节让一个给扇区数,那么单分区的最大容量将变为523776G,我想暂时是够用了……
三. 总结及写在后面
总体来讲整个恢复过程就是三大步:446字节引导文件、64字节硬盘分区参数、55AA结束标识,其中以64字节的硬盘分区参数最为关键。可以说全文最为精华的部分在于第二章和第三章中那两张扇区和参数的对应关系图,望大家在这两张图上多一些耐心。幸而这些参数通过一点加法运算和现成的模板是非常容易获得的,整个恢复步骤不会超过10分钟,而精确性和安全系数都是非常高的。
希望本文能帮助新手对分区表有进一步的了解,同时也希望本文能帮助到有一定动手能力的朋友。同时还是要提醒大家,如果可能的话还是保存一份硬盘的MBR,这样但凡遇到主分区表问题的时候也能快速复原。此外,Winhex除了恢复硬盘的分区表之外,也可用于恢复U盘的分区表,只要U盘的分区格式是Fat32的,其恢复过程完全和上面一样。Winhex也可用于格式化之后的数据恢复以及误删文件的恢复,此外还有诸多更加强大的功能,限于篇幅,这里就不一一赘述了。