成功最有效的方法就是向有经验的人学习!

Linux启动流程

Linux系统的组成:

内核 + 根文件系统

内核可实现以下功能:

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

内核是linux的整个核心,确切的说内核即是Linux,其他程序都是通过调度内核来实现其功 能。

运行中的系统环境分层:

内核空间 + 用户空间

内核空间: 由内核代码组成,拥有系统级别权限,可直接更改硬件;

用户空间: 由各种应用程序组成,通过调用内核来完成各种复杂的任务。

CentOS6的启动流程

1.开机自检

这个过程是开机后,BIOS或UEFI进行硬件检查的阶段

2.MBR引导

自检硬件没有问题时候,这里以BIOS为例,BIOS将会直接去找硬盘的第一个扇区,找 到前446字节,将MBR加载到内存中,MBR将告诉程序下一阶段去哪里找系统grub引 导。此阶段属于grub的第一阶段。grub还有1.5阶段和2阶段。

3.GRUB引导

grub第1.5和2阶段,信息默认存放在扇区中,如果使用grub­install生成的2阶段的文件 是存放在/boot分区中的。

为了加载内核系统,不得不加载/boot分区,而加载/boot分区,需要有/boot分区的驱 动,/boot分区驱动是放在/boot分区中的,啊,我们好像进入了死循环了,Linux是怎么 解决的呢?就是靠放在1.5阶段中的数据,是放在第一个扇区后的后续扇区中,具体占 用多少字节,不太清楚,只知道1.5阶段和2阶段总共27个扇区。

stage1.5:   mbr之后的扇区,识别stage2所在的分区上的文件系统 stage2:   开机启动的时候看到的Grub选项、信息,还有修改GRUB背景等功能都是stage2提供 的,

stage2会去读入/boot/grub/grub.conf或者menu.lst等配置文件

4.读取grub.conf文件

读取grub.conf文件以确定内核启动的参数,准备启动内核

5.启动内核

加载内核,核心开始解压缩,启动一些核心的程序。

因为为了让内核足够轻小,硬件驱动并没有放在内核文件里面,我们可以看到内核很 小,才4M左右,我们可以想象Windows中的驱动,安装系统时候还需要使用驱动软件下 载好长时间呢

因此需要使用/initramfs­2.6.32­696.el6.x86_64.img来驱动硬件

[root@oldboy ~]# ll -h /boot/vmlinuz-2.6.32-696.el6.x86_64
-r-xr-xr-x. 1 root root 4.1M Jul  8 21:06 /boot/vmlinuz-2.6.32-696.el6.x8 6_64
6.加载伪文件系统(ramdisk)

内核已将启动起来了,再调用ramdisk文件,尝试驱动所有的硬件设备,到这一步,内 核起来了,所有驱动也装上了,因此后面的启动就可以交给程序了

7.启动init进程

(1)读取/etc/inittab文件

inittab文件里面定义了系统默认运行级别,这一步做了一些工作如下:

a)初始运行级别(RUN LEVEL)

b)系统初始化脚本

c)对应运行级别的脚本目录

d)定义UPS电源终端/恢复脚本

e)在虚拟控制台生成getty,以生成终端

f)在运行级别5初始化X

(2)执行/etc/rc.d/rc.sysinit程序

系统初始化一些脚本,主要完成以下工作

a)设置主机名

b)设置欢迎信息

c)激活udev和selinux可以在grub.conf中,kernel行添加selinux=0以关闭selinux

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

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

f)设置系统时钟

g)激活swap设备

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

i)激活lvm及software raid设备

j)加载额外设备的驱动程序

k)清理操作

(3)/etc/rc#.d/文件(各种服务) 里面定义的是各种服务的启动脚本,可以ls查看,S开头代表开机启动的服务,K开头的是关机要执 行的任务。#代表数字,一个数字代表一个运行级别,共7个运行级别,这里就不多说了

4)/etc/rc.d/rc.local文件 这里面可以自定义开机启动的命令。

8.执行/bin/login   执行/bin/login程序,等待用户登录

了解CentOS系统启动流程对我们有什么帮助

在实际工作中,CentOS主机难免会出现无法启动或启动异常,而在了解了CentOS系统启 动流程后,可以针对问题对症下药,而且通过学习CentOS系统启动流程后,可掌握部分的 Linux工作机制,为以后的解决Linux故障打下扎实的基础。

Systemd初始化进程

CentOS7/RHEL7 系统的开机启动过程如下:

1.首先BIOS开机自检

2.然后进入启动菜单,加载系统内核

3.然后内核进行初始化

4.后启动初始化进程

