guide.deepin.org/docs/deepin进阶教程/3.系统初始化/3.2.Systemd初始化.md
xzl 7df2468bb7 docs: update docs
更新文档,添加系统启动相关的文档

Log:
2023-02-27 15:12:51 +08:00

72 lines
4.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 3.2. Systemd初始化
本节描述系统是怎样通过 PID=1 的 systemd(1) 程序来启动(即初始化进程)。
## 3.2.1. 什么是systemd
systemd是Linux系统的一个守护进程它的作用是管理系统中的所有进程比如启动、停止、重启、查看状态等。
你可以使用`systemctl` 命令来管理systemd进程。详见[Systemd](https://wiki.deepin.org/zh/Systemd)
## 3.2.2. systemd的初始化
systemd 初始化进程基于单元配置文件 (参见 systemd.unit(5)) 来并行派生进程,这些单元配置文件使用声明样式来书写,代替之前的类 SysV 的过程样式。这些单元配置文件从下面的一系列路径来加载 (参见 systemd-system.conf(5))
派生的进程被放在一个单独的 [Linux control groups](https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v2.html),在单元后命名,它们属于一个私有的 systemd 层级结构(参见 cgroups 和 第 4.7.4 节 “Linux 安全特性”)。
单元配置文件从下列一系列路径中加载(参见 systemd-system.conf(5)
- `/lib/systemd/system`: OS 默认配置文件
- `/etc/systemd/system`: 系统管理员的配置文件,它将忽略操作系统默认的配置文件
- `/run/systemd/system`: 运行时产生的配置文件,它将忽略安装的配置文件
他们的相互依赖关系通过"`Wants=`", "`Requires=`", "`Before=`", "`After=`", … 等指示来配置,(参见 systemd.unit(5) 里的 "MAPPING OF UNIT PROPERTIES TO THEIR INVERSES")。 资源控制也是被定义 (参见 systemd.resource-control(5)).
根据单元配置文件的后缀来区分它们的类型:
- `*.service`描述由 systemd 控制和监管的进程.参见 systemd.service(5).
- `*.device`描述在 sysfs(5) 里面作为 udev(7) 设备树展示的设备。参见 systemd.device(5).
- `*.mount` 描述由 systemd 控制和监管的文件系统挂载点。参见 systemd.mount(5).
- `*.automount` 描述由 systemd 控制和监管的文件系统自动挂载点。参见 systemd.automount(5).
- `*.swap` 描述由 systemd 控制和监管的 swap 文件或设备。参见 systemd.swap(5).
- `*.path` 描述被 systemd 监控的路径,用于基于路径的活动。参见 systemd.path(5).
- `*.socket` 描述被 systemd 控制和监管的套接字,用于基于套接字的活动。参见 systemd.socket(5).
- `*.timer` 描述被 systemd 控制和监管的计时器,用于基于时间的活动。参见 systemd.timer(5).
- `*.slice` 管理 cgroups(7) 的资源。参见 systemd.slice(5).
- `*.scope` 使用 systemd 的总线接口来程序化的创建,用以管理一系列系统进程。 参见 systemd.scope(5).
- `*.target` 把其它单元配置文件分组在启动的时候来创建同步点。参见systemd.target(5).
系统启动时initsystemd 进程会尝试启动"`/lib/systemd/system/default.target`(通常是到"graphical.target"的符号链接)。首先,一些特殊的 target 单元(参见 systemd.special(7)),比如 "local-fs.target"、"swap.target"和"cryptsetup.target"会被引入以挂载文件系统。之后,其它 target 单元也会根据单元依赖关系而被引入。详细情况,请阅读 bootup(7)。
systemd 提供向后兼容的功能。在 "/etc/init.d/rc[0123456S].d/[KS]name" 里面的 SysV 风格的启动脚本仍然会被分析telinit(8) 会被转换为 systemd 的单元活动请求。
在你了解这些之后,可以尝试自己写一个 systemd 单元配置文件,然后使用 systemctl(1) 来管理它。[wiki](https://wiki.deepin.org/zh/%E5%A6%82%E4%BD%95%E8%87%AA%E5%B7%B1%E5%86%99%E4%B8%80%E4%B8%AA%E5%BC%80%E6%9C%BA%E8%87%AA%E5%90%AF%E5%8A%A8%E6%9C%8D%E5%8A%A1%EF%BC%9F)
::: warning 小心
模拟的运行级别 2 到 4 全部被符号链接到了相同的“multi-user.target”。
:::
## 3.2.3. 主机名
内核维护系统主机名。在启动的时候,通过 systemd-hostnamed.service 启动的系统单位设置系统的主机名,此主机名保存在 "/etc/hostname"。这个文件应该只包含系统主机名,而不是全称域名。
不带参数运行 hostname(1) 命令可以打印出当前的主机名。
## 3.2.4. 文件系统
硬盘和网络文件系统的挂载选项可以在 "/etc/fstab" 中设置,参见 fstab(5) 和 第 9.6.7 节 “通过挂载选项优化文件系统”。
加密文件系统的配置设置在“/etc/crypttab”中。参见 crypttab(5)
软 RAID 的配置 mdadm(8) 设置在 "/etc/mdadm/mdadm.conf". 参见 mdadm.conf(5).
::: warning
每次启动的时候,在挂载了所有文件系统以后,"/tmp", "/var/lock", 和 "/var/run" 中的临时文件会被清空。
:::
## 3.2.5. 网络接口初始化
对于deepin网络接口通常由两个服务进行初始化lo 接口通常在“networking.service”处理而其它接口则由“NetworkManager.service”处理。
参见 第 5 章 网络设置 来获取怎样来配置它们的信息。