CentOS6.X系统启动流程

1.硬件启动阶段
BIOS自检
 BIOS的功能由两部分组成,分别是POST码和Runtime服务。POST阶段完成后它将从存储器中被清除,而Runtime服务会被一直保留,用于目标操作系统的启动。BIOS两个阶段所做的详细工作如下:
         步骤1:上电自检POST(Power-on self test),主要负责检测系统外围关键设备(如:CPU、内存、显卡、I/O、键盘鼠标等)是否正常。例如,最常见的是内存松动的情况,BIOS自检阶段会报错,系统就无法启动起来;
         步骤2:步骤1成功后,便会执行一段小程序用来枚举本地设备并对其初始化。这一步主要是根据我们在BIOS中设置的系统启动顺序来搜索用于启动系统的驱动器,如硬盘、光盘、U盘、软盘和网络等。我们以硬盘启动为例,BIOS此时去读取硬盘驱动器的第一个扇区(MBR,512字节),然后执行里面的代码。实际上这里BIOS并不关心启动设备第一个扇区中是什么内容,它只是负责读取该扇区内容、并执行。
至此,BIOS的任务就完成了,此后将系统启动的控制权移交到MBR部分的代码。
MBR引导
自检硬件没有问题时候,这里以BIOS为例,BIOS将会直接去找硬盘是硬盘的0柱面,0磁道、1扇区(第一个扇区),称为主引导扇区,也称为主引导记录,它由三部分组成:主引导程序(BootLoader)、硬盘分区表DPT(Disk Partition table)和硬盘有效标志(55AA)。
  注:硬盘默认一个扇区大小为512字节。
  第一部分,主引导程序(BootLoader)占446个字节,负责从活动分区中装载,并运行系统引导程序。
  第二部分,硬盘分区表DPT占64个字节,有4个分区表项,每个分区表项占16个字节,硬盘中分区有多少以及每一个分区的大小都记录在其中。
  第三部分,硬盘有效标志,占2个字节,固定为55AA。如果这个标志位0xAA55,就认为这个是MBR。
找到前446字节,将MBR加载到内存中,MBR将告诉程序下一阶段去哪里找系统grub引导。此阶段属于grub的第一阶段。grub还有1.5阶段和2阶段。
2.GRUB启动引导阶段
GRUB的主要作用是提供一个菜单,允许用户选择要启动系统或不同的内核版本,把用户选定的内核装载到内存的特定空间中,解压展开,并把系统控制权移交给内核,
3.内核引导阶段
简单说一下这一步的流程:通过内存中的虚拟根文件系统,加载驱动,然后切换到真正的根文件系统,并执行/sbin/init程序。
由于init是第一个运行的程序,它的进程编号(pid)就是1。其他所有进程都从它衍生,都是它的子进程。
4.系统初始化阶段
简单说一下这一步的流程:/sbin/init程序会读取/etc/inittab文件确认运行级别,然后执行/etc/rc.d/rc脚本,根据确认的运行级别启动对应/etc/rc.d/rc#.d/目录下的服务(#为0~6),与此同时执行系统初始化脚本/etc/rc.sysinit(软链接,指向/etc/rc.d/rc.sysinit),还会加载/etc/rc.local(软链接,指向/etc/rc.d/rc.local文件)用户自定义服务(脚本)。
  1、读取/etc/inittab文件
    inittab文件里面定义了系统默认运行级别,这一步做了一些工作如下:
        a)初始运行级别(RUN LEVEL)
        b)系统初始化脚本
        c)对应运行级别的脚本目录
        d)定义UPS电源终端/恢复脚本
        e)在虚拟控制台生成getty,以生成终端
        f)在运行级别5初始化X
    2、执行/etc/rc.d/rc.sysinit程序
    系统初始化一些脚本,主要完成以下工作
        a)设置主机名
        b)设置欢迎信息
        c)激活udev和selinux可以在grub.conf中,kernel行添加selinux=0以关闭selinux
        d)挂载/etc/fstab文件中定义的文件系统
        e)检测根文件系统,并以读写方式重新挂载根文件系统
        f)设置系统时钟
        g)激活swap设备
        h)根据/etc/sysctl.conf文件设置内核参数
        i)激活lvm及software raid设备
        j)加载额外设备的驱动程序
        k)清理操作
3、/etc/rc#.d/文件(各种服务)
在不同的运行级别下,/etc/rc.d/rc这个脚本会分别执行不同目录下的脚本
  • Run level 0 – /etc/rc.d/rc0.d/
  • Run level 1 – /etc/rc.d/rc1.d/
  • Run level 2 – /etc/rc.d/rc2.d/
  • Run level 3 – /etc/rc.d/rc3.d/
  • Run level 4 – /etc/rc.d/rc4.d/
  • Run level 5 – /etc/rc.d/rc5.d/
  • Run level 6 – /etc/rc.d/rc6.d/
一个数字代表一个运行级别,共7个运行级别
      里面定义的是各种服务的启动脚本,可以ls查看,
  • K开头的文件:要停止的服务(脚本),从01开始关闭,数字越小越优先关闭
  • S开头的文件:要启动的服务(脚本),从01开始启动,数字越小越优先启动
这些文件其实都是软链接,指向的都是/etc/rc.d/init.d/目录下的文件
4、/etc/rc.d/rc.local文件
    这里面可以自定义开机启动的命令。
5.启动终端
完成了系统所有的启动任务后,linux会启动终端或X-Window来等待用户登录。tty1,tty2,tty3...这表示在运行等级1,2,3,4的时候,都会执行"/sbin/mingetty",而且执行了6个,所以linux会有6个纯文本终端,mingetty就是启动终端的命令。
原文地址:https://www.cnblogs.com/--smile/p/11102521.html