美文网首页
Linux启动过程

Linux启动过程

作者: 尛尛大尹 | 来源:发表于2017-08-30 20:33 被阅读0次

    1.Linux组成

    (1)Linux: kernel+rootfs
    • kernel:
    进程管理、内存管理、网络管理、驱动程序、文件系统、安全功能
    
    • rootfs:存放操作系统和应用有关的相关程序
      包括:
    库:函数集合, function, 调用接口(头文件负责描述)。.so动态库文件.a静态库文件
    过程调用:procedure,无返回值
    函数调用:function
    程序:二进制执行文件
    
    (2)内核设计流派:

    单内核(monolithic kernel): 把所有功能集成于同一个程序eg:Linux
    微内核(micro kernel):每种功能使用一个单独子系统实现eg:Windows, Solaris

    2.内核

    (1)Linux内核特点:

    支持模块化:.ko(内核对象)
    如:文件系统,硬件驱动,网络协议等
    支持内核模块的动态装载和卸载

    (2)组成部分:

    1.核心文件:/boot/vmlinuz-VERSION-release(就是我们常说的内核)
    2.ramdisk:
    辅助的伪根系统(又叫伪文件系统,放有ext4驱动,相当于开机时模拟一个磁盘)
    开机识别,进入boot,识别boot文件系统ext4,进而挂载根

    只存放与文件相关的文件
    CentOS 5: /boot/initrd-VERSION-release.img
    CentOS 6,7: /boot/initramfs-VERSION-release.img
    
    centos6,7文件分开放置
    CentOS 6,7: /boot/initramfs-VERSION-release.img只放启动相关文件
    模块文件:/lib/modules/VERSION-release
    
    Paste_Image.png Paste_Image.png

    3.CentOS6启动流程

    Paste_Image.png

    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控制主机

    • POST:Power-On-Self-Test
    加电自检,是BIOS功能的一个主要部分。负责完成对CPU、主板、内存、硬盘子系统、
    显示子系统、串并行接口、键盘、CD-ROM光驱等硬件情况检测。
    
    • ROM:BIOS,Basic Input and Output System
    保存着有关计算机系统最重要的基本输入输出程序,系统信息设置、
    开机加电自检程序和系统启动自举程序等。
    
    • RAM:
    CMOS互补金属氧化物半导体,保存各项参数的设定
    定义引导设备的顺序,第一个有引导程序的设备为本次启动设备
    
    • bootloader: 引导加载器,引导程序
    windows: ntloader,仅是启动OS
    Linux:功能丰富,提供菜单,允许用户选择要启动系统或不同的内核版本;把用户选定的内核装载到内存
    中的特定空间中,解压、展开,并把系统控制权移交给内核
    
    • MBR:
    446: bootloader, 64: 分区表, 2: 55AA标记位
    
    • GRUB:引导计算机程序
    stage1:grub有一部分放在BootLoader446字节里,用来引导计算机程序,称为grub的第一阶段 
    
    stage1.5:第一阶段只有446字节,不足以引导文件系统,所以会用得到1.5阶段,用于加载boot分区的文件系统,负责boot问题
    
    stage2:进入boot目录,可以进入boot/grub/grub.conf这个配置文件,这个文件包括计算机启动所用的程序,非常重要。包括内核kernel和伪文件系统文件,负责挂载根(该开机时会把boot识别为根)
    
    grub负责进入boot,initramfs负责挂载根
    刚挂载时,会把boot认为是根,然后启动内核后,以/为根,chroot切根
    
    • kernel:
    自身初始化:
    探测可识别到的所有硬件设备
    加载硬件驱动程序(借助于ramdisk加载驱动)
    以只读方式挂载根文件系统
    运行用户空间的第一个应用程序:/sbin/init
    
    • ramdisk:
    内核中的特性之一:使用缓冲和缓存来加速对磁盘上的文件访问,并加载相应的硬件驱动
    ramdisk --> ramfs 提高速度
    CentOS 5: initrd
    工具程序:mkinitrd
    CentOS 6,7: initramfs
    工具程序:mkinitrd, dracut
    
    • 系统初始化:
    POST --> BootSequence (BIOS) -->Bootloader(MBR) --> kernel(ramdisk) --> rootfs(只读) --> init(systemd)
    

    4.init程序的类型:

     CentOS 5之前:
                    第一个进程: init,
                    配置文件:/etc/inittab
    CentOS 6:
                   第一个进程:init,
                   配置文件:/etc/inittab, /etc/init/*.conf
      CentOS 7:
                   第一个进程:systemd,
                   配置文件:/usr/lib/systemd/system
                           /etc/systemd/system
    
    CentOS6之前  /sbin/init 
    运行级别:为系统运行或维护等目的而设定;0-6:7个级别
                0:关机
                1:单用户模式(root自动登录), single, 维护模式
                2 : 多用户模式,启动网络功能,但不会启动NFS;维护模式
                3:多用户模式,正常模式;文本界面
                4:预留级别;可同3级别
                5:多用户模式,正常模式;图形界面
                6:重启
     默认级别: 3, 5
     切换级别:init #
     查看级别:runlevel ; who -r
    

    5.init初始化

    (1)init读取其初始化文件:/etc/inittab
    (2)初始运行级别(RUN LEVEL)
    (3)系统初始化脚本
    (4)对应运行级别的脚本目录
    (5)捕获某个关键字顺序
    (6)定义UPS电源终端/恢复脚本
    (7)在虚拟控制台生成getty
    (8)在运行级别5初始化X

    Paste_Image.png

    6.CentOS 5的inittab文件

     配置文件:/etc/inittab
     每一行定义一种action以及与之对应的process
    id:runlevel:action:process

    action:动作
    wait: 切换至此级别运行一次
    respawn:此process终止,就重新启动之
    initdefault:设定默认运行级别;process省略
    sysinit:设定系统初始化方式,此处一般为指定


    Paste_Image.png

    7.CentOS 6 /etc/inittab和相关文件

     /etc/inittab
    设置系统默认的运行级别
    id:3:initdefault:
     示例:
    破解CentOS5和6的root口令

     /etc/init/control-alt-delete.conf
     /etc/init/tty.conf
     /etc/init/start-ttys.conf
     /etc/init/rc.conf
     /etc/init/prefdm.conf
    

    /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) 清理操作
     说明:rc N --> 意味着读取/etc/rc.d/rcN.d/
    K: K##(关闭):##运行次序;数字越小,越先运行;数字越小的服务,通常为依赖到别的服务
    S: S##(开机启动):##运行次序;数字越小,越先运行;数字
    越小的服务,通常为被依赖到的服务,数字的优先级比字母要高
    按照字符排序

    eg:

    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
    
    Paste_Image.png Paste_Image.png

    8.chkconfig命令

    (1)查看服务在所有级别的启动或关闭设定情形:

    chkconfig [--list] [name]
    

    (2)添加:

    SysV的服务脚本放置于/etc/rc.d/init.d (/etc/init.d)
    chkconfig --add name
    #!/bin/bash
    #LLLL 表示初始在哪个级别下启动,-表示都不启动
    # chkconfig: LLLL nn nn
    

    编写一个测试的服务:
    chkonfig:- 默认开机时所有模式下都不开启


    Paste_Image.png Paste_Image.png

    (3)删除:

    chkconfig --del name
    
    Paste_Image.png

    (4)修改指定的链接类型

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

    Paste_Image.png

    (5)ntsysv命令 一次只能修改一个级别
    Tab键选择OK或者Cencel
    空格键选择有没有*号,如果有星号,则启动,
    如果没有则在次级别下不启动

    Paste_Image.png Paste_Image.png

    9.xinetd管理的服务

    (1)service 命令:手动管理服务

    service 服务 start|stop|restart
    service --status-all

    (2)瞬态(Transient)服务(非独立服务)被xinetd进程所管理

    进入的请求首先被xinetd代理
    (配置文件:
    /etc/xinetd.conf 总配置文件
    /etc/xinetd.d/<service>)
    与libwrap.so文件链接
    用chkconfig控制的服务:chkconfig tftp on

    Paste_Image.png Paste_Image.png

    可以进入文件可以更改非独立服务状态,改过之后重启服务


    Paste_Image.png Paste_Image.png Paste_Image.png

    注意:

    (1)正常级别下,最后启动一个服务S99local没有链接至/etc/rc.d/init.d一 个服务脚本,而是指向了/etc/rc.d/rc.local脚本
    (2)不便或不需写为服务脚本放置于/etc/rc.d/init.d/目录,且又想开机时自动 运行的命令,可直接放置于/etc/rc.d/rc.local文件中
    • /etc/rc.d/rc.local在指定运行级别脚本后运行
    • 可以根据情况,进行自定义修改


    Paste_Image.png
    Paste_Image.png
     1:2345:respawn(激活):/usr/sbin/mingetty tty1
     2:2345:respawn:/usr/sbin/mingetty tty2
     ...
     6:2345:respawn:/usr/sbin/mingetty tty6
    mingetty会自动调用login程序
     x:5:respawn:/etc/X11/prefdm -nodaemon
    
    Paste_Image.png

    总结:

    /sbin/init --> (/etc/inittab) --> 设置默认运行级别 --> 运行系统初始脚本、完成系统初始化 --> (关闭对应下需要关闭的服务)启动需要启动服务 --> 设置登录终端
     CentOS 6 init程序为: upstart, 
    其配置文件:/etc/inittab, /etc/init/*.conf
    配置文件的语法遵循upstart配置文件语法格式,和CentOS5不同
    

    相关文章

      网友评论

          本文标题:Linux启动过程

          本文链接:https://www.haomeiwen.com/subject/wjwxjxtx.html