• Centos系统的启动流程

Linux组成

    Linux:kernel+rootfs

        kernel:进程管理,内存管理,网络管理,驱动程序,文件系统,安全功能

        rootfs:程序和glibc

            库:函数集合function,调用接口(头文件负责描述)

                    过程调用:procedure,无返回值

                    函数调用:function

            程序:二进制程序文件

内核

    内核设计流派

        单内核(monolithic kernel):Linux

            把所有功能集成于同一个程序

        微内核(micro kernel):Windows,Solaris

            每种功能使用一个单独子系统实现

    Linux内核特点

        支持模块化:.ko(内核对象);

            如:文件系统、硬件驱动、网络协议等

        支持内核模块的动态卸载和装载

        lsmod  列出当前系统加载到内存中的驱动模块

    组成部分

        核心文件:/boot/vmlinuz-VERSION-release

                ramdisk:辅助的伪根系统              

                   Centos 5:/boot/initrd-VERSION-release.img         ramdisk虚拟磁盘

                 Centos 6,7:/boot/initramfs-VERSION-release.img   ramfilesystem虚拟文件系统

        模块文件:/lib/modules/VERSION-release

Centos 6启动流程

    1、加载BIOS硬件信息,获取第一个启动设备       

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

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

    4、核心执行init程序,并获取默认运行信息

    5、init程序执行/etc/rc.d/rc.sysinit文件

    6、启动核心的外挂模块

    7、init执行运行的各个批处理文件(scripts)

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

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

    10、登录之后开始以Shell控制主机

Centos 6系统启动的大概流程

Linux启动及内核管理_系统启动流程

ramdisk

     ramdisk 内核中的特性之一:使用缓冲和缓存来加速对磁盘上的文件访问,并加载相应的硬件驱动

     ramdisk(Centos 5) --> ramfs(Centos 6,7) 提高速度

        Centos 5:initrd;工具程序  mkinitrd

        Centos 6,7:initramfs;工具程序  mkinitrd,dracut

系统初始化

    POST --> BootSequence(BIOS) --> Bootloader(MBR) --> kernel(ramdisk) --> rootfs --> init(systemd)

    ramdisk文件制作

        1、mkinitrd命令

            为当前正在使用的内核重新制作ramdisk文件

        mkinitrd /boot/initramfs-`uname -r`.img `uname -r`

        2、dracut命令

        dracut /boot/initramfs-$(uname -r).img $(uname -r)

  • 启程流程详解

   init部分

    init 程序

        类型

            Centos5之前

            SysV:init

        Linux启动及内核管理_故障解决_02

            Centos6

            Upstart:init

        Linux启动及内核管理_故障解决_03

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

            Centos7

            Sysetmd:systemd

        Linux启动及内核管理_故障解决_04

            配置文件:/usr/lib/systemd/systemd

                             /etc/systemd/system

   /sbin/init  Centos 6之前

        运行级别:为系统运行或维护等目的而设定

                0-6:7个级别

            0:关机

            1:单用户模式single,维护模式;root自动登录;维护模式

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

            3:多用户模式,正常模式;字符界面

            4:预留级别

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

            6:重启

        默认级别:3,5

        切换级别:init #

        查看级别:runlevel;who -r

    注意:默认运行级别可修改,但不要修改为0或6

init初始化

    init读取其初始化文件:/etc/inittab

       初始运行级别 

       系统初始化脚本

       对应运行级别的脚本目录

       捕获某个关键字顺序

       定义UPS电源终端/恢复脚本

       在虚拟控制台生成getty

       在运行级别5初始化X