初始化进程作为Linux系统的第一个进程,它需要完成Linux系统中相关的初始化工作,为用户提供 合适的工作环境。 RHEL/CentOS 7 系统已经替换掉了熟悉的初始化进程服务System V init正式采用 全新的systemd初始化进程服务。如果您之前学习的是 RHEL/CentOS 6或7 系统,可能会不习惯。 systemd初始化进程服务采用了并发启动机制,开机速度得到了不小的提升。
CentOS6系统, 管理员可以使用如下指令来管理服务器的启动与停止

//关机相关命令
shutdown -h now     //立即关机,常用 
init 0              //切换系统关机级别,容易理解 
//重启相关命令 
reboot              //重启命令,常用 
init 6              //切换系统重启级别,容易理解

CentOS7系统, 管理员可以使用systemctl命令来管理服务器启动与停止

//关机相关命令 
systemctl poweroff      //立即关机,常用 
//重启相关命令 
systemctl reboot        //重启命令,常用

Systemd目标名称

无论如何,  RHEL/CentOS 7 已经没有了“运行级别”这个概念,Linux系统在启动时要进行大量的初始 化工作,比如挂载文件系统和交换分区、启动各类进程服务等,这些都可以看作是一个一个的单元 Unit, systemd用目标target代替了 System V init 中运行级别的概念,这两者的区别如下所示

System V init运行级别 systemd目标名称 作用
0 runlevel0.target, poweroff.target 关机
1 runlevel1.target, rescue.target 单用户模式
2 runlevel2.target, multi­user.target
3 runlevel3.target, multi­user.target 多用户的文本界面
4 runlevel4.target, multi­user.target
5 runlevel5.target, graphical.target 多用户的图形界面
6 runlevel6.target, reboot.target 重启
emergency emergency.target 救援模式
shutdown systemctl 救援模式
reboot emergency.target 救援模式
powef emergency.target 救援模式

RHEL/CentOS6 系统运行级别管理

//查看运行级别

[root@student ~]# runlevel

N 3 //如果N是其他数字,代表上一次运行级别

//切换运行级别 [root@student ~]# init 3

//永久修改配置文件

[root@student ~]# /etc/inittab

RHEL/CentOS7 系统目标管理

//查看系统默认启动运行级别

[root@student ~]# systemctl get-default

//修改默认启动运行级别(永久生效)

[root@student ~]# systemctl set-default TARGET.target

# multi-user.target: analogous to runlevel 3

# graphical.target: analogous to runlevel 5

systemd服务管理

由于之前长期使用 RHEL/CentOS 6 系统, 已经习惯使用 service chkconfig 等命令来管理系统服 务,但在 RHEL/CentOS 7 系统中是使用systemctl命令来管理服务的。
如下是 RHEL/CentOS 6 系统中 System V init 命令与 RHEL/CentOS 7 系统中systemctl命令的对 比,后续课程中会经常用到它们。
systemctl管理服务的启动、重启、停止、重载、查看状态等常用命令

System V init(6系统)  systemctl命令(7系统) 作用
service crond start systemctl start crond.service 启动服务
service crond stop systemctl stop crond.service 停止服务
service crond restart systemctl restart crond.service 重启服务
service crond reload systemctl reload crond.service 重新加载配置(不终止服务)
service crond status systemctl status crond.servre 查看服务运行状态
systemctl is-active sshd.service 查看服务是否在运行中
systemctl mask crond.servre 禁止服务运行
systemctl unmask crond.servre 取消禁止服务运行

systemctl设置服务开机启动、不启动、查看各级别下服务启动状态等常用命令

System V init(6系 统) systemctl命令(7系统) 作用
chkconfig crond on systemctl enable crond.service 开机自动启动
chkconfig crond off systemctl disable crond.service 开机不自动启动
chkconfig –list systemctl list-unit-files 查看各个级别下服务的启动与禁用
chkconfig –list crond systemctl is-enabled crond.service 查看特定服务是否为开机自启动
chkconfig–add crond systemctl daemon-reload 创建新服务文件或者变更设置

systemctl服务状态说明

服务状态 状态说明
loaded 服务单元的配置文件已经被处理
active(running) 服务的一个或多个进程在运行中
active(exited) 一次性运行的服务成功被执行并退出(服务运行后完成任务,相关进程会自动退 出)
active(waiting) 服务已经运行但在等待某个事件
inactive 服务没有在运行
enabled 服务设定为开机运行
disabled 服务设定为开机不运行
static 服务不能被设定开机启动,但可以由其他服务启动该服务
赞(0) 打赏
未经允许不得转载:陈桂林博客 » Linux启动流程
分享到

大佬们的评论 抢沙发

全新“一站式”建站,高质量、高售后的一条龙服务

微信 抖音 支付宝 百度 头条 快手全平台打通信息流

橙子建站.极速智能建站8折购买虚拟主机

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏

登录

找回密码

注册