CentOS 6中所采用的Bootloader程序为grubinitupstart。开机启动的大致流程图如下:


CentOS 6 系统启动流程_linux 

步骤图分解如下:

1、加电自检,当按下电源时,计算机通过BIOS去加载CMOS的信息,取得主机的各项硬件配置,并会进行硬件检测和硬件初始化。

 

2BIOS根据Boot Sequence(设备启动次序)取得第一个可启动设备。按次序查找,如果当前设备没有MBR时,跳过当前设备查找下一个设备,直到找到含有MBR的设备。如果MBR出现损坏等故障,启动则会失败,且不会继续往下查找可引导的设备。否则,进行下一步操作。

 

3BIOS会读取选定设备的MBR中的信息,并加载Bootloader。只要BIOS能识别硬盘,就可以通过硬件的INIT 13中断功能读取硬盘设备的第一个扇区内的MBR

       由于根据MBR的结构Bootloader占据了446字节,而存储在MBR中的bootloader代码因此受到了限制,为了解决这个问题,bootloader将功能切割成几个部分,因此MBR中只存储了bootloader的主程序,配置相关文件则存储在文件系统中。

       grup的功能由三个模块完成:Stage1Stage1_5Stage2Stage1即存储在MBR中的BootloaderStage1_5存储在MBR后面的扇区中,而Stage2则一般存储于文件系统中,/boot目录下。Stage1Stage1_5所要完成的任务是去加载Stage2Stage2才是功能实现的模块。Stage1并不能识别文件系统,因此需要加载Stage1_5,而Stage1_5具备识别文件系统的功能,因此可以到文件系统中加载Stage2模块。注意:当Stage1可以识别Stage2固定存储的物理空间时,不需要通过Stage1_5就可以直接加载Stage2

Stage2加载相关的配置文件后,实现的功能如下:

  • 提供选择菜单,并提供交互式接口。

用户可以选择不同的启动选项,可实现多重引导功能;码。

  • 加载内核文件(或initramfs

直接指向内核文件所在的位置来开始启动操作系统。

  • 转交其他loader

将引导功能移交给其他的loader负责。

 

4kernel被加载到内存后开始进行自身初始化,主要操作为:探测可识别到的所有硬件设备并加载相应的硬件驱动;安全起见,以只读方式挂载根文件系统, (等到启动完成,各项功能正常,再重新以读写方式挂载);调用用户空间的第一个应用程序/sbin/init 。

   因为kernel无法识别磁盘,所以要借助initramfs的获取磁盘的驱动程序。 initramfs类似一个精简的内核,里面包含了启动过程中所需要的模块(在安装系统的时候确定了需要哪种硬盘驱动,也一并集成到initramfs中)。initramfs需不需要被加载取决于kernel能否识别磁盘,一般来说需要init的时刻为:

  •   根目录所在磁盘为SATASCSISASUSB等接口,IDE除外

  •   根目录所在文件系统为LVMRAID等格式

  •   其他必须在内核加载时就提供的模块

   

5init最主要的功能是准备软件执行的环境,调用执行相关脚本文件来实现,

      如/etc/inittab、/etc/init/*.conf等

  •  获取默认运行级别,/etc/inittab

  •  系统初始化,/etc/rc.d/rc.systinit

  •  关闭或启动对应级别下的服务,并启动启动终端等,/etc/init/*.conf与/etc /rc.d/rc#.d


/etc/rc.d/rc.sysinit初始化时所进行的操作

(1) 设置主机名

(2) 设置欢迎信息

(3) 激活udev和selinux

(4) 挂载/etc/fstab文件中定义的文件系统

(5) 检测根文件系统,并以读写方式重新挂载根文件系统

(6) 设置系统时钟

(7) 激活swap设备

(8) 根据/etc/sysctl.conf文件设置内核参数

(9) 激活lvm及software raid设备

(10) 加载额外设备的驱动程序

(11) 清理操作