CentOS系统启动流程

POST --> Boot Sequence(BIOS) --> Boot Loader(MBR) --> kernel(ramdisk) --> rootfs(readonly) --> switchroot --> /sbin/init(CentOS 5,6,7不同) --> 设置默认运行级别 --> 运行系统初始化脚本,完成系统初始化 --> 关闭启动对应级别下需要停止的服务,启动对应级别下需要开启的服务 --> 设置登录终端(启动终端图形终端)--> 操作系统启动完成

CentOS系统启动流程(内核级别)

1、POST:加电自检


机加电后,系统自检硬件设备包括cpu、内存、硬盘、显示设备等,这个过程叫加电自检POST;一旦通电会自动读取ROM有个带电芯片CMOS程序并运行
即按次序查找可引导设备,第一个有引导程序的设备即为本次启动要用到的设备;引导程序叫bootloader引导加载器。

2.BIOS:第一顺序启动的设备(基本输入输出系统 Basic Input and Cutput System)

ROM中的信息一旦写入就不能进行修改,其信息断电之后也仍然保留。而CMOS是微机主板上的一块可读写的RAM芯片断电以后保存在上面的数据会自动消
失,需要主板电池供电;对CMOS中各项参数的设定要通过专门的程序,现在厂家将CMOS设置程序做到了BIOS芯片中,因此CMOS设置又通常叫做
BIOS设置。BIOS(基本输入输出系统)也是固化在当前主机ROM芯片中的代码,实现按次序查找各引导设备,第一个有引导程序的设备即为本次启动要用
到的设备。

3.Boot Squence:引导加载程序启动内核

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

bootloader引导加载器、程序:

Windows:由ntlader引导加载器

Linux:

(1)LTLO:Linux Loder(无法支持大磁盘,1024后不能加载)

(2)GRUB: Grand Uniform Bootloder(统一引导加载器)

GRUB 0.X:Grub Legacy(传统版本)

GRUB 1.X:Grub2 (第二版本)

功能:提供一个菜单,允许用户选择要启动的系统或不同的内核版本,把用户选定多内核装载到RAM(内存)中的特点空间中,解压、展开,而后把整个系统控制权移交给内核,即完成把内核加载到内存空间中。

Bootloader引导加载器是安装在硬盘或光盘甚至是U盘上的程序,系统加电后运行的第一段软件代码。

Bootloader引导加载程序位于磁盘中的MBR中,每个磁盘或每个磁盘中的分区中都有MBRMBR是磁盘上的第一个扇区又叫做主引导扇区,是计算机开机后访问硬盘时所必须要读取的首个扇区,分三部分:

MBR:Master Boot Record(主引导记录)

512bytes:

446bytes:bootloader(引导程序LTLO或GRUB)

64bytes:fat(分区表,文件系统分配表)

2bytes:55AA(标记MBR有效)

MBR是由分区程序(如Fdisk,Parted)所产生的,它不依赖任何操作系统,而且硬盘引导程序也是可以改变的,从而能够实现多系统引导。仅仅包
含一个64个字节的硬盘分区表。由于每个分区信息需要16个字节,所以对于采用MBR型分区结构的硬盘(其磁盘卷标类型为MS-DOS),最多只能识别4
个主要分区。所以对于一个采用此种分区结构的硬盘来说,想要得到4个以上的主要分区是不可能的。这里就需要引出扩展分区,扩展分区也是主分区
(Primary
partition)的一种,但它与主分区的不同在于理论上可以划分为无数个逻辑分区,每一个逻辑分区都有一个和MBR结构类似的扩展引导记录
(EBR)。

Linux中有多种引导加载程,常见的有最早的LILO,缺点:LILO无法支持大硬盘,如果内核或加载的系统位于1024
柱面以后的分区上,LILO是加载不了,但在安卓手机上应用较广泛;后来被GRUB取代,GRUB有两个版本GRUB 0.x(Grub
Legacy)和GRUB 1.x(Grub2)两者从设计理念上完全不同。

Linux中的引导加载程Bootloader有多种实现方式:

LILO:LIinux LOader

GRUB:Grand Uniform Bootloader

GRUB 0.x:Grub Legacy

GRUB 1.x:Grub2

GRUB(Boot Lloader):

bootloader:1st stage(对MBR而言bootloader是加载其第二阶段,不是加载内核)

