Linux系统启动流程初识

centos系统启动流程

本篇仅仅讲解centos5和6

centos7并不适用

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

内核功能:

  • 进程管理

  • 内存管理

  • 网络管理

  • 驱动程序

  • 文件系统

  • 安全功能

有以下目录结构的文件系统可以被识别为根文件系统,但根文件系统本身不存在

rootfs:/bin/ /sbin /etc/ /sys/ /proc/ /lib /dev/ /sys /tmp /boot/...

内核:

Linux内核特点:

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

组成部分:

核心文件:/boot/vmlinuz-VERSION-release
    ramdisk:辅助的伪根文件系统
    centos 5:/boot/initrd-Vsersion-release.img
    centos 6:/boot/initramfs-Version-release.img
模块文件:/lib/modules/VSERSION-release

centos6启动流程

1.加载BIOS的硬件信息,获取第一个启动设备。
2.读取第一个启动设备MBR的引导加载程序(grub)的启动信息
3.加载核心操作系统的核心信息,核心开始解压缩,并尝试驱动所有的硬件设备。
4.核型执行init程序并获取运行信息。
5.Init执行/etc/rc.d/rc.sysinit文件。
6.Init执行运行的各个批处理文件(scripts).
7.Init执行/etc/rc.d/rc.local.
8.执行/bin/login程序,等待用户登录。
9.登录之后开始以Shell控制主机。

Linux系统启动流程初识

Linux系统启动流程初识

下面我们来分别介绍上述的步骤

1、POST

power-on-self-test,加电自检,是BIOS功能的一个主要部分,负责完成对CPU、主板、内存、硬盘子系统、显示子系统、串并行接口、键盘、等硬件情况的检测

    ROM:BIOS,,保存着有关计算机系统最重要的基本输入输出程序,系统信息设置、开机加电自检程序和系统启动自举程序等。
    RAM::CMOS互补金属氧化物半导体,保存各项参数的设定

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

2、bootloader: 引导加载器,引导程序

windows: ntloader,仅是启动OS
Linux:功能丰富,提供菜单,允许用户选择要启动系统或不同的内核版本;把用户选定的内核装载到内存中的特定空间中,解压、展开,并把系统控制权移交给内核
    LILO:LInuxLOader
    GRUB: GRandUnified Bootloader
    GRUB 0.X: GRUB Legacy,GRUB2

    1st stage:位于MBR中,为了引导2nd stage
    1.5 stage:位于mbr之后的扇区,不属于任何分区,为识别内核文件所在的文件系统提供文件识别扩展
    2nd stage:位于boot基本磁盘分区中,GRUB的引导程序

3、kernel阶段

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

ramdisk:
内核中的特性之一:使用缓冲和缓存来加速对磁盘上的文件访问
ramdisk--> ramfs提高速度
CentOS 5: initrd, 工具程序:mkinitrd
CentOS 6: initramfs,工具程序:mkinitrd, dracut

4、init程序类型:

