每个磁盘的头一块(512字节)为其主引导记录,或MBR(Master Boot Record)。MBR中含有以下内容。
引导程序(Bootloader):在可引导磁盘上,MBR中有一个底层可执行文件叫做引导程序。引导时,BIOS将控制权交给引导程序,引导程序负责装载,然后将控制权交给合适的操作系统。
分区表:在每个磁盘上,主引导记录中的64个字节被保留为磁盘分区表。这个空间最多记录4个分区的的信息。
在Linux中,可以用dd命令将这512个字节做备份:
#dd if=/dev/sda of=/tmp/MBR.backup bs=512 count=1
用16进制查看这512个字节,在我的测试系统中如下:
[root@redhat5 partitions]# hexdump MBR.backup
0000000 48eb 1090 d08e 00bc b8b0 0000 d88e c08e
0000010 befb 7c00 00bf b906 0200 a4f3 21ea 0006
0000020 be00 07be 0438 0b75 c683 8110 fefe 7507
0000030 ebf3 b416 b002 bb01 7c00 80b2 748a 0203
0000040 0080 8000 b58a 00a3 0800 90fa f690 80c2
0000050 0275 80b2 59ea 007c 3100 8ec0 8ed8 bcd0
0000060 2000 a0fb 7c40 ff3c 0274 c288 be52 7d7f
0000070 34e8 f601 80c2 5474 41b4 aabb cd55 5a13
0000080 7252 8149 55fb 75aa a043 7c41 c084 0575
0000090 e183 7401 6637 4c8b be10 7c05 44c6 01ff
00000a0 8b66 441e c77c 1004 c700 0244 0001 8966
00000b0 085c 44c7 0006 6670 c031 4489 6604 4489
00000c0 b40c cd42 7213 bb05 7000 7deb 08b4 13cd
00000d0 0a73 c2f6 0f80 ea84 e900 008d 05be c67c
00000e0 ff44 6600 c031 f088 6640 4489 3104 88d2
00000f0 c1ca 02e2 e888 f488 8940 0844 c031 d088
0000100 e8c0 6602 0489 a166 7c44 3166 66d2 34f7
0000110 5488 660a d231 f766 0474 5488 890b 0c44
0000120 443b 7d08 8a3c 0d54 e2c0 8a06 0a4c c1fe
0000130 d108 6c8a 5a0c 748a bb0b 7000 c38e db31
0000140 01b8 cd02 7213 8c2a 8ec3 4806 607c b91e
0000150 0100 db8e f631 ff31 f3fc 1fa5 ff61 4226
0000160 be7c 7d85 40e8 eb00 be0e 7d8a 38e8 eb00
0000170 be06 7d94 30e8 be00 7d99 2ae8 eb00 47fe
0000180 5552 2042 4700 6f65 006d 6148 6472 4420
0000190 7369 006b 6552 6461 2000 7245 6f72 0072
00001a0 01bb b400 cd0e ac10 003c f475 00c3 0000
00001b0 0000 0000 0000 0000 89db 0006 0000 0080
00001c0 0a81 fe83 ffff f58a 007f 3326 00a6 fe00
00001d0 ffff fe82 ffff 28b0 0126 f58a 007f fe00
00001e0 ffff fe83 ffff 1e3a 01a6 d212 0219 0000
00001f0 0000 0000 0000 0000 0000 0000 0000 aa55
这个表是从维基百科中文站上截取下来的,这是这512个自己的分布情况。
位址 | 描述 | 長度 (位元組) | |||
---|---|---|---|---|---|
Hex | Oct | Dec | |||
0000 | 0000 | 0 | 代码区 | 440 (最大 446) | |
01B8 | 0670 | 440 | 選用磁碟標誌 | 4 | |
01BC | 0674 | 444 | 一般為空值; 0x0000 | 2 | |
01BE | 0676 | 446 | 标准 MBR 分区表规划 (四个16 byte的主分区表入口) | 64 | |
01FE | 0776 | 510 | 55h | MBR 有效标志: 0x55AA | 2 |
01FF | 0777 | 511 | AAh | ||
MBR, 總大小: 446 + 64 + 2 = | 512 |
下面我们先来分析分区表,分区表的结构如下:
00H | 1 | 分区状态:00-->非活动分区;80--> 活动分区; 其它数值没有意义 |
01H | 1 | 分区起始磁头号(HEAD),用到全部8位 |
02H | 2 | 分区起始扇区号(SECTOR),占据02H的位0-5; 该分区的起始磁柱号(CYLINDER),占据 02H的位6-7和03H的全部8位 |
04H | 1 | 文件系统标志位 |
05H | 1 | 分区结束磁头号(HEAD),用到全部8位 |
06H | 2 | 分区结束扇区号(SECTOR),占据06H的位0-5; 该分区的结束磁柱号(CYLINDER),占据 06H的位6-7和07H的全部8位 |
08H | 4 | 分区起始相对扇区号 |
0CH | 4 | 分区总的扇区数 |
结合我的测试系统中的数值,对一条分区记录做分析:
00001b0 0000 0000 0000 0000 89db 0006 0000 0080
00001c0 0a81 fe83 ffff f58a 007f 3326 00a6 fe00
其中标黄的部分为第一条分区记录,与结构的对应如下:
偏移 | 数值 | 意义 |
0x00H | 0x80H | 活动分区 |
0x01H | 0x00H | 起始磁头号为00 |
0x02H(低6位) | 0x01H | 起始扇区号为01 |
0x02H(高2为)+0x03H | 0x020a | 柱面号为522 |
0x04H | 0x83 | Linux分区 |
0x05H | 0xfe | 磁头结束号为254 |
0x06H(低6位) | 0x3f | 结束扇区号为63 |
0x06H(高2位)+0x07H | 0x03ff | 柱面号为1023 |
0x08H | 0x007ff58a | 8385930 |
0x0CH | 0x00a63326 | 10892070 |
常用分区类型:
分区类型 | 含义 |
05 | 扩展分区 |
06 | FAT16 |
07 | NTFS |
08 | Windows 95 FAT32 |
0C | Windows 95 FAT32 |
0E | Windows 95 FAT16 |
0F | Windows 95 扩展分区 |
16 | 隐藏FAT16 |
17 | 隐藏NTFS/HPFS |
1B | 隐藏FAT32 |
1C | 隐藏FAT32 |
82 | Linux Swap分区 |
83 | Linux 分区 |
8e | Linux LVM物理卷 |
A6 | Open BSD |
Fd | Linux软件RAID 分区 |
其他的代码可在fdisk设置分区的类型的时候可以看到。