zoukankan      html  css  js  c++  java
  • CentOS系统启动流程

    1 CentOS系统

    1.1 Linux系统的组成部分:内核+根文件系统

    • 内核:进程管理、内存管理、网络协议栈、文件系统、驱动程序、安全功能
    • IPC:Inter Process Communication
      • 消息队列、semerphor、shm
      • socket

    1.2 运行中的系统环境可分为2层:内核空间、用户空间

    • 用户空间:应用程序 ( 进程或线程 )
    • 内核空间:内核代码 ( 系统调用 )

    1.3 内核设计流派

    1.3.1 单内核设计:把所有功能集中于同一个程序

    • Linux

    1.3.2 微内核设计:每种功能使用一个单独的子系统实现 ( 模块 )

    • Windows,Solaris

    1.3.4 Linux内核特点:

    • 支持模块化:.ko(kernel object)
    • 支持模块运行时动态装载或卸载
    • 组成部分:
      • 核心文件:/boot/vmlinuz-VERSION-release

        • vmlinuz --> z表示压缩的意思
      • ramdisk:

        • CentOS5:/boot/initrd-VERSION-release.img
        • CentOS6,7:/boot/initramfs-VERSION-release.img
      • 模块文件:/lib/modules/VERSION-release

    2 CentOS系统的启动流程

    2.1 POST:加电自检

    • ROM :CMOS
      • BIOS:Basic Input and Output System
    • ROM+RAM

    2.2 Boot Sequence

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

    2.3 bootloader:引导加载器,程序

    • Windows :ntloader

    • Linux:

      • LILO:LInux LOader
      • GRUB:Grand Uniform Bootloader
        • GRUB 0.x:Grub Legace
        • GRUB 1.x:Grub2
    • 功能:提供一个菜单,允许用户选择要启动的系统或不同的内核版本,把用户选定的内核装载到RAM中的特定空间中,解压、展开,而后把系统控制权转交给内核

    • MBR:Master Boot Record

      • 512bytes:
        • 446bytes:bootloader
        • 64bytes:磁盘分区
        • 2bytes:55AA(表示此磁盘为主引导盘或系统盘)
    • GRUB:

      • bootloader:1st stage (在mbr中)
      • Partition:filesystem driver 1.5 stage (mbr之后的扇区)
      • Partition:/boot/grub 2nd stage (在/boot/grub中)

    2.3 Kernel

    • 自身初始化:

      • 探测可识别到的所有硬件设备
      • 加载硬件驱动程序:( 有可能会借助于randisk加载驱动 )
      • 以只读方式挂载跟文件系统
      • 运行用户空间的第一个应用程序:/sbin/init
    • init程序的类型

      • CentOS5:SysV init
        • 配置文件:/etc/inittab
      • CentOS6:Upstart
        • 配置文件: /etc/inittab
        • /etc/init/*.conf
      • CentOS7:Systemd
        • 配置文件: /usr/lib/systemd/system
        • /etc/systemd/systemd
    • ramdisk:

      • Linux内核的特性之一:使用缓存和缓存来加速对磁盘文件的访问
        • ramdisk --> ramfs
        • CentOS5:initrd
          • 工具程序:mkinitrd
        • CentOS6,7:initramfs
          • 工具程序:dracut,mkinitrd

    2.4 系统初始化流程(内核级别)

    • POST --> Boot Sequence(BIOS) --> BootLoader(MBR) --> Kernel(ramdisk) --> rootfs(readonly) --> /sbin/init

    3 CentOS 5 6 7 系统/sbin/init

    3.1 CentOS5:SysV init

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

    • 0-6:7个级别
    0:关机 shutdown
    1:单用户模式(single user),只能root用户登录,无须认证(可用与忘记root密码);维护模式
    2:多用户模式(multi user),会启动网络功能,但不会启动NFS;维护模式
    3:多用户模式(multi user),完全功能,文本界面
    4:预留级别;目前无特别使用目的,但习惯以3级别功能使用
    5:多用户模式(multi user),完全功能模式,图像界面
    6:重启,reboot
    
    • 默认级别:3 ,5

    • 级别切换:# init NUM

    • 级别查看:

    who -r
    runlevel
    

    3.1.2 配置文件:/etc/inittab

    • 每行定义一种action以及与之对应的process
    id:runlevels:action:process
    
        id:一个任务的标识符
        runlevels:在哪些级别启动此任务;#,###,也可以为空:表示所有级别
        action:在什么条件下启动此任务
        process:任务
        action:
            wait:等待切换至此任务所在的级别时执行一次
            respawn:一旦此任务终止,就自动重新启动之
            initdefault:设定默认运行级别;此时,process省略
            sysinit:设定系统初始化方式,此处一般为指定/etc/rc.d/rc.sysinit脚本
    
    • 例如:
    id:3:initdefault
    si::sysinit:/etc/rc.d/rc.sysinit
    l0:0:wait:/etc/rc.d/rc 0
    l1:1:wait:/etc/rc.d/rc 1
    ......
    l6:6:wait:/etc/rc.d/rc 6
    
    - 意味着去启动或关闭/etc/rc.d/rc3.d/目录下的服务脚本所控制服务
        K*:要停止的服务;K##*,表示优先级,数字越小,越是优先关闭,依赖的服务先关闭,而后关闭被依赖的服务
        s*:要启动的服务,S##*,表示优先级,数字越小,越优先开启,被依赖的服务先启动,而依赖的服务后启动
    
    - rc脚本接收一个运行级别数字为参数
    
    1.脚本框架:
    
    for srv in /etc/rc.d/rc#.d/K*;do
        $srv stop
    
    done
    
    for srv in /etc/rc.d/rc#.d/S*;do
        $srv start
    done
    
    2./etc/init.d/*(/etc/rc.d/init.d/*)脚本执行方式:
    # /etc/init.d/SRV_SCRIPT {start|stop|restart|status}
    # service SRV_SCRIPT {start|stop|restart|status}
    
    3.chkconfig命令:管控/etc/init.d/每个服务在各级别下的启动或关闭状态
        查看:chkconfig --list [name]
    
        添加:chkconfig --add name
    
            能被添加的服务的脚本定义格式之一:
            
            #!/bin/bash
            #
            #chkconfig: LLL(默认在那些级别启动) NN(启动优先级)  NN(关闭优先级)
            #description:
            #LLLL :表示初始在哪个级别下启动,- 表示所有级别都不启动
    
        删除:chkconfig --del name
    
        修改指定的服务运行级别:
            chkconfig [--level LEVELS] name <on|off|reset>
                --level LEVELS:指定要控制的级别;默认为2345
                默认: chkconfig name on
                修改了服务优先级当前不会立即生效,下一次启动生效
    
    • 服务脚本示例
    [root@CentOS6 ~]# cat /etc/init.d/testsrv.sh 
    #!/bin/bash
    #chkconfig: 35 88 22
    #description:testsrv script
    case $1 in
    start)
            echo testsrv start
    ;;
    stop)
            echo testsrv stop
    ;;
    status)
            echo testsrv status
    ;;
    *)
            echo 'testsrv start | stop | status'
    ;;
    esac
    
    [root@CentOS6 ~]# chkconfig --add /etc/rc.d/init.d/testsrv      //添加服务脚本开机启动
    [root@CentOS6 ~]# chkconfig --list          //查看所有服务脚本
    [root@CentOS6 ~]# chkconfig --level 35 testsrv off     //在35模式下关闭服务脚本的开机启动
    [root@CentOS6 ~]# chkconfig --level 345 testsrv on      //在345模式下开启服务脚本的开机启动
    [root@CentOS6 ~]# chkconfig --del testsrv         //删除服务脚本的开机启动
    

    注意:正常级别下,最后启动的一个服务S99local没有链接至/etc/init.d下的某个文件,而是链接至了/etc/rc.d/rc.local(/etc/rc.local)脚本;因此,不便或不需写为服务脚本的程序期望能开启自动运行时,直接放置于此脚本文件中即可

    tty1:2345:respawn:/usr/sbin/mingetty tty1
    ......
    tty6:2345:respawn:/usr/sbin/mingetty tty6
    
    (1)mingetty会调用login程序
    
    (2)打开虚拟终端的程序除了mingetty之外,还有诸如getty等
    
    x:5:respawn:/etc/X11/prefdm -nodaemon
    启动图像终端X11,5级别特有
    

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

    (1)设置主机名
    (2)设置欢迎信息
    (3)激活udev和selinux
    (4)挂载/etc/fstab文件中定义的所有文件系统
    (5)检测根文件系统,并以读写方式重新挂载根文件系统
    (6)设置系统时钟
    (7)根据/etc/sysctl.conf文件来设置内核参数
    (8)激活lvm及软raid设备
    (9)激活swap设备
    (10)加载额外设备的驱动程序
    

    3.1.4 总结(用户空间的启动流程):/sbin/init(/etc/inittab)

    设置默认运行级别 --> 运行系统初始化脚本,完成系统初始化 --> 关闭对应级别下需要停止的服务,启动对应级别下要启动的服务 --> 设置登录终端 [ --> 启动图像终端 ]
    

    3.2 CentOS 6:Upstart

    3.2.1 init程序:Upstart,但依然被封装成了/sbin/init,

    • 其配置文件:/etc/init/*.conf ,/etc/inittab (仅用于定义默认运行级别)
    注意:*.conf为upstart风格的配置文件                
        重要的文件                
        /etc/init/control-alt-delete.conf:快捷键重启的脚本,建议注释掉,防止误操作
        /etc/init/tty.conf:重启终端脚本
        /etc/init/start-ttys.conf:登录终端脚本
        /etc/init/rc.conf:启动脚本
        /etc/init/prefdm.conf:图像界面脚本
    

    3.2.2 CentOS 6系统启动流程

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

    3.3 CentOS 7:Systemd

    3.3.1 init程序:Systemd

    其配置文件:/usr/lib/systemd/system/* ,/etc/systemd/system/*
    
    • 完全兼容SysV脚本机制;因此,service命令依然可用;不过,建议使用systemctl命令来控制服务
    # systemctl {start|stop|restart|status} name[.service]
    

    3.3.2 CentOS 7系统启动流程

    POST --> BootSequence(BIOS) --> BootLoader --> Kernel (ramdisk) --> rootfs --> /sbin/systemd
    
  • 相关阅读:
    Linux定时任务编写
    Linux编辑器的选择使用
    nginx配置中文域名解析
    Linux中统计某个文件夹的大小
    nginx配置文件的说明
    获取自身ip
    Python之时间模块、random模块、json与pickle模块
    python之os模块详解
    日志模块logging介绍
    Python面向过程、模块的使用
  • 原文地址:https://www.cnblogs.com/evescn/p/12193238.html
Copyright © 2011-2022 走看看