Linux的初始化程序 systemd

▶ Linux 的引导启动过程


▷ GRUB 配置

在 GRUB 配置中,除了指定一个内核之外,还需要指定一个 initrd 选项来指定一个配套的临时的文件系统,也就是初始 raw 磁盘,这样当用户从 GRUB 配置菜单中选择一个内核之后借助初始的 raw 磁盘把引导任务就交给了内核。

这个初始的 raw 磁盘文件是一个文件系统,可以从文件名看出。

[root@server ~]# grubby --info=DEFAULT
--snip--
initrd="/boot/initramfs-5.14.0-427.13.1.el9_4.x86_64.img"
--snip--

[root@server ~]# file /boot/initramfs-5.14.0-427.13.1.el9_4.x86_64.img
/boot/initramfs-5.14.0-427.13.1.el9_4.x86_64.img: ASCII cpio archive (SVR4 with no CRC)

这是一个 cpio 的打包文件,在引导过程中 Linux 会把这个文件加载到内核中,然后Linux 使用里面的硬件驱动程序,这样就启动了第一个进程,现在通常的进程是 systmed


▶ Linux 的 systemd

systemV 初始化后,会把所有会用到的服务都启动起来,系统需要等到所有的服务都启动之后,才能让用户登陆,这就造成了启动时间长同时也会造成资源的浪费。

systemd 有并行启动的能力,自然启动速度更快,systemd 采用仅可能启动更少的进程,尽可能将进程并行的启动。

systemd 支持之前 SystemV 的脚本兼容性,同时支持按需启动能力,只有当服务需要的时候才会启动服务。

systemd 会根据 /etc/fstab 文件来挂载文件系统,这样就能访问下面的文件了,通过访问 /etc/systmd/system/default.target 文件来决定Linux主机启动到那个目标状态。

如果是桌面系统的话会启动 XWindow 这就会连接到 graphical.target 这样相当于是 systemV 的运行级别 5,对于维护和排错来说会启动到 rescue.target 相当于是运行级别1。

▶ systemd 的基本概念

单元是 systemd 的基本配置单元,用于封装系统服务、监听 socket、设备文件...

常见类型 介绍
Service 守护进程及其组成的进程
Socket 本地或网络套接字
Target 用与对单元进行分组,或在启动后到达的目标
Device 使用udev规则的标记的设备
Mount 文件系统挂载点
Automount 提供自动挂载功能,用于按需挂载文件系统及并行启动
Timer 定时器
Swap 交换分区或文件
Path 路径

系统初始化的时候要做的事情有很多,比如要启动一些服务,也需要做配置工作,这些工作每一个环节都抽象成一个 Unit 配置单元。

列出目前系统所支持的配置单元的类型:

[root@server ~]# systemctl -t help
Available unit types:
service  mount      swap  socket  target  
device   automount  timer path    slice
scope

每一个配置单元都有一个配置文件

配置文件保存在 /usr/lib/systemd/system

[root@server ~]# ll /usr/lib/systemd/system | wc -l
307

有很多的内容,主要关注的是 ServiceTarget 这两种 Unit。

▷ Target 用于对单元进行分组,或在启动后到达的目标

Target 是把其他服务的单元组成在一起形成一个组。

每个 target 关联多个 systemd 的 Unit,这些单元可能是具体的服务。

[root@server ~]# ls -F /etc/systemd/system/multi-user.target.wants/
auditd.service@   firewalld.service@   NetworkManager.service@  sshd.service@
chronyd.service@  irqbalance.service@  remote-fs.target@        sssd.service@
crond.service@    kdump.service@       rsyslog.service@

/etc/systemd/system/multi-user.target.wants/ 就有在最小化的情况下系统会自启动的服务,这里面就有常见的 sshd 服务。


sshd.service@ 这个服务是 sshd.service 的一个符号连接。

[root@server ~]# ls -l /etc/systemd/system/multi-user.target.wants/sshd.service
lrwxrwxrwx. 1 root root 36 Aug 15 09:17 /etc/systemd/system/multi-user.target.wants/sshd.service -> /usr/lib/systemd/system/sshd.service

▷ unit 单元的依赖关系

单元可能依赖与另一个单元,这倒是像安装 RPM 软件包一样。

[root@server ~]# systemctl list-dependencies multi-user.target
--snip--
● │ ├─sockets.target
● │ │ ├─dbus.socket
● │ │ ├─dm-event.socket
● │ │ ├─sssd-kcm.socket
● │ │ ├─systemd-coredump.socket
man bootup
posted @ 2024-09-01 22:50  takenika  阅读(74)  评论(0)    收藏  举报