http://blog.csdn.net/aaronychen/article/details/2270048
1. MBR
主引导记录(Master Boot Record,缩写:MBR),又叫做主引导扇区
位址 | 描述 | 長度 (位元組) | |||
---|---|---|---|---|---|
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 |
启动代码
主引导记录最开头是第一阶段引导代码。其中的硬盘引导程序的主要作用是检查分区表是否正确并且在系统硬件完成自检以后将控制权交给硬盘上的引导程序(如GNU GRUB)。MBR是由分区程序(如Fdisk)所产生的,它不依赖任何操作系统,而且硬盘引导程序也是可以改变的,从而能够实现多系统引导。
[编辑]硬盘分区表
如果某一分区在硬盘分区表的信息如下硬盘分区表占据主引导扇区的64个字节(偏移01BEH--偏移01FDH),可以对四个分区的信息进行描述,其中每个分区的信息占据16个字节。具体每个字节的定义可以参见硬盘分区结构信息。下面是一个例子:
- 80 01 01 00 0B FE BF FC 3F 00 00 00 7E 86 BB 00
则我们可以看到,最前面的"80"是一个分区的激活标志,表示系统可引导[1];"01 01 00"表示分区开始的磁头号为1,开始的扇区号为1,开始的柱面号为0;"0B"表示分区的系统类型是FAT32,其他比较常用的有04(FAT16)、07(NTFS);"FE BF FC"表示分区结束的磁头号为254,分区结束的扇区号为63、分区结束的柱面号为764;"3F 00 00 00"表示首扇区的相对扇区号为63;"7E 86 BB 00"表示总扇区数为12289662。
对于现代大于8.4G的硬盘,CHS已经无法表示, BIOS使用LBA模式,对于超出的部分,CHS值通常设为 FEFFFF, 并加以忽略,直接使用08-0f的4字节相对值,再进行内部转换.
[编辑]结束标志字
结束标志字55,AA(偏移1FEH-偏移1FFH)是主引导扇区的最后两个字节,是检验主引导记录是否有效的标志。
主引导扇区的读取流程
- 系统开机或者重启。
- BIOS 加电自检 ( Power On Self Test -- POST )。BIOS执行内存地址为 FFFF:0000H 处的跳转指令,跳转到固化在ROM中的自检程序处,对系统硬件(包括内存)进行检查。
- 读取主引导记录(MBR)。当BIOS检查到硬件正常并与 CMOS 中的设置相符后,按照 CMOS 中对启动设备的设置顺序检测可用的启动设备。BIOS将相应启动设备的第一个扇区(也就是MBR扇区)读入内存地址为0000:7C00H 处。
- 检查0000:7DFEH-0000:7DFFH(MBR的结束标志位)是否等于55AAH,若不等于则转去尝试其他启动设备,如果没有启动设备满足要求则显示"NO ROM BASIC"然后死机。
- 当检测到有启动设备满足要求后,BIOS将控制权交给相应启动设备。启动设备的MBR将自己复制到0000:0600H处, 然后继续执行。
- 根据MBR中的引导代码启动引导加载程序。
引导加载程式(bootloader)於電腦或其他計算機應用上,是指引导操作系統启动的程序。啟動程式啟動方式與程序視應用機型種類。例如在普通PC上,引导程序通常分为两部分:第一阶段引导程序位于主引导记录,用于引导位于某个分区上的第二阶段引导程序,如NTLDR、GNU GRUB等。
引导加载程序之争:了解 LILO 和 GRUB
参考: http://www.ibm.com/developerworks/cn/linux/l-bootload.html
如果将grub写入mbr,bios就引导grub; 将winxp的引导代码写入mbr,bios就引导ntldr; 将dos的引导代码写入mbr,bios就引导dos;
1首先硬盘分区的优点和缺点有很多,这里Google一下Disk Partition Wiki。就能了解很多,至少我们都知道的是下面几条优点。
- 不同的操作系统可以安装在不同的分区里面,而且可以互相不影响。并且可以在不同的分区内使用不同的文件系统。
- 比如Linux里面可能需要一块swap分区,用于虚拟内存的硬盘交换。
- 还有可能由于一些安全的原因,需要将一些数据单独放到一个分区里面。
二.grub下的设备名称
IDE硬盘用hd开始,SCSI硬盘用sd开头。 软盘 用fd开头。命名和linux不大一样。是从0算起。 (hd0,0)。表示C盘。 (hd0,4)。表示D盘。当然这里指的是(第一个 逻辑分区 ,如果D盘也是 主分区 ,应该写成hd0,1) 系统的第一个硬盘驱动器表示成(hd0),其上的第一个分区表示为(hd0,0),也就是说对于硬盘,采用(hdx,y)的形式来表示,x、y都是从0开始计数的,x表示硬盘号,y表示分区号。 由于主分区只能有四个,所以第一硬盘的四个主分区分别用(hd0,0)~(hd0,3)来表示;逻辑分区则从(hd0,4)开始算,即第一逻辑分区用(hd0,4),第二逻辑分区用(hd0,5)来表示,依次类推。 一般机子的硬盘都是一个主分区,其余是逻辑分区。因此C盘用(hd0,0),D盘用(hd0,4)来表示。 光盘用(cd)表示,第一软驱用(fd0)表示。 文件的表示:( , ) /path/to/file 在Linux系统中,如ubuntu,(hdx,y)中的y是从1开始计数的。第一逻辑分区用(hd0,5),第二逻辑分区用(hd0,6)来表示装置 | Lilo | Grub |
IDE1 master | hda, hda1, hda2 | (hd0), (hd0,0), (hd0,1) |
IDE1 slave | hdb, hdb1, hdb2 | (hd1), (hd1,0), (hd1,1) |
IDE2 master | hdc, hdc1, hdc2 | (hd2), (hd2,0), (hd2,1) |
IDE2 slave | hdd, hdd1, hdd2 | (hd3), (hd3,0), (hd3,1) |