centos 5:sysV init
配置文件:/etc/inittab
centos 6:upstart
配置文件:/etc/inittab   /etc/init/*.conf

    运行级别:为了系统的运行或维护等目的而设定的机制
        0-6:7个级别
            0:关机,shutdown # init 0
            1:单用户模式(signal user),root用户,无须认证;维护模式
            2:多用户模式(multi user),会启动网络功能,但不会启动NFS;维护模式
            3:多用户模式(multi user),完全功能模式;文本界面
            4:预留级别:目前无特别适用目的,但习惯以同3级别功能使用
            5:多用户模式(multi user),完全功能模式,图形界面
            6:重启,reboot

    默认级别:3,5
    级别切换:# init #
        级别查看:
            # who -r
            # runlevel


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

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

            id:一个任务的标识符
            runlevels:在那些级别启动此任务;#,###,标识所有级别
            action:在什么条件下启动此任务
            process:任务

        action:
            wait:等待切换至此任务所在的级别时执行一次;
            respawn:一旦此任务终止时,就自动重新启动之
            initdefault:设定默认运行级别;此时,process省略
            sysinit:设定系统初始化方式,此处一般为指定/etc/rc.d/rc.sysinit脚本

Linux系统启动流程初识

5、系统初始化脚本:/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)加载额外设备的驱动程序
(11)清理操作

6、关闭对应级别下需要停止的服务,启动对应级别下需要开启的服务

    l0:0:wait:/etc/rc.d/rc 0
    l1:1:wait:/etc/rc.d/rc 1
    l2:2:wait:/etc/rc.d/rc 2
            ...
    l6:6:wait:/etc/rc.d/rc 6
        意味着去启动或关闭/etc/rc.d/rc#.d/目录下的服务脚本所控制的服务
            K*:要停止的服务;K##,优先级,数字越小,越是先关闭,依赖的服务先关闭,而后关闭被依赖的
            S*:要启动的服务;S##;优先级;数字越小,越是优先启动,被依赖的服务先启动,而依赖的服务后启动

                rc脚本:接受一个运行级别数字为参数

                    脚本框架:
                        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

                    /etc/init.d/* (/etc/rc.d/init.d/*)脚本执行方式:
                        # /etc/init.d/SRV_SCRIPT { start | stop restart | status }
                        # service SRV_SCRIPT  { start | stop restart | status }

7、/etc/rc.d/rc.local

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

/etc/rc.d/rc.local在指定运行级别脚本后运行
可以根据情况,进行自定义修改

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

9、登录

用户输入正确的用户名和密码后便可以以shell控制主机

下面来进行下简单的总结:

内核级别的初始化流程:

POST --> bootsequence(BIOS) --> bootloader(MBR) --> kernel(ramdisk) --> rootfs(readonly) --> /sbin/init

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

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

原创文章,作者:sixijie,如若转载,请注明出处:http://www.178linux.com/45395

(0)
sixijiesixijie
上一篇 2016-09-11 13:19
下一篇 2016-09-11 15:32

相关推荐

  • 第五周作业

    1. 显示当前系统上root、fedora或user1用户的默认shell; grep -E "^(root|centos|user1)\>" /etc/passwd 或 awk -F: '{if($1=="root" || $1==…

    Linux干货 2017-01-10
  • 20 shell脚本编程1

    20 shell脚本编程1 一、杂项知识整理 1、脚本文件格式:     #!/bin/bash     (注释信息:)     #description:say hello     #vesion:…

    Linux干货 2016-08-11
  • 第一篇博客 简单说下最近的学习心得吧

        今天是个特殊的日子, 来到马哥教育已经一周时间了,刚来的时候满环信心,感觉人生充满了希望,但是接下来的学习让我感受到了什么是绝望,刚开始的两天完全是一种朦胧的状态,不知道干什么,敲得命令也不理解,完全是生搬硬套,没有自己的认知,当时就有一种冲动想要一走了之,后来想想算了 ,然后就坚持到了现在,此时感觉当时的决定是对的,经过一周的学…

    2017-07-15
  • Mysql之运用MHA的功能实现服务高可用

    MHA介绍 (Master High Availability) MHA(Master HA)是一款开源的 MySQL 的高可用程序,它为 MySQL 主从复制架构提供 了 automating master failover 功能。MHA 在监控到 master 节点故障时,会提升其中拥有最新数据的 slave 节点成为新的 master 节点,在此期间,…

    2017-09-14
  • yum命令用法及源码的编译

     一:yum 何为yum? yum是rpm的前端程序,可解决软件包相关依赖性,可在多个库之间定位软件包,是up2date 的替代工具。 1.命令格式:     yum [options] [command] [package …] 2.yum客户端配置文件: 公共配置文件:/etc/yum.conf   &…

    Linux干货 2017-08-19
  • tar ,cpio打包解压. shell脚本for,while,until循环. rpm包管理,循环的特殊用法. select循环菜单,函数function,rpm包查询,yum

    tar  tar -cf 路径+文件名字后续.tar  +路径 创建归档压缩 tar cf /testdir/etc.tar /etc/ tar cvf 可以查看解压过程 tar tvf 预览作用 tar xvf 解压文件  tar zcvf /testdir/etc2.tar.gz /etc/ 解压再压缩到指定路径,文件格式 …

    Linux干货 2016-08-21

评论列表(1条)

  • 1613827154
    1613827154 2016-09-13 01:44

    总结的好清楚 学习了