CentOS系统启动流程——深入了解linux

CentOS系统启动流程


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

     内核:进程管理、内存管理、网络协议栈、文件系统、驱动程序、安全功能

             IPC:Inter Process Communication

                     消息队列、semerphor、shm

                     socket

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

         用户空间:应用程序 ( 进程或线程 )

         内核空间:内核代码 ( 系统调用 )

·内核设计流派:

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

                 Linux

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

                 Windows,Solaris

        ·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

CentOS系统的启动流程:


·POST:加电自检

         ROM :CMOS

                 BIOS:Basic Input and Output System

        

         ROM+RAM

·Boot Sequence:

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

·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中)

·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

系统初始化流程(内核级别):POST –> Boot Sequence(BIOS) –> BootLoader(MBR) –> Kernel(ramdisk) –> rootfs(readonly) –> /sbin/init

/sbin/init:


CentOS5:SysV init


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

         ·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

·配置文件:/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级别特有

        

         ·系统初始化脚本:/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)加载额外设备的驱动程序

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


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

CentOS 6:Upstart


·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:图像界面脚本

CentOS 7:Systemd


·init程序:Systemd

        其配置文件:/usr/lib/systemd/system/* ,/etc/systemd/system/*

·完全兼容SysV脚本机制;因此,service命令依然可用;不过,建议使用systemctl命令来控制服务

        # systemctl {start|stop|restart|status} name[.service]

CentOS 6系统启动流程:


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

启动流程.png

QQ图片20160913110132.jpg

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

(0)
上一篇 2016-09-11 16:54
下一篇 2016-09-11 17:13

相关推荐

  • Linux创建CA和申请认证

    Linux创建CA和申请认证 背景: 在学习Linux运维中,学习到了CA的创建和申请认证,为了加深对CA的理解,这里做一个创建CA和申请认证的实验并记录下来供以后回顾。 介绍: 什么是CA认证? 电子商务认证授权机构(CA, Certificate Authority),也称为电子商务认证中心,是负责发放和管理数字证书的权威机构,并作为电子商务交易中受信任…

    2017-09-09
  • N28-第二周作业

    1、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。
    2、bash的工作特性之命令执行状态返回值和命令行展开所涉及的内容及其示例演示。
    3、请使用命令行展开功能来完成以下练习:
    (1)、创建/tmp目录下的:a_c, a_d, b_c, b_d
    (2)、创建/tmp/mylinux目录下的:
    mylinux/
    ├── bin
    ├── boot
    │   └── grub
    ├── dev
    ├── etc
    │   ├── rc.d
    │   │   └── init.d
    │   └── sysconfig
    │   └── network-scripts
    ├── lib
    │   └── modules
    ├── lib64
    ├── proc
    ├── sbin
    ├── sys
    ├── tmp
    ├── usr
    │   └── local
    │   ├── bin
    │   └── sbin
    └── var
    ├── lock
    ├── log
    └── run
    4、文件的元数据信息有哪些,分别表示什么含义,如何查看?如何修改文件的时间戳信息。
    5、如何定义一个命令的别名,如何在命令中引用另一个命令的执行结果?
    6、显示/var目录下所有以l开头,以一个小写字母结尾,且中间至少出现一位数字(可以有其它字符)的文件或目录。
    7、显示/etc目录下,以任意一个数字开头,且以非数字结尾的文件或目录。
    8、显示/etc目录下,以非字母开头,后面跟了一个字母以及其它任意长度任意字符的文件或目录。
    9、在/tmp目录下创建以tfile开头,后跟当前日期和时间的文件,文件名形如:tfile-2016-05-27-09-32-22。
    10、复制/etc目录下所有以p开头,以非数字结尾的文件或目录到/tmp/mytest1目录中。
    11、复制/etc目录下所有以.d结尾的文件或目录至/tmp/mytest2目录中。
    12、复制/etc/目录下所有以l或m或n开头,以.conf结尾的文件至/tmp/mytest3目录中。

    Linux干货 2017-12-11
  • 8.1_Linux管道的使用和用户管理

    什么是管道? 管道就是把命令1的标准输出发送给命令2的标准输入,把命令2发的标准输出发送给命令3的标准输入。。。 最后一个命令会在当前shell进程的子shell进程中执行用来 管道实现了使用目的单一的小程序,组合小程序完成复杂的任务 管道需要配合其他命令的使用 tr命令的使用,常常用于配合管道     -c或–co…

    Linux干货 2016-08-10
  • 第四周(1):课堂练习与作业

    课堂练习: 1、删除/etc/grub.conf文件中所有以空白开头的行行首的空白字符 [root@centos6 ~]# sed 's@^[[:space:]]\+@@' /etc/grub.conf 2、删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行的行首的#和空白字符 …

    Linux干货 2016-08-10
  • MYSQL数据库基础教程

    一、数据库介绍 1.数据库管理系统的产生背景 (1)数据时代的到来要求对数据进行有效和安全的管理 涉及的数据量大 数据不随程序的结束而消失 数据被多个应用程序共享 大数据时代的到来 (2)传统文件系统管理上的缺陷要求改变数据管理方式 编写应用程序不方便 数据冗余不可避免 应用程序依赖性 不支持对文件的并发访问 数据间联系弱 难以按用户视图表示数据 无安全控制…

    Linux干货 2017-10-05
  • 系统基础之vim工具详解

    vim工具详解 作为运维人员,每天要面对大量的文件操作,如何使用一个功能强大,操作快捷的文本编辑器,就至关重要.那天,今天给大家详细的介绍下vim这款编辑器,完全符合我们的要求,下面让我们一起来看看吧! 概论:  文本编辑器:  文本:纯文本信息,   ASCII text:  纯粹的,不加修饰的文字  文本…

    Linux干货 2016-08-10