Partiton:filesystem driver,1.5 stage

Partition:/boot/grub,2nd stage

加载后可在操作系统之前提供一个操作系统(即一个接口),然后加载内核;

Grub Legacy:分三阶段

stage1:存放在MBR上

stage1_5:存放在MBR之后的扇区,让stage1中的bootloader能识别stage2所在的分区上的文件系统;

stage2:磁盘分区(/boot/grub/)

引导加载程序先读取MBR上的gurb第一阶段,由于MBR很小只有512字节采用grub这种方式引导程序,随后读取扇区中的stage1.5阶段,
读取1.5阶段以后从而就能驱动第二阶段stage2所在的磁盘分区,stage2是存放在磁盘分区上的还包括了内核文件及ramdisk等都在这个分区
上存放的;这就是为什么通过Bootloader之grub就能够加载内核文件的原因。

注意:当前硬件平台,主板BIOS必须能识别硬盘,然后BIOS才能加载硬盘中的Bootloader,磁盘中的Bootloader自身加载完以后,就能够识别当前主机上的硬盘设备了。


硬盘设备能识别,并不代表硬盘上的文件系统能识别,因为文件系统是额外附加的一层软件组织的文件结构,所以要能够对接一种文件系统,必须要用到文件系统驱
动;对应的应用程序必须能识别和理解这样的文件系统才可以,这种程序就称为文件系统驱动;grub的1.5阶段就是给gurb提供了文件系统驱动的,从而
就能够访问对应的第二阶段和内核所在的分区了,这通常是一个基本磁盘分区;所以grub第二阶段以及内核和ramdisk文件通常都会放在一个基本磁盘分
区上;因为grub驱动不了逻辑卷这种高级接口。

stage2一般是挂载至/boot/grub/目录下;grub也有自己的配置文件:/boot/grub/grub.conf且通常有个符号链接文件:/etc/grub.conf;

stage2的功用:

(1)提供菜单或交互式接口;

(2)能加载用户选择的内核或操作系统;

(3)为菜单通过了保护机制。

4.加载 kernel

(1)通过grub加载到内核后,就在内存中解压并展开就可完成后续操作即内核自身初始化;分为四步:

第一:探测可识别的所有硬件设备

第二:加载硬件驱动程序;(有可能会借助于randisk加载驱动)

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

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

(其中有可能会借助于randisk加载驱动,ramdisk:是基于内存的磁盘设备;以只读方式挂载根文件原因是防止内核中有bug,确保无问题后再改为读写方式;)

(2)如果内核把已知根文件系统所在的磁盘设备驱动程序编译进内核(一般自己编译内核含此驱动),此时就不需要这个ramdisk,所以发行商提供的安装系统文件不可能包含所有驱动在内核中。

这样,要想加载根文件系统,就要先加载根文件系统所在的磁盘设备驱动,而驱动就在根上因此,就不能依赖于根上的驱动程序来加载根文件系统;要借助于ramdisk临时根文件系统来加载根文件系统所在的磁盘设备驱动,从而加载根文件系统;

ramdisk临时根文件系统不是操作系统发行商直接在光盘上自带的,而是在安装操作系统后临时生成的,它在安装操作系统后,能扫描当前主机硬盘设备的型号,并找到相关驱动做成一个临时根;所以这个临时根是为每个用户安装过程生成以后动态创建的。

ramdisk临时根是把内存某段空间当做磁盘使用,而Linux内核特性是使用缓冲和缓存来加速对磁盘上的文件访问,这就是为什么在centos5上
使用ramdisk(initrd),在后来的centos6,7上使用的ramfs的原因,避免了在内存中的双缓冲和双缓存。

spacer.gif

5.挂载根文件系统

一旦内核借助于ramdisk提供的临时根完成加载真正的根文件系统所在的设备,下一步就装载根文件系统,内核会自动把根文件系统所在的设备挂载至根上,所以说根是在内核中就是这个原因所在。

6.根切换

在挂载根文件系统时为了避免内核中有bug或操作过程中有bug导致根文件系统被损坏,先只读挂载根文件系统,加载完成后才读写挂载,完成整个挂载根文件系统后,直接去找/sbin/init程序,即开始运行用户空间的第一个程序。

用户空间启动流程

7./sbin/init程序

