解读硬盘分区表-xiaosilent‘sBlog-BlogJava
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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 转换。