背景
- 我正在运行 ArchLinux,使用 systemd 二进制文件作为 initramfs 的一部分启动必要的服务(根 fs 解密、挂载等)。
- 我想要检查一下在这个阶段启动了哪些 systemd 单元以及何时启动。
systemd-analyze plot
仅显示切换根发生后所有单元的时间图。交换机根单元(根据定义,它是 initrd 引导序列中的最后一个单元)状态:
[Service] # ... ExecStart=/usr/bin/systemctl --no-block --force switch-root /sysroot # ...
switch-root 系统命令的 systemctl 手册页有如下内容:
切换根目录 ROOT [INIT]
切换到不同的根目录并在其下执行新的系统管理器进程。这旨在用于初始 RAM 磁盘(“initrd”),并将从 initrd 的系统管理器进程(又名“init”进程)转换为从实际主机卷加载的主系统管理器进程。此调用需要两个参数:将成为新根目录的目录,以及作为 PID 1 执行的新系统管理器二进制文件的路径。如果后者被省略或为空字符串,则会自动搜索 systemd 二进制文件并将其用作 init。如果省略系统管理器路径,等于空字符串或与 systemd 二进制文件的路径相同,则 initrd 的系统管理器进程的状态将传递给主系统管理器,这允许稍后检查 initrd 启动阶段涉及的服务的状态。
然后对 initrds 的事情保持沉默......
问题
启动后,我如何才能自省如上所述的 initrd 启动阶段所涉及的服务的状态,或者发现哪些单元甚至运行了(因为有些是动态生成的)?
答案1
https://freedesktop.org/wiki/Software/systemd/Debugging/建议使用journalctl -b
从启动时查看日志消息。