解读硬盘分区表-xiaosilent‘sBlog-BlogJava

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

解读硬盘分区表-xiaosilent‘sBlog-BlogJava
最近接触到一个0 磁道损坏的硬盘,做数据恢复,有机会学习了一下分区表的结构。

在这里简要的做点笔记。

MBR ( Main Boot Record )位于硬盘第一个物理扇区(绝对扇区)柱面 0 ,磁头 0 ,扇区 1 (简化成( 0 , 0 , 1 ))处。

由于DOS 是由柱面 0 ,磁头 1 ,扇区 1 开始,故 MBR 不属于 DOS 扇区,DOS 不能直接访问。

MBR 中包含硬盘的主引导程序和硬盘分区表。

分区表有4 个分区记录区,这也就是我们为什么只能在硬盘里最多拥有4 个主分区的原因了。

记录区就是记录有关分区信息的一张表。

它从主引导记录( MBR )偏移地址 01BEH 处连续存放,每个分区记录区占 16 个字节。

下面用我的硬盘的分区表来详细解释一下分区表各区段的具体含义。

1be ~ 1cd ( 016 字节)第一个分区入口(参数解释见下)
1ce ~ 1dd ( 016 字节)第二个分区入口(同第一个分区)
1de ~ 1ed ( 016 字节)第三个分区入口(同第一个分区)
1ee ~ 1fd ( 016 字节)第四个分区人口(同第一个分区)
1fe ~ 1ff ( 002 字节)引导记录标志位(固定值: 55 aa )
要说明的是:这里讲的“分区”,确切说是:主分区。

扩展分区也当成主分区,扩展分区内部的分区信息不在 MBR 里面。

要注意的是,在这里出现的数字均是 16 进制数。

下面就分区记录这 16 个字节再详细解释一下,以我的第一个分区为例:
80 分区状态( 80H 表示为激活分区, 00H 表示为非激活分区)
01 分区的开始磁头
01 00 分区的开始柱面和扇区(这个地方有点玄机,等会再详细解释)
07 分区的类型( 0c 表示为 FAT32 , 07 为 NTFS , 0f 代表扩展)
fe 分区的结束磁头
bf fc 分区的结束柱面和扇区(表示同开始磁头,等会详解)3f 00 00 00 从 MBR 到第一个分区扇区的扇区个数(分区前的扇区数)
7e 86 bb 00 分区的总扇区数
也就是说我的第一个分区是一个从( 0,1,1 )位置开始的可引导的NTFS 格式的分区。

结束位置是( 764,254,63 )容量为: 5.86G 。

下面说一下这些数据具体是怎么得来的。

1b00e 位置的80 是分区状态,上面已经说清楚了,这里就不再多说。

1b00f 位置的 01 是分区开始的磁头数,磁头数是从 0 到 254 的整数,这里用的是 2 位的十六进制数表示。

(01)HEX=(1)DEC。

1c000-1c001 位置的 01 00 合在一起,表示的是分区开始的柱面
和磁头数。

我们知道,一位的 16 进制数可以转换成 4 位的二进制数。

那么,将这两个两位的16 进制数转换分别转换成2 进制数就是:(01)HEX = (0000 0001)BIN (00)HEX=(0000 0000)BIN 。

然后,取前面的 (01)HEX的二进制的后六位,也就是 (000001)BIN ,他就代表了分区开始的扇区数,也就是 1 。

这样取了以后, (01)HEX还剩下高位的两个数,这两个数放到 (00)HEX 转成的二进制数的前面,就构成了一个 10 位的二进制数,表示的是分区开始的柱面数。

到这里,分区开始位置就确定了。

1c002 位置的 07 表示分区类型—— NTFS
1c003-1c005 位置的 fe bf fc 表示分区的结束位置, fe 代表磁头数。

(fe)HEX = (254)10。

然后, (bf)HEX = (1011 1111)BIN (fc)HEX = (1111 1100)BIN,按照前面说的,取 1011 1111 的后六位,得到 (11 1111)BIN= (63)DEC也就是说结束的扇区是63 。

最后,(10 1111 1100)BIN = (764)DEC,即表示结束柱面为 764 。

( 表示开始和结束位置的这几位,可以说是分区表中最复杂的地方了,看了很多文章,都没怎么讲清楚,希望我这里讲的比较清楚了。

)
1c006-1c009 位置的 3f 00 00 00 表示的是分区前面的扇区数,我们需要倒过来看这串数字,也就是看成 (00 00 00 3f)HEX = (63)DEC,说明分区开始前的扇区数是 63( 这个分区从 (0,1,1) 位置开始,前面当然就是一个磁头的扇区数 63 了 ) 。

1c00a-1c00d 位置的 7e 86 bb 00 表示的是分区内的扇区总数,和上面一样,倒过来看成是 (00 bb 86 7e)HEX = (12289662)DEC。

扇区总数=(结束柱面-起始柱面+1 )×磁头数(255) ×每柱面扇区数
(63) 。

分区容量=扇区数×每扇区字节数(512) 得到单位为字节,再每除以 1024 ,就向 KByte 、 MByte 、 GByte 转换。

相关文档
最新文档