CentOS 6 系统启动流程

前端之家收集整理的这篇文章主要介绍了CentOS 6 系统启动流程前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

一、Linux系统简介

Linux组成: kernel+rootfs
①kernel主要功能:
进程管理、内存管理、网络管理、驱动程序、文件系统、安全功能
②rootfs:程序和glibc
库:函数集合,function,调用接口(头文件负责描述)
过程调用
procedure,无返回值
函数调用
function
程序:二进制执行文件

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

Linux内核特点:
支持模块化:
.ko(内核对象)
如:文件系统,硬件驱动,网络协议等
支持内核模块的动态装载和卸载
③组成部分:
核心文件: /boot/vmlinuz-VERSION-release
ramdisk:辅助的伪根系统
CentOS 5: /boot/initrd-VERSION-release.img
CentOS 6,7: /boot/initramfs-VERSION-release.img

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

二、CentOS 6 启动流程

wKioL1mlai2yzoQeAAKyYk26vj0052.png

CentOS6启动简要流程框架:

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加电自检是BIOS功能的一个主要部分。负责完成对cpu、主板、内存、硬盘子系统、显示子系统、 串并行接口、键盘、 CD-ROM光驱等硬件情况的检测。
    ROM: BIOS, Basic Input and Output System,保存着有关计算机系统最重要的基本输入输出程序,系统信息设置、 开机加电自检程序和系统启动自举程序等。
    RAM: CMOS互补金属氧化物半导体,保存各项参数的设定

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

  • 加载MBR,MBR组成:446: bootloader,64: 分区表,2: 55AA,bootloader(引导加载器)提供具有菜单功能,加直接载操作系统中的内核信息,以及相关控制权转交功能

Bootloader(CentOS 5、6采用的是GRUB)程序运行与配置项加载分三个阶段(stage)来运行

stage1、安装bootloader最小主程序,并没有安装相关配置文件

stage1_5、在MBR随后的扇区中存放,用于与stage2所在分区的文件系统进行交互。

③stage2、加载所有配置文件及相关环境参数信息(这些信息都存放在磁盘分区的的/boot目录下),当读取了这些文件系统所定义的数据后,就能识别文件系统并读取在该文件系统上的内核文件了。

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

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

    ramdisk文件的制作:
    (1) mkinitrd命令
    为当前正在使用的内核重新制作
    ramdisk文件
    mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)
    (2) dracut
    命令
    为当前正在使用的内核重新制作
    ramdisk文件
    dracut /boot/initramfs-$(uname -r).img $(uname -r)

  • /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文件

  • 系统初始化:
    POST --> BootSequence (BIOS) -->Bootloader(MBR) --> kernel(ramdisk) --> rootfs(只读) --
    > init
    systemd

三、配置文件

init程序的类型:
SysV: init,CentOS 5之前
配置文件
/etc/inittab
Upstart: init,CentOS 6
配置文件/etc/inittab,/etc/init/*.conf
Systemdsystemd,CentOS 7
配置文件/usr/lib/systemd/system
/etc/systemd/system

2、init处理流程

以Centos 5 系统启动为例,init通过自上而下读取inittab文件来依次执行(各处理过程相似)

①去系统默认的运行级别(runlevel)
示例:id:3:initdefault:
②使用/etc/rc.d/rc.sysinit进行系统初始化

③完成初始化脚本后,系统还会启动对应级别下设定为要启动的服务,关闭那些设定为要停止的 服务,由于采用的是3级别,因此只进行13:3:wait:/etc/rc.d/rc 3其他忽略。

④配置好[ctrl]+[alt]+[del]组合键的功能

⑤配置不间断电源系统(UPS)pf、pr两种机制

⑥启动mingetty6个终端

⑦如果是5级别,则会以/etc/X11/prefdm-nodaemon启动图形化界面

3、/etc/rc.d/rc.sysinit: 系统初始化脚本
(1) 设置主机名
(2) 设置欢迎信息
(3) 激活udevselinux
(4)
挂载/etc/fstab文件中定义的文件系统
(5) 检测根文件系统,并以读写方式重新挂载根文件系统
(6) 设置系统时钟
(7) 激活swap设备
(8) 根据/etc/sysctl.conf文件设置内核参数
(9) 激活lvmsoftware raid设备
(10) 加载额外设备的驱动程序
(11) 清理操作

四、总结系统启动流程

加电自检-->

根据在BIOS(基本输入输出系统)中定义的Boot Sequence(启动次序)逐一去搜索拥有启动功能的设备-->

搜索到后加载存放于MBR中的该设备的Boot Loader(引导加载器)Boot Loader加载完后会显示一个菜单用户区选择要启动的操作系统或内核版本-->

加载用户选择的Kernel(内核),此外可能还要加载initrdinitramfsramdisk的具体实现),因为Kernel有可能要借助ramdisk(虚拟内存盘,临时根文件系统)提供的真正根文件系统的所在的设备的驱动去识别该设备 -->

kernel加载并以只读方式挂载rootfs(真正的根文件系统)-->

kernel进行switchroot(根切换)-->

kernel运行真正根文件系统上的/sbin/init程序-->

/sbin/init程序根据其配置文件/etc/inittab/etc/init/*.conf设定默认运行级别-->

/sbin/init程序运行系统初始化脚本完成系统初始化-->

/sbin/init程序关闭或启动对应级别下的服务-->

/sbin/init程序启动终端并打印登录提示符或登录界面;

猜你在找的CentOS相关文章