CentOS 启动流程

          p_w_picpath

POST --> Boot Sequence(BIOS) --> Boot Loader (MBR) --> Kernel(ramdisk) --> rootfs --> switchroot --> /sbin/init -->(/etc/inittab, /etc/init/*.conf) --> 设定默认运行级别 --> 系统初始化脚本 --> 关闭或启动对应级别下的服务 --> 启动终端

POST

    加电自检

BOOT Sequence

    按次序查找各引导设备,第一个有引导程序的设备即为本次启动用到设备

MBR引导

    MBR记录一般是在磁盘 0 磁道 1 扇区,共512个字节。前446个字节是BootLoder,后 4*16 的 64 个字节是存放分区信息的,最后 2 个字节是校验信息,一般是 55AA

启动BootLoder

    grub:提供一个菜单,允许用户选择要启动系统或不同的内核版本;把用户选定的内核装载到内存中的特定空间中,解压、展开,并把系统控制权移交给内核

加载kernel

   内核加载后,操作系统接管硬件,然后进行自身初始化

    探测可识别到的所有硬件设备

    加载硬件驱动程序

    以只读方式挂载根文件系统

    运行用户空间的第一个应用程序:/sbin/init

    其中init在不同的CentOS版本中类型不同

         SysV: init, CentOS 5  配置文件:/etc/inittab

         Upstart: init, CentOS 6   配置文件:/etc/inittab, /etc/init/*.conf

         Systemd:systemd, CentOS 7    配置文件:/usr/lib/systemd/system, /etc/systemd/system

    另外/sbin/init 分为7个运行级别

            0:关机

            1:单用户模式(root, 无须登录), single, 维护模式

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

            3:多用户模式,正常模式;文本界面

            4:预留级别;可同3级别

            5:多用户模式,正常模式;图形界面

            6:重启

    init进程首先读取文件 /etc/inittab配置文件

       每一行定义一种action以及与之对应的process

        id:runlevel:action:process

           action:

              wait: 切换至此级别运行一次

              respawn:此process终止,就重新启动之

              initdefault:设定默认运行级别;process省略

              sysinit:设定系统初始化方式,此处一般为指定/etc/rc.d/rc.sysinit

    /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) 清理操作

每个运行级别在/etc目录下面,都有一个对应的子目录,指定要加载的程序

       /etc/rc0.d
       /etc/rc1.d
       /etc/rc2.d
       /etc/rc3.d
       /etc/rc4.d
       /etc/rc5.d
       /etc/rc6.d

设置登录终端