当我们在平常的工作学习的环境中使用linux时,我们只需要按一下开机键,系统就会自动为我们加

载好相关配置,然后为我们打开操作界面,那么在这个过程中究竟都发生了什么,如果系统突然起不来

了,那么到底是启动时的哪一部分发生了错误呢,下面,我们就来看看linux中的centos6启动的具体流

程。   

centos6启动流程大致分为以下这些步骤:

   

1.加电自检,得到BIOS的硬件信息,获取第一个启动设备

2.读取第一个启动设备MBR的引导加载程序(grub)的启动信息

3.加载核心操作系统的核心信息,核心开始解压缩,并尝试驱动所有的硬件设备

4.运行init程序

5.运行系统初始化脚本  /etc/rc.d/rc.sysinit

6.启动核心的外挂模块

7.init执行运行各个批处理文件

8.init执行/etc/rc.d/rc.local

9.执行/bin/login程序,等待用户登录

10.登陆之后,打印登陆提示符,并开始shell控制主机


下面我们来分别解释下每一步的具体细节


1.加电自检

 

   当我们按下电源键后,rom芯片中的CMOS程序开始执行并检测CPU,内存等设备是否存在并正常运 

行,CMOS中的程序叫做BIOS,可以设置硬盘接口,网卡声卡开关之类的简单设置。一般PC主机板上会有

一个纽扣电池,它的主要作用就是给BIOS供电,当系统由于突然停电或者其其他原因意外断电的时候,

这个纽扣电池可以保证主板在断电后BIOS的一些基本设置不会被重置。


2.读取MBR的启动信息


  计算机不是人类,他的所有操作都是认为的事先设定好的,所以当启动计算机的时候,它并不知道

系统放在哪里,我们需要告诉它,怎么告诉它呢,就是用程序引导它,这个程序叫做bootloader,不同

的操作系统的bootloader是不同的,windos使用的bootloader是ntloader,只能对windos系统进行引

导,而在linux中的bootloader叫做GRUB,它不仅可以对linux进行引导,也可以对windos进行引导,所

以在装windos和linux双系统的电脑的时候,要先装windos再装linux。

       MBR记录一般在磁盘0磁道1扇区,一共512个字节,前446个字节是Bootloder,后64个字节是存放

分区信息的,一共四个分区,每个分区占用16个字节,最后两个字节是分区结束信息,一般是55AA.

        所以,当加点自检完成后,会启动bootloader也就是grub程序,他会引导计算机到磁盘的第一个扇

区并加载MBR记录,然后按照MBR记录启动系统。


3.加载核心信息,尝试驱动所有的硬件设备

       

       当加载完MBR的启动信息后,系统会进行自身初始化,首先它会侦测所有可识别到的 

硬件设备,然后会借助于ramdisk加载硬件驱动程序,接着以只读方式挂载根文件系统,最

后运行用户空间的第一个程序/sbin/init。那么,什么是ramdisk呢?

         ramdisk是内核中的特性之一,它使用缓冲和缓冲加速来对硬盘上的文件进行访问,并

且加载相应的硬件驱动程序。


4.运行init程序


         init程序是系统启动的时候,第一个运行的程序,我们都知道任何程序都有自己的父程序,一旦父程

序被关闭,那么该程序也将无法运行,而init程序就是系统中所有程序的祖宗程序。


5.运行系统初始化脚本 

        

       当init程序启动后,它做的第一件事就是运行 /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) 清理操作

   

6.启动核心的外挂模块


7.init执行运行各个批处理文件


      当核心的外挂模块被启动后,init会执行各个批处理文件,这些批处理文件位于如下目录中


                wKiom1m8xwqwvSg-AAAbenn3R4U223.png-wh_50



      这些文件夹分别对应级别0到级别6,我们进入rc5.d中查看有哪些文件


                wKiom1m8yIOwY_lcAADjD38yUhg785.png-wh_50


  而如果我们使用ls -al命令查看,可以发现这些文件其实都是软连接


    wKioL1m8yR_wt2YQAAGQqj5KU5s990.png-wh_50

   

    他们其实都指向一个一个的服务脚本,其中K代表此服务开机不自动启动,S代表开机自动启动,

后面的数字代表了启动的顺序。


8.执行rc.local文件

          rc.local也是一个脚本。该脚本是在系统初始化级别脚本运行之后再执行的,因此我们可以安全地在里面添加在

系统启动之后执行的脚本。例如的我们可以在里面添加fstab挂载脚本。此外,我们可以在里面添加一些调试用的脚

本命令。

         rc.local脚本是在启动过程中较后执行的,在正常级别下,最后一个启动服务S99local是指向lrc.local脚本,我们

可以将不方便或者不需要写为服务脚本的脚本放置于rc.local文件中,他是用户自定义的一些设置。


9.执行/bin/login程序,等待用户登录


出现登陆界面,选择用户后,输入登录密码即可登录


10.登陆之后,打印登陆提示符,并开始shell控制主机