3.14 Linux 系统启动流程

1、CentOS 7 引导过程

系统引导是操作系统运行的开始,在用户能够正常登录到系统之前,Linux操作系统的引导过程将完成一系列的初始化任务,并加载必要的程序和命令终端,为用户登录做好准备。

当Linux 启动时 , 如果出现故障 , 需要通过引导过程来判断故障是如何出现的 , 从而通过确定引导过程中的断点 , 而解决故障。

a、开机自检(BIOS):CPU、硬盘、内存及硬件是否有问题⬇️

b、MBR引导:主引导记录通过硬盘启动⬇️

c、GRUB菜单:选择不同内核⬇️

d、加载内核:/boot加载到内存拥有一个小系统⬇️

e、systemd:CentOS 7 第一个运行的进程⬇️

f、读取运行级别:/etc/systemd/system/default.target⬇️

g、初始化系统:/usr/lib/systemd/system/sysinit.target⬇️

h、并行启动服务⬇️

i、显示login界面。

a. 开机自检

当开机按下电源按钮后,计算机开始加电,主板上的BIOS或UEFI基本输入输出程序开始对硬件进行初步检查,检查内存,CPU,显卡等等,当检测到错误的时候机器会中断或者启动不了。检测成功后根据预设的启动顺序移交系统控制权。

b. 查找启动介质

当自检通过后,接着就要选择引导介质或方式,是通过光盘启动,硬盘启动,网络启动,还是U盘启动,这些也是在BIOS中设定的,所以设定的第一启动项是哪个就从那个开始引导。

c. 引导加载器

grub2启动引导阶段:确定引导介质后便开始从介质中装载Bootloader(引导程序grub2),这个是一个微小程序, MBR引导记录的前446个字节就是Bootloader,主要用来引导用户选择要启动的系统或不同的内核版本,把用户选定的内核装载到RAM中的特定空间中,解压,展开,而后把系统制权移交给内核。

grub2分为两个部分:

  • 在MBR引导记录中,大小为446字节,主要功能是引导启动介质的grub主体文件
  • /boot/grub2,此为grub的主体文件,/etc/grub.d/ /etc/default/grub /boot/grub2/grub.cfg
d. 加载内核和硬件驱动

在用户选择内核版本后(或timeout后),GRUB2 将加载内核及 initramfs 至内存中,initramfs 属于一个img 的虚拟磁盘,是一个 GZIP 的 cpio 归档文件

initramfs 包含了动态的内核模块 , 初始化脚本及非常多的硬件驱动等 , 在 centos7 中 initramfs自身即包含了一个完整的可用系统。

e. 内核加载第一个程序

kernel 在启动后将初始化所有的硬件 , 通过initramfs 找到硬件相关的驱动程序 , 而后从initramfs 中执行PID 1的 /sbin/init命令(最高进程),在centos7 中init 属于 /lib/systemd/systemd 的软连接 , 以及一个udev 进程来自动建立已经存在的硬件的设备文件。

systemd(init) 进程从 initramfs 中执行initrd.target 系统初始化服务中所有可用单元 , 来引导 RHEL7/CentOS7 的启动,这其中包括了切换到实际的“ /” 硬盘分区及挂载

由initramfs 建立的内存的根区分/sysroot( 物理 '/' 分区 ) 在成功挂载之后,将切换到此根分区上 , 并将 systemd 重新执行安装至真实的根分区中。

f. systemd 执行默认的target配置

centos7表面是有“运行级别”这个概念,实际上是为了兼容以前的系统,每个所谓的“运行级别”都有对应的软连接指向,默认的启动级别是/etc/systemd/system/default.target,根据它的指向可以找到系统要进入哪个模式。

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

重启

g. systemd 执行sysinit.target初始化系统及准备操作系统
  • systemd启动multi-user.target下的服务
  • systemd执行multi-user.target下的/etc/rc.d/rc.local
  • Systemd执行multi-user.target下的getty.target及登录服务
  • getty.target,它是启动终端的systemd对象。
2、系统初始化进程及文件
a. init 进程

Linux操作系统中的进程使用数字进行标识,每个进程的身份标记号称为pid,在引导linux操作系统的过程中,/sbin/init是内核第一个加载的程序,因此init进程对应的pid号总是为1。init运行以后将陆续执行系统中的其他程序,不断生成新的进程,init进程是系统进程的父进程。

init 程序对比:

系统类型

服务名称

配置文件位置

CentOS 5

SysV init

/etc/inittab

CentOS 6

Upstart

/etc/inittab;/etc/init/*.conf(主要)

CentOS 7

systemd

/etc/systemd/system;/usr/lib/systemd/system

b. systemd 概述

Systemd是Linux操作系统的一种init软件。Centos7系统中采用了全新的systemd启动方式,Systemd启动方式使系统初始化时诸多服务并行启动,大大提高了开机效率。Systemd守护负责linux的系统服务,systemctl用于控制systemd管理的系统和服务状态

Systemd将其管理的资源组织成各种类型的单元(unit):

service 单元

扩展名.service,用于描述一个系统服务。

socket 单元

扩展名.socket,用于描述一个系统套接字(UNIX)或互联网套接字(INET/INET6)或FIFO管道。

target 单元

扩展名.target,将服务单元、挂载单元等单元组织在一起的单元,一般对应Sys-V的运行等级(XXX.target文件表示)

device 单元

扩展名.device,用于描述一个设备文件

mount 单元

扩展名.mount,用于封装一个文件系统挂载点

automount 单元

扩展名.automount,用于描述一个文件系统自动挂载点,也就是仅在挂载点确实被访问的情况下才进行挂载。

timer 单元

扩展名.timer,用于描述一个基于时间触发的动作,用于实现类似 atd, crond 等任务计划服务。

swap 单元

扩展名.swap,用于描述一个交换分区或者交换文件。

path 单元

扩展名.path,用于定义文件系统中的一个文件或目录

slice 单元

扩展名.slice,用于控制特定 CGroup 内所有进程的总体资源占用。

c. systemctl 命令
  • 描述:服务管理
  • 语法:systemctl [模式] name.service

start 启动

stop 停止

restart 重启

reload 重载

status 状态

enable 开机自启动

disable 关闭开机自启

is-enable 查看是否开机自启

mask 禁止设定为开机自启

umask 取消禁止设定为开机自启

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值