72 lines
4.8 KiB
Markdown
72 lines
4.8 KiB
Markdown
|
# 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).
|
|||
|
|
|||
|
系统启动时(即,init),systemd 进程会尝试启动"`/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 章 网络设置 来获取怎样来配置它们的信息。
|