磁盘主引导记录(MBR)详解

前言:xxc取名叫“详解”,不是说xxc要打多少字(xxc指法不好,多多谅解),在说了,把问题的要点提出来,也就够了。个人之见,只共参考。

一、        MBR 简介
Master Boot Record, 位于磁盘的Cyclinder0, Head0, Sector1(Notice: Sector No. start from  ONE.), 在NAND Flash / DOM上如果你有partition的话,也有相同的MBR。只是没有Cyclinder, Head组织结构。MBR结构图如下:
Offset        length(B)        illustration
_____________________________
0x000        446                        启动代码 (by the way, BR 与 MBR的主要不同就在与它没有启动代码,全0填充)
0x1be        16                        DPT Entry 1
0x1ce        16                        DPT Entry 2
0x1de        16                        DPT Entry 3
0x1ee        16                        DPT Entry 4
0x1fe        2                        0x55AA

二、        DPT(Disk partition Table)结构
Offset        Length                illustration
__________________________________________________________
0x00        1B                        0X00: not default partion, whereas 0x80 is ok.
0x01        1B                        Starting Head(SH) of this partition
0x02        6bit                        Starting Head(SH) of this partition
0x03        10bit                Starting Cyclinder(SC) of this partition
0x04        1B                        System Type(ST) 即分区的FS type
0x05        1B                        End Head(EH) of this partition
0x06        6bit                        End Head(EH) of this partition
0x07        10bit                End Cyclinder(EC) of this partition
0x08        4B                        Start Sector Address (SSA)

0x0C        4B                        Sector Number (SN)

分区表中有以下关系:(首先要说明两个参数: firstly, HPC (Head Per Cyclinder) , secondly, SPLT (Sector Per logic Track) , 一般都为 255和63。 通过#fdisk –l 就可以看到这两个参数。)
SSA  = (SC * HPC + SH)* SPLT + (SS-1)   (1)
ESA  = (EC * HPC + EH) * SPLT + (ES-1)        (2)
SN   =  ESA – SSA + 1                                                (3)
(看不懂这个等式的话,就得去看看disk结构了哈。)
不难推断出,如果要满足(1)(2),则每个分区不得大雨8.4G(这个就是早期disk partition的限制的原因); 但同时我们也可以看出 EH,ES,EC,SH,SS,SC都是冗余数据。于是在现在的disk partition中考虑兼容性,保留了原来的这些参数,但把出MBR DPT Entry 1 中的SH,SS,SC之外的各个DPT Entry中都设置为其最大直,依次为:0xfe, 0x 3f, 0x3ff, 0xfe, 0x3f, 0x3ff。
ST: 文件系统的类型,可以通过
#fdisk /dev/had
#Command (m for help): l  查看。注意一点,disk被fdisk后就有ST,但只有mkfs了才真正生效。

三、        也许友人就问了, MBR才4个partition,> 4怎么办呢?
这就要用到BR,在每个partiition的开始部分有一个和MBR相同的结构,(BR 与 MBR
的主要不同就在与它没有启动代码,全0填充)
本来想画一个图的,这个上面不好操作,就不华了

四、        以我自己的disk为例子说明
首先我copy出我的disk的MBR
#dd if=/dev/had of=mbr.bin bs=512 count=1
然后导出文本格式
#od –x mbr.bin > mbr
打开
#vi mbr
(片段)
(启动代码)。。。。。。。。
0000660         0000 0000 0000 0000 1a5e 0003 0000 0180
0000700         0001 fe83 ffff 003f 0000 1637 0271 fe00
0000720         ffff fe82 ffff 1676 0271 ef01 000f fe00
0000740         ffff fe05 ffff 0577 0281 df4a 06cf 0000
0000760         0000 0000 0000 0000 0000 0000 0000 aa55
0001000
其中, 0180        (80 可以知道是 default分区)
0000700         0001 fe83 ffff 003f 0000 1637 0271 为分区表入口1 (由fe83中的83知道是EXT3分区)
fe00
0000720         ffff fe82 ffff 1676 0271 ef01 000f为分区表入口2 (由fe82中的82知道是swap分区)
fe00
0000740         ffff fe05 ffff 0577 0281 df4a 06cf 0000为分区表入口3  (由fe05中的05知道是扩展分区)
0000
0000760         0000 0000 0000 0000 0000 0000 0000为分区表入口4 (没有第4个主分区)
哎呀,这个上面实在表素工具有限,要把这串数字都懂还是要花点时间的。里面还有好几点细节呢。不过想回来,除了要注意第一列是8禁止地址,其他为16禁止,注意是小顶端哦,其他的我前面的原理已经说的还酸清楚了。

既然第3个是扩展分区,那一定有一个BR所定义的逻辑分区撒,且看 0281 df4a(实际为: 0xdf4a 0x81), 及从这个sector开的地方,长度自然还是512哈。于是,
#dd if=/dev/had of=mbr.bin bs=512 count=1 skip=42009975 ( == 0xdf4a 0x81 )
然后导出文本格式
#od –x br.bin > br
打开
#vi br
(全部)
0000000         0000 0000 0000 0000 0000 0000 0000 0000
*  (这个也不是MBR,启动代码当然没有了)
0000660         0000 0000 0000 0000 0000 0000 0000 fe00
0000700         ffff fe83 ffff 003f 0000 5342 012a fe00
0000720         ffff fe05 ffff 5381 012a 26bb 001e 0000
0000740         0000 0000 0000 0000 0000 0000 0000 0000
0000760         0000 0000 0000 0000 0000 0000 0000 aa55
0001000 (512B)分析就和上面的相同了和, 我就不分析了。

推荐另一个资料:http://blog.csdn.net/nydzdoking/article/details/3720972


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值