今天分析一下MBR的分区表字段,有点心得。本来想在CSDN上写个BLOG,备忘一下,谁知道插入不了图片。一冒火,跑来了CNBLOG。
发了牢骚,转入正题。
1:硬盘的基本结构
硬盘有三个元素:磁头、柱面(磁道)、扇区,一个硬盘的大小计算公式为:
硬盘大小=磁头 x 柱面(磁道)x 扇区 x 扇区大小(一般是512字节)
硬盘结构的示意图如下所示:
图片来自于:http://expl.cpst.net.cn/ehard/2011_12/324857111.html
a.整体结构图
b.磁头
c.柱面
d.扇区
2:硬盘的LBA模式
winHex工具可以查看自己的硬盘信息,工具-->磁盘工具-->设置磁盘信息,可以看到我的硬盘信息如下:
从上来可以看到,磁头数有255个,这个和我们实际了解的不太一样,实际上的硬盘一般磁头也就1-2个,这是怎么一回事呢。
原来上面的参数是逻辑上的表示,硬盘会通过一个LBA模式把逻辑的(磁头、柱面、扇区)转换成实际的硬盘(磁头、柱面、扇区)。
LBA更多的细节自己Baidu,Google吧。
3:自己硬盘上的相关信息
winHex-->工具-->打开磁盘-->物理磁盘-->确定
然后点击“视图”-->主引导记录
看到自己的MBR分区表信息如下:
4:硬盘信息。
5:分析
为了方便,我们用(柱面,磁头,扇区)来表示硬盘位置,比如(0,0,1)表示0柱面,0磁头,1扇区
分区表1:范围(0,1,1)--(0,32,32)
前面跳过63扇区=1*63
共有1985个扇区=(32-1)*63+ (32 - 1 + 1)
分区表2:范围(0,32,33)--(12,223,19)
前面跳过2048扇区= 63+1985=32*63+(33-1)
共有204800个扇区=12*255*63+ (223-32)*63+(19-33+1)
分区表3:范围(12,223,20)--(1023,254,63)
前面跳过206848扇区= 2048+204800=12*255*63+ 223*63+(20 -1)
共有81707008个扇区,注意(1023-12)*255*63 + (254-223)*63+(63-20+1) = 16243712 <81707008
分区表4:范围(1023,254,63)--(1023,254,63)
前面跳过81913856扇区= 206848 + 81707008
共有543226544个扇区
上面的分析过程中,我们知道每个柱面有255个磁头,每个磁头包含63个扇区。
根据MBR的分区表结构定义:
柱面用10Bit表示,范围值为[0~1023],
磁头用8Bit表示,范围为[0~254],我也不知道为什么没有255
扇区用6Bit表示,范围为[1~63],这里为什么没有0呢?
因此,用(柱面,磁头,扇区)来表示可以最大表示为(1023,254,63),
一个 1023*255*63+254*63+63=16450560个扇区。
当扇区的起始值或者终止值大于16450560的时候,统一用(1023,254,63)表示,这就是分区表项3的终止值和表项4的初始、终止值都为(1023,254,63)的原因
6:对比
分区1:不知道干什么用的
分区2:204800个扇区=204800*0.5k(512Byte)=100M, 对应于系统保留的容量。
分区3:81707008个扇区=81707008*512/1024/1024/1024=38.9609375G, 对应于C盘容量。
分区4:543226544个扇区=543226544*512/1024/1024/1024=259.03060150146484375G, 磁盘的扩展分区的总大小。
7: MBR的2T限制
由上面的讨论知道,分区表用4Byte表示范围,一共可以表示2^32个扇区,共2^32*512Byte=2T大小。
因此,如果要支持2T以上硬盘,就不能使用MBR来标示硬盘了。