init程序主要依赖于配置文件:/etc/inittab,大体分为:设定默认启动级别 --> 设定系统初始化脚本 -->
启动对应级别的服务 --> 打印各终端登录界面(如果级别为3处理提供文本登录界面,如果级别为5还提供图形登录界面)

8. 设置默认运行级别

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

0-6:共7个级别;

0:关机,shutdown

1:单用户模式(single user),root用户,无须认证,维护模式;

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

3:多用户模式(multi user),完全功能模式,文本界面;

4:预留级别:目前无特别使用目的,但习惯以同3级别功能使用;

5:多用户模式(multi user),完全功能模式,图形界面;

6:重启,reboot

(2)配置文件:/etc/inittab定义了很多功能,每一行定义一种操作(action)以及与之对应的process(仅适用于CentOS
5),一行就定义了init要执行的任务,甚至是一堆任务,每一行的语法格式为:                                  
                          id:runlevels:action:process

id为一个任务的标识符;

runlevels:在哪些运行级别下启动此任务;例:3,2345,也可为空表示所有级别;

action:在什么条件下启动此任务;

wait:等待切换至此任务所在的级别时执行一次(刚刚切换进来时);

respawn:一旦此任务终止时,就自动重启;(如:登录终端执行logout登出后会再次启动)

initdefault:设定默认允许级别;此时process省略为空;

sysinit:设定系统初始化方式,此处一般为指定/etc/rc.d/rc.sysinit脚本;(CentOS 5,6都用到此脚本,CentOS 7是靠systemd完成的),在CentOS 6中仅保留此配置文件中设定启动运行级别的功能。

process:具体任务;通常为应用程序,或脚本,或二进制的程序,取决于自定义。

9.系统初始化脚本

系统初始化脚本:/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)清理操作;

注意:在init配置文件:/etc/inittab中,有一行内容是定义/etc/rc.d/rc.sysinit,此脚本文件是负责完成系统初始化的脚本文件。

10.关闭/启动对应级别下的服务

脚本文件/etc/rc.d/rc作用为当级别切换时启动或停止服务;此脚本接受传递的参数给脚本中$runlevel变量,然后,读取/etc
/rc$runlevel.d/K*和/etc/rc$runlevel.d/S*所有文件,这些文件就是为什么开机启动后,有些服务会自动启动,有些服
务没有启动的原因。

K*:要停止的服务,K##*,优先级,数字越小,越优先关闭,依赖的服务先关闭,然后再关闭被依赖的。

S*:要启动的服务,S##*,优先级,数字越小,越是优先启动,被依赖的服务先启动,而依赖的服务后启动。

/etc/rc.d/init.d目录还有个链接目录为/etc/init.d目录,这两目录下文件相同。

11.启动终端(图形终端)

操作系统启动完成

相关概念:

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

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

IPC(Inter-Process Communication进程间通信):就是指多个进程之间相互通信,交换信息的方法。Linux IPC基本上都是从Unix平台上继承而来的。主要包括最初的Unix IPC,System V IPC以及基于Socket的IPC。另外,Linux也支持POSIX IPC。

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

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

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

内核设计流派:

单内核设计:把所有的功能集成于同一个程序;(Linux)

微内核设计:每种功能都使用一个单独的子系统实现;(Windows solarls)

Linux内核特点:

(1)支持模块化:.KO(kernel object)

(2)支持模块运动时动态装载或卸载

组成部分:

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

ramdirk:

CentOS5:/boot/initrd-VERSION-release.img

CentOS6,7:/boot/initramfs-VERSION-release.img

