CentOS7 - systemd 启动过程

一. Linux 的启动过程

二. CentOS 7 系统systemd引导过程

阶段1

阶段2

阶段3

阶段4

阶段5

三. 总结

 

在文章 CentOS7 - systemd Systemd对 服务、启动项和日志管理这三项功能。本文通过 CentOS7 的启动过程来了解systemd是如何处理系统启动的。

本文中的命令在 CentOS 7.4 测试通过

 

一. linux 的启动过程

POST --> BIOS(boot) --> Bootloader(MBR(446)) --> kernel(initrd) --> init(systemd)

可见在 kernel 挂载根文件系统完成后,启动 init 进程。init 进程是 linux 系统启动的第一个进程,那么 CentOS7 中的第一个进程是什么?

 

# 解压 CentOS7 内核文件:

mkdir -p /data/img

# 不通版本内核版本号可能不同。

cp /boot/initramfs-3.10.0-693.11.6.el7.x86_64.img /data/img

cd /data/img

/usr/lib/dracut/skipcpio initramfs-3.10.0-693.11.6.el7.x86_64.img  | zcat | cpio -id --no-absolute-filenames

 

解压后的目录如下

lrwxrwxrwx.  1 root root        7 Jan 24 10:27 bin -> usr/bin

drwxr-xr-x.  2 root root       42 Jan 24 10:27 dev

drwxr-xr-x. 12 root root     4096 Jan 24 10:27 etc

lrwxrwxrwx.  1 root root       23 Jan 24 10:27 init -> usr/lib/systemd/systemd

lrwxrwxrwx.  1 root root        7 Jan 24 10:27 lib -> usr/lib

lrwxrwxrwx.  1 root root        9 Jan 24 10:27 lib64 -> usr/lib64

drwxr-xr-x.  2 root root        6 Jan 24 10:27 proc

drwxr-xr-x.  2 root root        6 Jan 24 10:27 root

drwxr-xr-x.  2 root root        6 Jan 24 10:27 run

lrwxrwxrwx.  1 root root        8 Jan 24 10:27 sbin -> usr/sbin

-rwxr-xr-x.  1 root root     3117 Jan 24 10:27 shutdown

drwxr-xr-x.  2 root root        6 Jan 24 10:27 sys

drwxr-xr-x.  2 root root        6 Jan 24 10:27 sysroot

drwxr-xr-x.  2 root root        6 Jan 24 10:27 tmp

drwxr-xr-x.  7 root root       61 Jan 24 10:27 usr

drwxr-xr-x.  2 root root       27 Jan 24 10:27 var

可见 init 进程软链到了 systemd。此时 systemd 成为linux第一个进程(PID=1),接管系统启动。

 

二. CentOS 7 系统systemd引导过程

阶段1

systemd执行的第一个目标是/usr/lib/systemd/system/default.target,这个文件链接到当前目录的graphical.target。文件内容如下:

[Unit]

Description=Graphical Interface

Documentation=man:systemd.special(7)

Requires=multi-user.target

Wants=display-manager.service

Conflicts=rescue.service rescue.target

After=multi-user.target rescue.service rescue.target display-manager.service

AllowIsolate=yes

文件中配置项 Requires=multi-user.target 将控制权交给 multi-user.target (相当于旧概念的运行级别)。

 

阶段2

在这个阶段,会启动multi-user.target,这个target为多用户支持设定系统环境。会启动如下两个目录中单元。

/etc/systemd/system/multi-user.target.wants/

/usr/lib/systemd/system/multi-user.target.wants/

multi-user.target文件内容如下:

[Unit]

Description=Multi-User System

Documentation=man:systemd.special(7)

Requires=basic.target

Conflicts=rescue.service rescue.target

After=basic.target rescue.service rescue.target

AllowIsolate=yes

multi-user.target会将控制权交给 basic.target。

 

阶段3

basi.target用于启动普通服务,特别是图形管理服务,它通过如下两个目录决定那些单元会被启动。

/etc/systemd/system/basic.target.wants/

/usr/lib/systemd/system/basic.target.wants/

basi.target 文件内容如下:

[Unit]

Description=Basic System

Documentation=man:systemd.special(7)

 

Requires=sysinit.target

After=sysinit.target

Wants=sockets.target timers.target paths.target slices.target

After=sockets.target paths.target slices.target

basi.target 会将控制权交给 sysinit.target

 

阶段4

sysinit.target会启动重要的系统服务例如系统挂载,内存交换空间和设备,内核补充选项等等。它通过如下两个目录决定那些单元会被启动。

/etc/systemd/system/sysinit.target.wants/

/usr/lib/systemd/system/sysinit.target.wants/

sysinit.target文件内容如下:

[Unit]

Description=System Initialization

Documentation=man:systemd.special(7)

Conflicts=emergency.service emergency.target

Wants=local-fs.target swap.target

After=local-fs.target swap.target emergency.service emergency.target

sysinit.target在启动过程中会传递给 local-fs.target 和 swap.target。

 

阶段5

local-fs.target 也不能算是阶段5,可能和阶段4一些服务并行启动,这个阶段不会启动用户相关服务,它只处理底层核心服务,这个target会根据/etc/fstab来执行相关磁盘挂载操作。它通过如下一个目录决定那些单元会被启动。

/usr/lib/systemd/system/local-fs.target.wants/

local-fs.target 文件内容如下:

[Unit]

Description=Local File Systems

Documentation=man:systemd.special(7)

DefaultDependencies=no

Conflicts=shutdown.target

After=local-fs-pre.target

OnFailure=emergency.target

OnFailureJobMode=replace-irreversibly

 

三. 总结

个人理解:虽然systemd的引用target的顺序如上,但是真正的启动顺序为从下到上,其中管理单元可以并行启动,从而使效率大大提高。同时 Systemd 是向下兼容 System V 的。

官网给出的启动顺序如下图:

systemd boot process in linux

systemd boot process in linux

要查看具体的启动顺序可以通过如下命令输入到文件,然后通过浏览器打开查看。

systemd-analyze plot > boot.html

列出所有正在运行的单元,按从初始化开始到启动所花的时间排序。

systemd-analyze blame 

转自:http://linux.dataguru.cn/article-13218-1.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CentOS7启动过程经历了以下几个步骤。首先,内核空间启动完毕后,开始启动用户态启动过程。系统初始化进程变为了systemd,它是一个守护进程,进程号为1。系统会根据默认target配置文件/etc/systemd/system/default.target来确定默认运行级别。然后,系统会执行sysinit.target来初始化系统,执行basic.target来准备操作系统。接着,系统会启动multi-user.target下的本机与服务器服务,并检查/etc/rc.d/rc.local文件是否有用户自定义脚本需要启动。最后,系统会执行multi-user.target下的getty.target及登录服务,并检查default.target是否有其他的服务需要启动。相比于CentOS 6使用Upstart作为初始化进程,CentOS 7使用了systemd作为初始化进程。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [centos7启动过程](https://blog.csdn.net/weixin_33769125/article/details/92592535)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [centos7启动过程](https://blog.csdn.net/qq_54429571/article/details/126601356)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值