3.2. Systemd 初始化

本节描述系统是怎样通过 PID=1 的 systemd(1) 程序来启动(即初始化进程)。

systemd 初始化进程基于单元配置文件 (参见 systemd.unit(5)) 来并行派生进程,这些单元配置文件使用声明样式来书写,代替之前的类 SysV 的过程样式。 这些单元配置文件从下面的一系列路径来加载 (参见 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 的单元活动请求。

[小心]小心

模拟的运行级别 2 到 4 全部被符号链接到了相同的“multi-user.target”。