Skip to content
此页的大纲

Systemd初始化

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

什么是systemd

systemd是Linux系统的一个守护进程,它的作用是管理系统中的所有进程,比如启动、停止、重启、查看状态等。

你可以使用systemctl 命令来管理systemd进程。详见Systemd

systemd的初始化

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

派生的进程被放在一个单独的 Linux control groups,在单元后命名,它们属于一个私有的 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

小心

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

主机名

内核维护系统主机名。在启动的时候,通过 systemd-hostnamed.service 启动的系统单位设置系统的主机名,此主机名保存在 "/etc/hostname"。这个文件应该只包含系统主机名,而不是全称域名。

不带参数运行 hostname(1) 命令可以打印出当前的主机名。

文件系统

硬盘和网络文件系统的挂载选项可以在 "/etc/fstab" 中设置,参见 fstab(5) 和 第 9.6.7 节 “通过挂载选项优化文件系统”。

加密文件系统的配置设置在“/etc/crypttab”中。参见 crypttab(5)

软 RAID 的配置 mdadm(8) 设置在 "/etc/mdadm/mdadm.conf". 参见 mdadm.conf(5).

小心

每次启动的时候,在挂载了所有文件系统以后,"/tmp", "/var/lock", 和 "/var/run" 中的临时文件会被清空。

网络接口初始化

对于deepin,网络接口通常由两个服务进行初始化:lo 接口通常在“networking.service”处理,而其它接口则由“NetworkManager.service”处理。

参见 第 5 章 网络设置 来获取怎样来配置它们的信息。