您好朋友,感谢您关注xiaosilent,我在blogjava的博客已经停止更新,请访问http://kuan.fm了解我的最新情况,谢谢!
随笔-82  评论-133  文章-0  trackbacks-0

最近接触到一个 0 磁道损坏的硬盘,做数据恢复,有机会学习了一下分区表的结构。在这里简要的做点笔记。

MBR Main Boot Record )位于硬盘第一个物理扇区(绝对扇区)柱面 0 ,磁头 0 ,扇区 1 (简化成( 0 0 1 ))处。由于 DOS 是由柱面 0 ,磁头 1 ,扇区 1 开始,故 MBR 不属于 DOS 扇区, DOS 不能直接访问。 MBR 中包含硬盘的主引导程序和硬盘分区表。分区表有 4 个分区记录区,这也就是我们为什么只能在硬盘里最多拥有 4 个主分区的原因了。记录区就是记录有关分区信息的一张表。它从主引导记录( MBR )偏移地址 01BEH 处连续存放,每个分区记录区占 16 个字节。

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

偏移位置

00

01

02

03

04

05

06

07

08

09

0a

0b

0c

0d

0e

0f

00000000

33

c0

8e

d0

bc

00

7c

fb

50

07

50

1f

fc

be

1b

7c

…………

000001b0

00

00

00

00

00

2c

44

63

60

65

50

65

00

00

80

01

000001c0

01

00

07

fe

bf

fc

3f

00

00

00

7e

86

bb

00

00

00

000001d0

81

fd

0f

c5

fe

ff

bd

86

bb

00

43

3b

6b

01

00

00

000001e0

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

000001f0

00

00

00

00

00

00

00

00

00

00

00

00

00

00

55

aa

              000 ~ 1bd       446 字节)可执行代码区段

              1be ~ 1cd       016 字节)第一个分区入口(参数解释见下)

              1ce ~ 1dd       016 字节)第二个分区入口(同第一个分区)

              1de ~ 1ed       016 字节)第三个分区入口(同第一个分区)

              1ee ~ 1fd         016 字节)第四个分区人口(同第一个分区)

              1fe ~ 1ff 002 字节)引导记录标志位(固定值: 55 aa

要说明的是:这里讲的“分区”,确切说是:主分区。扩展分区也当成主分区,扩展分区内部的分区信息不在 MBR 里面。

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

下面就分区记录这 16 个字节再详细解释一下,以我的第一个分区为例:

偏移位置

00

01

02

03

04

05

06

07

08

09

0a

0b

0c

0d

0e

0f

000001b0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

80

01

000001c0

01

00

07

fe

bf

fc

3f

00

00

00

7e

86

bb

00

 

 

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 转换。

posted on 2006-10-16 10:32 xiaosilent 阅读(1268) 评论(1)  编辑  收藏 所属分类: Linux相关

评论:
# re: 解读硬盘分区表[未登录] 2008-09-26 23:14 | thomas
学习了,我一直看不懂分区表而头痛,谢谢了!!  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: