bootloader:引导加载器和引导程序
Linux的bootloader:
LILO:Linux Loader 早期的bootloader
GRUB:GRand Unified Bootloader,是一个来自GNU项目的多操作系统启动程序,允许用户安装多操作系统,可在计算机启动时进行选择。
GRUB的启动阶段
1:Primary boot loader:俗称第一阶段,第一阶段分为1和1.5阶段
1 st stage:利用MBR的前446字节
1.5 stage:mbr之后的扇区,让stage1中的bootloader能够识别stage2所在分区上的文件系统
secondary boot loader:第二阶段
grub的第一阶段:
grub的第一阶段是通过MBR分区的前446字节来引导系统,这446字节标记了我们的boot分区在哪。然后通过加载boot分区来引导系统启动,但是boot是一个分区,那么该分区就存在文件系统,但是系统的文件系统时放在内核里面的,结果内核又需要boot分区来启动,这就陷入一个死循环了。为了解决该问题,就需要1.5阶段
grub的1.5阶段
grub的1.5阶段是通过硬盘的前1-2047扇区里面存放的信息来加载boot所需的文件系统的
通过上图可以看到,系统的前2047个扇区是不属于任何分区的,因此可以利用这2047个扇区来存放例如boot所需的文件系统等内容。加载完boot分区后就进入第二阶段
第二阶段
第二阶段通过读取grub.cfg文件来加载系统内核和挂载根文件系统。grub.cfg里面定义了加载哪个内核及内核得驱动程序等
以下是CentOS6得grub.cfg文件
Default=0表示默认找第一个title,一个title就代表一个内核,如果有多个,可以写多个title,其实title名称就是在启动得时候让我们选择得内核菜单得名字
root(hd0,0),root代表根,但是这里的root其实是把操作系统内核所在得分区(也就是boot)认为是根,hd0,0表示第一个硬盘得第一个分区
/vmlinuz-2.6.32.754.el6.x86_64 这里表示内核文件,可以看到是个绝对路径,但是这里得/不是真正得根,其实是/boot/
ro代表得是只读
initrd 后面得文件 代表 内核配置的ramfs文件,其实这里就是加载根得文件系统
完成阶段二后,会加载核心操作系统得核心信息,并开始驱动所有的硬件设备。