一直想弄清楚MBR存放的是什么东西,今天仔细研究了下,查了不少资料,小总结一下:
#dd if=/dev/sda of=mbrtest bs=512 count=1
#od -x mbrtest
我电脑上输出的最后几行是:
0000660 0000 0000 0000 0000 ebb0 f0b1 0000 0100
0000700 0001 fe07 ffff 003f 0000 1481 012a 0000
0000720 ffc1 fe0f ffff 14c0 012a d001 0826 0000
0000740 0000 0000 0000 0000 0000 0000 0000 0000
0000760 0000 0000 0000 0000 0000 0000 0000 aa55
0001000
注意这个表看的时候要把每一组两个字节调换位置来看,如aa55在硬盘上存储的实际是
55aa了,具体是little-endian的原因,这里就不多探究了。
下面是一些分析:
1、输出最前面的一列是8进制的位偏移,所以每行有16个字节了。
2、mbr总共512字节,前446个字节是主引导记录,是bios加电自检后要运行的代码
3、从第447个字节开始后的64个字节,每16个字节为一组,是硬盘分区表,就是
红色的部分了。
4、看到0xaa55了吗?这就是Boot Sector结束标志。
5、关于硬盘分区表(DPT,Disk Partion Table)各个字节比较详细一点的说明如下:
0 Activeflag.活动标志.若为0x80H,则表示该分区为活动分区.若为0x00H,则表示该分区为非活动分区.
1,2,3 该分区的起始磁头号,扇区号,柱面号:
磁头号 -- 1字节, 扇区号 -- 2字节低6位,柱面号 -- 2字节高2位 + 3字节
4 分区文件系统标志: 分区未用: 0x00H. 扩展分区: 0x05H, 0x0FH.
FAT16分区: 0x06H. FAT32分区: 0x0BH, 0x1BH, 0x0CH, 0x1CH.
NTFS分区: 0x07H.
5,6,7 该分区的结束磁头号,扇区号,柱面号,含义同上.
8,9,10,11 逻辑起始扇区号。表示分区起点之前已用了的扇区数.
12,13,14,15 该分区所占用的扇区数
6、根据第五点分析我的硬盘,(1)有两个主分区 (2) 第1个主分区前几个字节是
00 010100 07 feffff 0000003f 012a1481(表示数值的部分调整了顺序)
00因此该分区不是活动分区;010100表示该分区从硬盘的0柱面1磁头1扇区开始;
07代表该分区文件系统是ntfs;feffff其实是因为现在的硬盘超出了传统的
表示范围用最大值表示;0000003f,开始之前已经用的扇区数为什么是0x3f呢,
这个我也没搞懂,后面那个16进制的扇区数计算后大约9.35GB,与我的C盘大小
基本吻合。后面的照此分析了。
7、注意到一点就是没有activeflag为80的分区,我觉得原因是双系统装grub时覆盖了
原系统的mbr,grub把活动分区划到了某个逻辑分区,系统启动查找分区表链时找到该分区。