关于Linux系统下Grub启动流程的讨论总结

关于Linux系统下Grub启动流程的讨论总结

传统的启动流程:

加载并运行MBR->扫描分区表->定位活动分区->加载活动分区引导扇区内容(至内存)并执行

系统引导过程主要由以下几个步骤组成(以硬盘启动为例,红字表示安装grub过后的情况):

  1. 开机;
  2. BIOS加点自检(POST——Power On Self Test),内存地址为0FFF:0000
  3. 001扇区,也就是Boot Sector读入内存地址0000:7C00处;
  4. 检查(WORD00007dfe是否等于0xaa55(一点是小端,一点是表明头结束,的确取对了地方).若不等于则转去尝试其他介质;如果没有其他启动介质,则显示 "No ROM BASIC" ,然后死机;
  5. 跳转到00007c00处执行MBR中的程序;
  6. MBR先将自己复制到00000600处,然后继续执行;假如先装XP后装LINUX,并且LINUX没有装在MBR,那这个MBR中的数据还是WIN写的数据,它的作用都是下步中所说的作用,就是搜索主分区表中标志为活动的分区,那么这个时候就必须把GRUB所在的主分区设置为活动的分区,这个时候才能正常的启动GRUB,然后GRUBSTAGE1在调STAGE1.5和其他的,从而来引导整个系统。
    假如说先装XP后装LINUX,但是GRUB装在了MBR,那样STAGE1直接调入内存,STAGE1在调STAGE1.5STAGE2等,从而来引导系统。那这个时候是不需要将GRUB其他文件所在的主分区设为活动分区的,它直接调STAGE1.5等,然后再调STAGE2等,来识别文件系统,从而实现可多启动。
  7. 在主分区表中搜索标志为活动的分区。如果发现没有活动分区或者不止一个活动分区,则停止;
  8. 将活动分区的第一个扇区读入内存地址00007c00处;
  9. 检查(WORD00007dfe是否等于0xaa55,若不等于则显示 "Missing Operating System",然后停止,或尝试软盘启动;
  10. 跳转到00007c00处继续执行特定系统的启动程序;
  11. 启动系统。

你可能感兴趣的:(linux)