CentOS系统启动流程的更多相关文章

  1. CentOS系统启动流程你懂否

    一.Linux内核的组成 相关概念: Linux系统的组成部分:内核+根文件系统 内核:进程管理.内存管理.网络协议栈.文件系统.驱动程序. IPC(Inter-Process Communicati ...

  2. Linux:Day13(上) CentOS系统启动流程

    CentOS 5和6的启动流程 Linux:kernel+rootfs kernel:进程管理.内存管理.网络管理.驱动程序.文件系统.安全功能 rootfs: glibc 库:函数集合,functi ...

  3. (转)CentOS系统启动流程图文详解

    CentOS系统启动流程图文详解. 原文:http://www.linuxidc.com/Linux/2017-03/141966.htm 熟悉系统启动流程对于我们学习Linux系统是非常有帮助的,虽 ...

  4. 13.1 CentOS系统启动流程介绍

    CentOS系统启动流程介绍 本章我们将学习 Linux 启动流程和内核模块管理相关的内容.通过本章我们将学习如下内容: Linux 系统的组成及特点 CentOS 系统的启动流程 开机启动成 gru ...

  5. CentOs 系统启动流程相关

    CentOS的启动流程 1)加载BIOS 的硬件信息,获取第一个启动设备 2)读取第一个启动设备MBR 的引导加载程序(grub) 的启动信息 3)加载核心操作系统的核心信息,核心开始解压缩,并尝试驱 ...

  6. 图解CentOS系统启动流程

    当我们按下开机键后,系统背后的秘密我们是否了解呢?这里,我带大家探索一下linux系统开机背后的秘密. 1.加电自检     主板在接通电源后,系统首先由POST程序来对内部各个设备进行检查,自检中如 ...

  7. 简述Centos系统启动流程

    1. Centos5 POST开机自检 运行CMOS中的BIOS程序,加载第一个启动磁盘的Bootloader 由Bootloader读取kernel 通过挂载临时根目录initramfs加载核心模块 ...

  8. Centos启动流程及grub legacy

    Linux系统的组成部分:内核+根文件系统 内核的功能:进程管理.内存管理.网络管理.文件系统.驱动程序.安全功能 系统在运行时要么就是在运行内核代码,要么就是在运行应用程序代码.如果一个程序大多数时 ...

  9. linux基础之CentOS启动流程

    一.基本概念 内核设计流派: 单内核设计:Linux //所有功能集成于同一个程序 微内核设计:Windows,Solaris //每种功能使用一个单独子系统实现 Linux内核特点: 支持模块化:. ...

随机推荐

  1. Quartz2D 编程指南(三)渐变、透明层 、数据管理

    概览 图形上下文 路径 颜色与颜色空间 变换 图案 阴影 渐变 透明层 Quartz 2D 中的数据管理 位图与图像遮罩 CoreGraphics 绘制 Layer 渐变 简介 渐变是从一个颜色到另外 ...

  2. div垂直居中

    width:265px; height:130px; display:table-cell; vertical-align:middle; text-align:center;

  3. rpm与yum

    设置本地源与网络源:https://my.oschina.net/u/1861462/blog/723958 rpm命令:http://man.linuxde.net/rpm https://my.o ...

  4. mysql 实战 or、in与union all 的查询效率

    OR.in和union all 查询效率到底哪个快. 网上很多的声音都是说union all 快于 or.in,因为or.in会导致全表扫描,他们给出了很多的实例. 但真的union all真的快于o ...

  5. ubifs概述

    UBIFS无排序区块图像文件系统(Unsorted Block Image File System, UBIFS)是用于固态存储设备上,并与LogFS相互竞争,作为JFFS2的后继文件系统之一.真正开 ...

  6. swift language

    API reference Swift UIKit Swift 菜鸟教程 Great Installed Visual Studio Code, I found I cannot open it fr ...

  7. SLP的模块结构

    SLP的模块结构 在开发初期,拟将SLP分为5个模块: 基础练习模块 特定歌曲难点练习模块 玩家能力测试模块 全局设置模块 玩家信息模块 基础练习模块 这里提供可控类型.可控长度.可控BPM的练习套餐 ...

  8. Ubuntu16.04 802.1x 有线连接 输入账号密码,为什么连接不上?

    ubuntu16.04,在网络配置下找到802.1x安全性,输入账号密码,为什么连接不上?   这是系统的一个bug解决办法:假设你有一定的ubuntu基础,首先你先建立好一个不能用的协议,就是按照之 ...

  9. PHP扩展开发及内核应用

    目录中汉字部分代表已经翻译完成的章节,带链接的表示已经发布的,未待链接的表示正在校正即将发布的. PHP的生命周期 让我们从SAPI开始 PHP的启动与终止 PHP的生命周期 线程安全 小结 PHP变 ...

  10. 最好的cpm广告联盟哪里有

    最好的cpm广告联盟哪里有,58传媒广告联盟还要提醒众位站长的是网站在经营发展中必须最大化的扩展自己的优势力量.每个网站都有属于自己的优势魅力,这些优势特点只有得到最大化的发挥才能为网站带来意想不到的 ...