CentOS 6系统启动流程:

  

     Linux系统启动流程

       系统初始化流程如下:

        post-->bootsequence(bios)-->bootloader(mbr)-->kernel(ramdisk文件)-->只读装载根文件系统rootfs-->init

 

 CentOS6系统启动过程说明_CentOS6 

 

启动详解

        POST自检:

            系统接通电源时自动检测CPU,内存,主板,显卡,声卡,网卡等I/O设备,如果设备正常则进行下一启动步骤。

BOOTsequence(bios)

       通过加载可选择的启动设备,启动寻找第一个引导启动的设备。

BOOTloader(MBR)硬盘的主引导记录,存在于0磁道第0扇区,共512字节。其中Bootloader占据446字节,分区表占据64字节,magicnum占据2字节。Bootloader(内核加载器)位于第0磁道第0扇区的446字节是最前边的446字节,Bootloader的工作机制:bootloader可以访问文件系统,而内核则作为文件而存在。bootloader访问内核文件时,是将内核文件Vmlinz所在的整个分区当作根去访问的。我们常用的内核加载器是GRUBGrand Unified Bootloader),因此由grub来加载内核.

kernel(ramdisk文件):Linux属于单核系统:Kernel+各种外围模块组成,通过grub加载内核后,内核开始自我解压并工作,通过虚拟根文件系统initrfs 调用init工作。

INIT:init程序被内核第一个所调用,所以init的PID号为1,init调用其配置文件/etc/inittable和启动脚本/etc/init/rc#.conf,从而启动各个子进程,执行初始化系统脚本/etc/rc.d/rc.sysinit 来初始化脚本。

   INIT启动后执行的作业:

1、 读取/etc/inittab来读取默认级别;

启动级别定义如下: 

运行级别(由init决定):为了系统的运行或维护等应用目的而设定;

     0-67个级别:

      0:关机

      1:单用户模式:single,维护模式,为root用户无需登录

      2:多用户模式,会启动网络功能,但不会启动NFS网络访问,维护模式

      3:多用户模式:正常模式,文本界面,不启动图形桌面。

      4:多用户模式,预留级别,与3相同

      5:多用户模式:启动图形界面;

      6:重启系统

 默认级别: 3 5

/etc/inittab文件格式如下: id:3:initdefault:

2、 执行初始化系统脚本 /etc/rc.d/rc.sysinit 来初始化脚本;

        a.设置主机名

        b.设置欢迎信息

        c.激活udevselinux;

         d.挂载/etc/fstab文件中定义的文件系统;

        e.检测根文件系统,并以读写方式重新挂载根文件系统;

        f.设置系统时钟;

        g.激活swap设备

         h.根据/etc/sysctl.conf文件设置内核参数;

        i.激活lvm以及software raid设备;

        j.加载额外设备的驱动程序;

             k.清理操作;

3、  然后执行/etc/rc.d/rc#.d 脚本,默认会读取/etc/rc.d/rc3.d/下的所有脚本,来控制系统启动的时候启动或者关闭哪些服务。这里面的脚本大致分为以S 开头的和以 K 开头的脚本。 S 代表开机时启动的,K 表示开机时不启动。K##*: ##运行次序,数字越小越先运行;数字越小的服务,通常为依赖到别的服务;      

S##*:数字越小的服务,通常为被依赖的服务;

chkconfig命令:查看每个服务对应级别的开关,以及设置相关服务对应级别上的开关;

   增加服务:chkconfig–add  srv_name 可以将自己写的一些脚本,让此命令统一管理。

   删除服务:chkconfig–del   srv_name 将服务删除,意思就是服务不由chkconfig这种机制来管理 

chkconfigsrv_name {on|off} 设置服务开机是否自启动,默认管理的级别是2345. 

--level 2345等,指定默认级别,可以与其他选项一起使用

注意:正常级别下,最后启动的一个服务:S99local指向了/etc/rc.d/rc.local脚本,且有又想开机时自动运行的命令,可直接放置于/etc/rc.d/rc.local文件中;

4、执行/etc/rc.d/rc.local脚本,此脚本是启动过程中最后启动的一个脚本,然后会执行 /bin/login 登录用户

总结:  /sbin/init-->就是读取/etc/inittab文件-->设置默认运行级别-->运行系统初始化脚本,完成系统初始化-->关闭对应下需要关闭的服务,启动需要启动的服务-->设置登录终端