最近接触到一个
				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 阅读(1312) 
评论(1)  编辑  收藏  所属分类: 
Linux相关