解读分区表的秘密
前几天写了一篇介绍恢复误Ghost硬盘的博文,反响出乎意料,很多博友对数据恢复表现出了浓厚的兴趣,希望能对数据恢复作进一步了解。其中大家反映较多的就是希望能看懂分区表的格式,乍一看,由16进制数组成的分区表让人望而生畏,如同天书一般。其实,只要理解了分区表参数的含义,天书也就不难读懂了。今天我们就来介绍一下分区表参数,帮助大家掌握分区表。
介绍分区表之前,大家要先准备一些硬盘存储的基础知识,有这么几点:
一 进制转换
分区表中会用到二进制,16进制和10进制,大家要熟悉它们之间的转换,例如16进制的
二 常用存储单位
1K=1024字节=210 字节
1个扇区=512字节
介绍这些是因为分区表中表示分区大小是用扇区表示,也就是说分区表中只会说这个分区有多少个扇区,而不会说有多少G,多少M,因此我们要习惯进行存储单位转换。例如分区表中描述分区大小是
三 扇区定位
硬盘中有数以亿计的扇区,如何才能准确定位到每一个扇区呢?一般用C/H/S和LBA两种方法。这两种定位方法都很重要,我们来好好看看。
C/H/S指的是利用柱面/磁头/扇区这三个参数来定位扇区,有的资料说C/H/S指的是磁道,磁头和扇区,这就不准确了。磁道是硬盘盘体上的同心圆,每个磁道上排列了63个扇区,盘体最外圈为0磁道,从外圈向内圈编号逐步加大。由于一块硬盘有多块盘体,因此硬盘可以看作是一个圆柱体。这时就看出用磁道定位不妥的地方了,磁道显然是只适合在二维空间定位,不适合在三维空间中表示准确的坐标。柱面就没有这个问题了,柱面是所有盘体上磁道的集合,例如0柱面指的是所有盘体上的0磁道所组成的一个圆柱体。这下您肯定明白了,原来磁道是二维的圆,柱面是三维的圆柱。
一个柱面包含了若干磁道,如何来准确表示柱面中的具体磁道呢?这时就可以使用磁头参数了。每个磁头负责读取柱面中的处于不同高度的磁道,我们只要给出具体的磁头数值,就知道对应柱面中的哪个磁道了。这样我们根据柱面和磁头两个参数就可以准确地定位到盘体中的某个磁道,一个磁道上有63个扇区,我们只要再知道扇区的编号,就可以完成在三维空间中定位扇区的任务了,C/H/S三个参数就是这样定位扇区的。
柱面编号从0开始,每个柱面有255个磁头,编号从0到254,每磁道有63个扇区,编号从1到63。有朋友问:难道硬盘中真的有255个磁头吗?当然不是,硬盘中的磁头很少会超过4个,真正硬盘的每个磁道也不是都有65个扇区。每柱面255磁头每磁道63扇区这种模型只是为了研究问题方便而人为规定出来的,就象我们规定每小时有60分钟而每分钟有60秒那样。虽然柱面中的磁头数量和实际不符,但由于硬盘中有一个地址翻译器,可以将标准模型中的CHS参数转换为硬盘实际的CHS参数,因此我们用C/H/S定位扇区是没有问题的,这就象可以从阴历的日期转换为阳历的日期。
柱面是研究分区非常重要的一个参数,分区以柱面为粒度。这话怎么理解?操作系统分区时要考虑柱面因素,分区总是结束在柱面的最后一个扇区,也就是说分区总是结束在某个柱面的254磁头63扇区。这就解释了为什么你要求的分区大小和实际分区大小总是有些小小的误差,例如你要分一个区是
LBA定位扇区的方式就简单多了,LBA方法是把硬盘当作一个扇区集合,LBA给硬盘中的每个扇区都赋予一个唯一的编号,只要你说出扇区编号就可以定位出扇区位置。LBA只用了一个参数,而C/H/S用了三个参数,两种方式可以相互转换。就象我们习惯用年月日来表示历史上的某一天,但其实也可以直接说今天是公元某某天。硬盘上的第一个扇区用C/H/S表示是0/0/1,0柱面0磁头1扇区,用LBA表示就是0号扇区。C/H/S和LBA之间有转换公式,但我很少会手工计算,我一般都利用Winhex帮忙,例如我想知道950/254/63对应的LBA是多少,我就在Winhex中选择转到扇区,如下图所示,输入C/H/S参数。
Winhex转到指定扇区后会同时显示显示C/H/S和LBA参数,如下图所示,Winhex告诉我们950/254/63对应的LBA参数是15277814。从LBA转换C/H/S也可用同样方法。
好了,掌握了这些基础知识,我们就可以来分析分区表了。分区表在硬盘的第一个扇区,0柱面0磁头1扇区,这个扇区也被称为MBR,主引导记录。MBR有512个字节,分为三部分内容,第一部分是个引导程序,446字节;第二部分是分区表,64字节;第三部分是结束标志,内容是55AA,2字节。如下图所示就是MBR的内容,绿色部分为分区表。
分区表有64个字节,可以表示4项分区,每项分区为16个字节。我们只要把16个字节的内容搞清楚了,分区表就不再神秘了。上图所使用的计算机硬盘分了四个区,如下图所示,是大家常用的分区方法,一个主分区,一个扩展分区,扩展分区内分了三个逻辑分区。
这四个分区在分区表中如何表现呢?我们从图中可以看出分区表中只有两项内容,分别是
80 01 01 00 07 FE FF FB
第一个字节的内容是分区的引导标志,80表示是引导分区,00表示不是引导分区。第二,三,4字节表示分区的起始磁头,扇区,柱面,本例中三个参数分别是01 01 00,这代表第一个分区从0柱面1磁头1扇区开始。第五个字节表示分区类型,07表示NTFS分区,常用的类型有
看到这里有些朋友不禁有些疑问,分区表只用了八个字节就已经表示了起始和结束位置,为什么还需要后八个字节呢?其实后八个字节是用LBA方法来表示分区的起始位置和结束位置,这可不是多此一举,主要是因为CHS对大容量硬盘已经力不从心了。从刚才的参数分析我们可以看出来,CHS表示柱面的参数最多也就是10个二进制数,10个二进制数只能表示1024个柱面,1024柱面才多大?1024×
继续分析分区表项的第九,十,十一,十二字节,这四个字节代表分区之前的扇区数,意思是从分区的起始到硬盘的第一个扇区之前有多少扇区,其实是很隐晦地告诉我们分区从哪里起始。本例中这四个字节的内容是
分区表的十三,十四,十五,十六字节代表分区的大小,这四个字节表示分区的扇区数。本例这四个参数为BD 08 FA 00,高低位互换一下,分区的扇区数为00 FA 08 BD,换算为10进制为16386237。知道了分区起始在63,大小为16386237,结束位置也就知道了 63+ 16386237-1=16386299。用winhex转到16386299看看,如下图所示,16386299正是1019柱面254磁头63扇区。
对分区表的第一个项内容总结一下,这16个参数告诉我们,第一个分区从
分析了分区表的第一项,接下来来分析第二项 00
分析了MBR的分区表后,我们发现分区表中定义了两个分区,一个是主分区,一个是扩展分区。看到这里,有人要问了,这个硬盘明明有四个分区,怎么在分区表中只定义了两项?到目前为止,只有C分区被定义出来,D,E,F分区在哪里定义呢?答案在扩展分区里,在扩展分区的第一个扇区,有一个分区表,分区表中将定义出主分区D,然后定义出下一个扩展分区。找到下一个扩展分区的起始扇区,又会看到一个分区表,定义出主分区E,然后又定义下一个扩展分区……这种依靠扩展分区的方法被称为链式分区表,其实使用扩展分区也是无奈之举,由于MBR的分区表只有4项,我们如果不使用扩展分区就最多只能使用四个分区。有了扩展分区之后,显然分区的数量就不受限制了,而且现在从分区表的角度来看,分区表中只有主分区和扩展分区,根本没有逻辑分区。我们使用的逻辑分区,不过是在扩展分区的分区表中定义出来的主分区而已。分区拓扑如下图所示。
我们转到扩展分区的起始,继续向下分析分区表,扩展分区的起始位置在1020/0/1,分区表内容如下图所示
从扩展分区的分区表中可以看出定义了两项分区,分别来分析一下。第一项定义了D分区,内容是00
接下来分析第二项,这一项定义的是第二个扩展分区,内容是00
扩展分区的分区表分析完之后,D分区被定义出来了,而且又给出了第二个扩展分区的定义,我们现在到第二个扩展分区的起点,继续向下分析分区表。第二个扩展分区的位置在1275/0/1,分区表内容如下图所示。
分区表中仍然是两项,这次我们明白了,肯定一项用来定义E分区,另一项定义第三个扩展分区。先来看看第一项 00
再来看分区表的第二项,这一项将定义第三个扩展分区,00
第二个扩展分区的分区表分析完后,E分区被定义出来,第三个扩展分区也被定义出来了。第三个扩展分区的起点在 1658/0/1,内容如下图所示。
这次我们发现分区表中只有一项,这是因为已经定义到最后一个分区了,因此不需要再向下定义扩展分区了。最后一项分区定义了F分区,内容是 00
至此,分区表分析完毕,一共分析了四处分区表,定义了七个分区,各处分区表定义的分区具体如下表。如果大家能够细细体会,察觉到操作系统分区的规律,将来进行分区恢复就容易得多了。当我们明白操作系统创建分区和修改分区在分区表中是怎么表现的,将来进行分区恢复只不过是一个简单的逆向操作而已,下次我们可以举个例子来说明一下。分区恢复并不难,大家只要渡过开始时对操作界面的不适应,仔细研究,辅以实例好好推敲一番,定然能够柳暗花明,豁然开朗。恭祝大家早日掌握分区原理!
Remark:本系列转载了{ 岳雷的微软网络课堂blog的内容,如果涉及法律问题,请通知我.我会立刻删掉.}
|
|