切换导航
首页
技术问答
编程语言
前端开发
移动开发
开发工具
程序设计
行业应用
CMS系统
服务器
频道导航
▸ PHP
▸ Java
▸ Java SE
▸ Python
▸ C#
▸ C&C++
▸ Ruby
▸ VB
▸ asp.Net
▸ Go
▸ Perl
▸ netty
▸ Django
▸ Delphi
▸ Jsp
▸ .NET Core
▸ Spring
▸ Flask
▸ Springboot
▸ SpringMVC
▸ Lua
▸ Laravel
▸ Mybatis
▸ Asp
▸ Groovy
▸ ThinkPHP
▸ Yii
▸ swoole
▸ HTML
▸ HTML5
▸ JavaScript
▸ CSS
▸ jQuery
▸ Bootstrap
▸ Angularjs
▸ TypeScript
▸ Vue
▸ Dojo
▸ Json
▸ Electron
▸ Node.js
▸ extjs
▸ Express
▸ XML
▸ ES6
▸ Ajax
▸ Flash
▸ Unity
▸ React
▸ Flex
▸ Ant Design
▸ Web前端
▸ 微信小程序
▸ 微信公众号
▸ iOS
▸ Android
▸ Swift
▸ Hybrid
▸ Cocos2d-x
▸ Flutter
▸ Xcode
▸ Silverlight
▸ cocoa
▸ Cordova
前端之家
CentOS
CentOS系统启动流程你懂否
CentOS系统启动流程你懂否
2020-08-04
CentOS
前端之家
前端之家
收集整理的这篇文章主要介绍了
CentOS系统启动流程你懂否
,
前端之家
小编觉得挺不错的,现在分享给大家,也给大家做个参考。
一、Linux内核的组成
相关概念:
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系统启动流程
总体启动顺序:
POST(加点自检)-->Boot Sequence(BIOS:基本输入
输出
系统)-->Boot Loader(MBR:主引导记录)-->Kernel(ramdisk)-->rootfs(根
文件
系统)-->switchchroot-->/sbin/init/(/etc/inittab /etc/init/*.conf)-->设定运行级别-->系统初始化脚本-->
关闭
启动相应服务-->启动终端
总流程图:
@H_
301
_130@
各流程细化说明:
1、POST加电自检
主要是检测硬件设别是否能正常的运行,然而实现自检
功能
主要是由镶嵌在主板芯片(CMOS)上的BIOS(basic input output system)程序,检测没问题之后进行硬件设备的初始化。
2、Boot Sequence(启动管理程序):选择启动顺序加载MBR
Boot Sequence是一个程序,它依赖于某个硬盘硬件,准确的说是第一个硬盘扇区的MBR,从而按次序查找各引导设备。
3、MBR引导,bootloader引导加载器,启动程序
MBR(Master Boot Record):此记录在0磁道1扇区,总共为512字节,前446字节为bootloder,后64字节为分区表信息,主分区
加上
扩展分区不能大于四个,最后2个字节为校验信息,为55AA。提供一个
菜单
,允许
用户
选择要启动的系统或不同的内核版本;把
用户
选定的内核装载到RAM中的特定空间中,解压、展开,而后把系统控制权移交给内核。
4、kernel内核实现
kernel自身初始化,实现
功能
,借助ramdisk探测可识别的程序,以自读方式挂载根
文件
系统,运行应用程序:/sbin/init
5、/sbin/init/管理
用户
空间服务进程
设定运行级别,进行初始化脚本,
关闭
或启动相应的程序,启动终端。
GRUB(GRand Unified Bootloader)加载内核,就是MBR中的前 446 个字节,是BooTLoader的一种,它的作用是要选择要启动的内核。
GRUB相关说明:
主要是由device.map,menulst,stage1,stage2,以及一系列的stage1_5组成。
device.map:存放的是内核
文件
的根分区
menu.lis:为
菜单
列表,里面为可选择的
菜单
列表,存放于stage2中。
stage:用于grub引导程序过大,所以分2段引导,第一段存放在MBR中,第二段存放于内核
文件
系统中,第一段引导完成后可以找到第二段。 但是,第二段是存放于内核
文件
系统中的,此时还没有格式化
文件
系统,如何可以访问到第二段的menu.lst,就需要借助于中间层 stage1_5,有它来协助 stage1 段来访问stage2阶段。stage1_5通常位于stage1 字段后的 63 个扇区。 由于stage2 在内存中存放可以使用的
文件
系统不确定,所以这就是有多个stage1_5 的原因。
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)为
菜单
通过了保护机制。
进入单
用户
模式:
1)编辑grub
菜单
,选定要编辑的title,而后使用e命令
2)在选定的kernel后附加1 ,s 或single
3)在kernel所在的行,键入b键
演示:
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:一旦此任务终止时,就
自动
重启;(如:
登录
终端执行
logo
ut登出后会再次启动)
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目录,这两目录下
文件
相同。
如上诉定义将会启动3级别下的以S打头的进程:
图示:
11、启动终端(图形终端)
操作系统启动完成
三、系统启动流程总结。
内核级别:
1.POST做开机启动时候的硬件检测
功能
2.BootSequence(BIOS)启动加载主引导分区MBR中的引导加载器程序BootLoader
在LInux现行的BootLoader是三段划分(打破446字节限制)的GRUB程序,
第1段写在BootLoader中
第1.5段在其后扇区用于
文件
系统的引导
第2段在boot/grub中提供内部接口和
调用
系统内核kernel
3.Kernel识别硬件、加载驱动、只读挂载根
文件
系统、同时交付给
用户
空间第一个程序/sbin/init
此处特别要注意,系统发行商为了适应多种硬件接口驱动
调用
,会在第一次安装系统时候,
自动
识别硬件接口,并
调用
唯一驱动程序来
生成
ramdisk
文件
,以内存当磁盘做虚根,驱动接口后会切换到真实的根
文件
系统上
CentOS 5系列是initrd,当磁盘映像
文件
会造成二次缓存缓冲
CentOS 6/7系列改进为initramfs,以
文件
系统形式可以不二次占用缓存和缓冲
用户
空间级别
4./sbin/init接管后更具其
配置文件
来初始化
5.根据/sbin/init中的配置会设置默认运行级别,以及一些在/etc/init.d/设置的开机服务
6./etc/rc.d/rc.sysinit运行系统初始化脚本,完成系统初始化
7.
关闭
对应级别下需要停止的服务,启动对应级别下需要开启的服务
8.设置
登录
终端
马哥教育
马哥教育历经近10年发展,已成为面向企业级资深运维工程师、架构师的专业集训营式高端就业Linux培训学院。凭借多年良好口碑,其已经成为业内知名互联网公司重要人才战略合作伙伴,获得了
百度
、腾讯、阿里、大众点评、51CTO、唯品会、京东、中移动、新浪、红帽等互联网巨头的合作
支持
。毕业学员平均薪资达10K以上,累计受益人员达百万+。
详询咨询QQ:
课程顾问-云豆:1661815153
课程顾问-豌豆:1660809109
课程顾问-土豆:2813150558
课程顾问-糖豆:371238871
课程顾问-仙豆:875259688
马哥教育
微信号:magedu-Linux
上一篇:Centos7安装配置Apache(httpd)+p
下一篇:CentOS上安装SQL Server vNext CTP
猜你在找的CentOS相关文章
Centos7离线安装gcc4.8
有时候CentOS工作在无互联网的环境下,需要在离线环境下安装一些组件,这次实现的是模拟在...
作者:踏平扶桑 时间:2024-09-29
CentOS7离线安装devtoolset-9并编译redis6.0.5
首先参照https://www.cnblogs.com/wdw984/p/13330074.html,来进行如何安装Centos和离线下...
作者:踏平扶桑 时间:2024-09-29
使用Nginx在80端口上代理多个.NET CORE网站
有两个.NET CORE3.1网站部署在CentOS7上(内网IP是192.168.2.32),现在想实现访问http://...
作者:踏平扶桑 时间:2024-09-29
CentOS7中配置vsftpd
1、yum -y install vsftpd 安装vsftpd 2、配置vsftpd的配置文件(/etc/vsftpd/vsftpd.conf...
作者:踏平扶桑 时间:2024-09-29
CentOS7离线安装Mysql8.0
首先去mysql官网下载mysql的离线rpm安装包(https://downloads.mysql.com/archives/commun...
作者:踏平扶桑 时间:2024-09-29
CentOS中增加网络连接数的方法
CentOS默认对外访问,发起的TCP链接总数小于28232个。 可以通过以下命令的结果计算出来 $ ...
作者:踏平扶桑 时间:2024-09-29
VMware安装Centos7虚拟机
首先安装虚拟机很简单,所以呢,具体的安装过程就引用别人的博客,这篇文字很详细,引用之...
作者:前端之家 时间:2021-02-27
[Linux] 解决CentOS下Requires: libjson-c.so错误
当安装某些rpm包的时候 , 会爆出这个错误 Requires: libjson-c.so json-c是c语言下的json库...
作者:前端之家 时间:2021-02-06
阿里云centos7安装mysql8数据库
linux系统安装mysql8
作者:前端之家 时间:2021-01-10
centos安装mysql
一、安装 二、修改密码 三、修改远程连接权限(为了使用navicat)
作者:前端之家 时间:2020-12-03
编程分类
Linux
Windows
CentOS
Ubuntu
Nginx
WebService
Scala
Memcache
Apache
Redis
Docker
Bash
Azure
Tomcat
LNMP
Shell
数据结构
服务器运维
网络安全
最新文章
• Centos7离线安装gcc4.8
• CentOS7离线安装devtoolse
• 使用Nginx在80端口上代理多
• CentOS7中配置vsftpd
• CentOS7离线安装Mysql8.0
• CentOS7下安装RabbitMQ
• CentOS中增加网络连接数的
• VMware安装Centos7虚拟机
• [Linux] 解决CentOS下Requ
• 阿里云centos7安装mysql8数
热门标签
更多 ►
xebug
nodemon
docker-copy
dcos
elasticsearc
windows-cont
docker-windo
docker-aws
amazon-cloud
envoyproxy
hashicorp-va
swisscomdev
kafka-python
zscaler
photon-os
docker-swarm
kamon
google-cloud
concourse
wso2-am
persistent-v
api-manager
process-mana
manjaro
jenkins-work
hypriot
remoteapi
keystonejs
bitcoind
bitcoin-test