CentOS系统启动流程

目录

一、启动流程

1.内核设计流派

2.Linux内核特点

3.CentOS 系统启动流程

二、CentOS 5和CentOS 6的启动流程

1.CentOS 5

总结

2.CentOS 6

回顾

参考资料

一、启动流程

      Linux:kernel+rootfs

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

rootfs:根文件系统

            glibc:系统调用的再封装

            库:函数集合, function, 调用接口

                  过程调用:procedure,没返回值

                  函数调用:function,有返回值

P.S. 库也是二进制文件,但没有独立的执行入口

            程序

1.内核设计流派

单内核设计:Linux

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

微内核设计:Windows, Solaris

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

2.Linux内核特点

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

            支持模块的动态装载和卸载,e.g.由硬件厂商自行设计的驱动、文件系统模块化、TCP/IP协议栈

 

            组成部分:

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

CentOS系统启动流程_第1张图片

                       ramdisk:

                             CentOS 5:/boot/initrd-VERSION-release.img

                             CentOS 6:/boot/initramfs-VERSION-release.img

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

CentOS系统启动流程_第2张图片

CentOS系统启动流程_第3张图片

3.CentOS 系统启动流程

BIOS:Basic Input and Output System基本输入输出系统 固化在ROM或NvRAM里的程序,(P.S. 计算机整个地址空间由ROM+RAM组成)其执行的功能有

      ①加载并读取位于主板南桥芯片组里的CMOS里的电脑配置信息

②接着进行POST(Power-On Self Test):加电自检

③然后根据BOOT Sequence:系统引导加载次序(按次序查找各引导设备,第一个有引导程序的设备即为本次启动用到设备)从启动设备中读取MBR(主引导记录)

在MBR中存储了bootloader、分区表、BRID

bootloader:引导加载器,程序,占用446个字节

                       windows:ntloader

                       Linux:

                             LILO:LInux LOader

                             GRUB:GRand Uniform Bootloader  统一引导加载器

                                   GRUB 0.X:GRUB Legacy

                                   GRUB 1.x:GRUB2

分区表:占用64个字节,每个主分区或扩展分区占用16个字节,如果16个字节中的第一个字节为0x80,则表示该分区为激活的分区(活动分区),且只允许有一个激活的分区

BRID(boot record ID):MBR最后的2个字节,它固定为0x55AA,用于标识该存储设备的MBR是否是合理有效的MBR,如果bios读取MBR发现最后两个字节不是0x55AA,就会读取下一个启动设备

功能:提供一个菜单,允许用户选择要启动系统或不同的内核版本;把用户选定的内核装载到内存中的特定空间中,解压、展开,并把系统控制权移交给内核

MBR:

            446:bootloader

            64:fat  磁盘分区表

            2:55AA    有效标志

GRUB:

            bootloader:1st stage

1.5阶段的代码位于MBR随后的一段空间,这样就可以找到所在分区所需的驱动

                        disk:2nd stage

kernel:

                  自身初始化:

                       探测可识别到的所有硬件设备

                       加载硬件驱动程序;(有可能会借助于ramdisk加载驱动)

                       以只读方式挂载根文件系统

                       运行用户空间的第一个应用程序:/sbin/init

 

                       init程序的类型:

                             SysVinit, CentOS 5

                                   配置文件:/etc/inittab

                             Upstartinit, CentOS 6

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

                             Systemdsystemd, CentOS 7

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

                       ramdisk:

      内核要装载根文件系统,内核本身可能无法驱动根文件系统所要用到的设备(因为驱动程序在根文件系统/lib/modules之上),借助ramdisk,可完成对所需要的驱动程序的加载,加载完驱动程序后即可装载真正的根文件系统,之后做根切换

CentOS系统启动流程_第4张图片

内核中的特性之一:使用缓冲和缓存来回事对磁盘上的文件访问

                                   ramdisk --> ramfs

CentOS系统启动流程_第5张图片

                       CentOS 5:initrd,  由工具程序:mkinitrd生成

                       CentOS 6:initramfs,由工具程序:mkinitrd, dracut生成

系统初始化:

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

二、CentOS 5和CentOS 6的启动流程

      /sbin/init

1.CentOS 5

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

            0-6:7个级别

                  0:关机

                  1:单用户模式(root, 无须登录), single, 维护模式

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

                  3:多用户模式,正常模式;文本界面

                  4:预留级别;可同3级别

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

                  6:重启

默认级别:

                  3或5

切换级别:

                  init #

查看级别:

                  runlevel

                  who -r

CentOS系统启动流程_第6张图片

      配置文件:/etc/inittab

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

            id:runlevel:action:process

                  action:

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

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

                       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

P.S. rc 0 --> 意味着读取/etc/rc.d/rc0.d/

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

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

 

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

                  $srv stop

            done

 

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

                  $srv start

            done

chkconfig命令

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

chkconfig [--list] [name]

CentOS系统启动流程_第7张图片

            添加:chkconfig --add name

SysV的服务脚本放置于/etc/rc.d/init.d (/etc/init.d)

#!/bin/bash

#

                  # chkconfig:LLLL nn nn

CentOS系统启动流程_第8张图片

CentOS系统启动流程_第9张图片

删除:chkconfig --del name

            修改指定的链接类型:chkconfig [--level levels] name

                             --level LLLL:指定要设置的级别;省略时表示2345

CentOS系统启动流程_第10张图片

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

CentOS系统启动流程_第11张图片

            tty1:2345:respawn:/usr/sbin/mingetty tty1

            tty2:2345:respawn:/usr/sbin/mingetty tty2

            ...

            tty6:2345:respawn:/usr/sbin/mingetty tty6

mingetty会调用login程序

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

            ①设置主机名

            ②设置欢迎信息

            ③激活udev和selinux

            ④挂载/etc/fstab文件中定义的文件系统

            ⑤检测根文件系统,并以读写方式重新挂载根文件系统

            ⑥设置系统时钟

            ⑦激活swap设备

            ⑧根据/etc/sysctl.conf文件设置内核参数

            ⑨激活lvm及software raid设备

            ⑩加载额外设备的驱动程序

             清理操作

总结

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

2.CentOS 6

      init程序为:upstart, 其配置文件:

            /etc/inittab, /etc/init/*.conf

注意:/etc/init/*.conf文件语法 遵循 upstart配置文件语法格式;

            启动系统时,设置其运行级别1:

CentOS系统启动流程_第12张图片

CentOS系统启动流程_第13张图片

CentOS系统启动流程_第14张图片

CentOS系统启动流程_第15张图片

博客作业:系统启动流程

回顾

CentOS 6启动流程

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

 

参考资料:

①马哥随堂笔记

②《鸟哥的Linux私房菜-基础篇》

注:诚恳欢迎读者对本文提出批评意见,若发现存在错误,我定第一时间修改。如果读者觉得文章对您有帮助,欢迎点赞鼓励一下哟٩(๑❛ᴗ❛๑)۶。

你可能感兴趣的:(Linux系统管理,Linux运维笔记)