Centos 5 /etc/inittab文件

    配置文件:/etc/inittab

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

            id:runlevel:action:process

            action:

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

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

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

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

        id:5:initdefault:   默认运行级别为5

        si::sysinit:/etc/rc.d/rc.sysinit    系统初始化脚本为/etc/rc.d/rc.sysinit

        l0:0:wait:/etc/rc.d/rc 0    7个级别需要启动的服务scripts放置路径

        l1:1:wait:/etc/rc.d/rc 1

        ....

        l6:6:wait:/etc/rc.d/rc 6

    通过/etc/rc.d/rcN.d/下所有链接文件来决定如何启动或关闭服务;所有以S开头的,都被传递start参数以启动;所有以K开头的,都被传递stop参数以停止

    注意:rc N --> 读取/etc/rc.d/rcN.d/

        K*:K##*:##运行次序;数字越小,越先运行;数字越小的服务,通常为依赖到的别的服务

        S*:S##*:##运行次序;数字越小,越先运行;数字越小的服务,通常为被依赖到的服务

           例:运行apache服务,先得启动网络服务;关闭时反之,先关apache服务,再关闭网络服务

            for srv in /etc/rc.d/rcN.d/K*;do

                    $srv stop

            done

            for srv in /etc/rc.d/rcN.d/S*;do

                    $srv start

            done

    注意:正常级别下,最后启动一个服务S99local没有链接至/etc/rc.d/init.d一个服务脚本,而是指向了/etc/rc.d/rc.local脚本;不便或是不需写为服务脚本放置于/etc/rc.d/init.d/目录,且又想开机时自动运行的命令,可直接放置于/etc/rc.d/rc.local文件中

    Linux启动及内核管理_故障解决_05

        ca::ctrlaltdel:/sbin/shutdown -t3 -r now    是否允许按下ctrl+alt+delete重新系统

        pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"    不间断电源断电关机

        pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"    不间断电源恢复供电时不重启

        1:2345:respawn:/sbin/mingetty tty1    启动6个终端

        ...

        6:2345:respawn:/sbin/mingetty tty6    mingetty会自动调用login程序

        x:5:respawn:/etc/X11/prefdm -nodaemon   在5模式下会启动图形界面                 

Centos 6 /etc/inittab和相关文件

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

Linux启动及内核管理_故障解决_06

    /etc/inittab 

        id:3:initdefault:  设置系统默认运行级别

    /etc/init/control-alt-delete.conf

    /etc/init/tty.conf

    /etc/init/start-ttys.conf

注意:Centos 6的init程序为:upstart;配置文件:为/etc/inittab,/etc/init/*.conf 配置文件遵循upstart配置文件语法格式与Centos 5不同

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

服务管理

    服务

        独立服务管理

            chkconfig命令

                chkconfig [--list] [name]  查看服务在所有级别的启动或关闭设定情形

                chkconfig --add name 添加服务;SysV服务脚本放置于/etc/rc.d/init.d(/etc/init.d)

                chkconfig --del name  删除服务

                chkconfig [--level levels] name <on|off|reset>  指定要设置的级别;忽略时表示2345

            ntsysv命令

       非独立服务,瞬态服务(Transient):进入的请求首先被xinetd代理

            1、service命令:手动管理服务

                    service 服务 start|stop|restart

                    service --status-all 显示当前状态的所有服务

            2、服务被xinetd进程所管理

                    配置文件:/etc/xinetd.conf, /etc/xinetd.d/<service>

                    与libwrap.so文件链接  用chkconfig控制的服务:chkconfig tftp on

   系统判断服务是否启动:如果/var/lock/subsys/有对应的服务名命名的文件,系统就认为服务已启动;没有则服务没有启动

总结

    /sbin/init --> (/etc/inittab) --> 设置默认运行级别 --> 运行系统初始化脚本,完成系统初始化 --> (关闭对应级别下需要关闭的服务)启动需要启动的服务 --> 设置登录终端

grub legacy

    grub配置文件:/boot/grub/grub.conf --> /etc/grub.conf

    grub:GRand Unified Bootloader

        grub legacy

            stage1:mbr

            stage1_5:mbr之后的扇区,让stage1中的bootloader能识别stage2所在的分区上的文件系统

            stage2:磁盘分区(/boot/grub/)

grub legacy 配置文件

Linux启动及内核管理_系统启动流程_07

    default=#    默认启动菜单项;编号从0开始

    timeout=#    用户选择grub选项时的超时时间

    splashimage=(hd#,#)/PATH/TO/XPM_FILE.gz    菜单背景图片文件路径

    hiddenmenu    隐藏菜单

    password [--md5|--encrypted ] STRING: 启动选定的内核或操作系统时进行认证

    title TITLE    菜单标题

        root  (hd0,0)    查找stage2及kernel文件所在设备分区;为grub的根

        kernel  /PATH/TO/vmliuz_file    启动的内核

        initrd    /PATH/TO/initramfs_file    内核匹配的ramfs文件