有人能告诉我,断电后系统提示检查文件系统时,systemd 运行在哪个运行级别吗?是紧急情况还是救援,还是视情况而定?我有一些 systemd 单元需要在系统启动时提示检查文件系统时运行。如果不需要,我宁愿不修改最小的 emergency.target shell 来加载脚本,所以我希望它在救援模式下运行。
此外,如果有人有临时破坏文件系统的巧妙方法,以便我可以调用 fsck 提示进行测试,我将不胜感激。我尝试更改 /etc/fstab,但是这会导致进入紧急模式。
非常感谢您的帮助。
答案1
通常都不是——它是常规启动过程的一部分。
对于 /etc/fstab 中列出的文件系统,如果“check”标志设置为非零,则相应的 .mount 单元会自动获得对 的依赖systemd-fsck@<dev>.service
。当该服务完成时,systemd 将继续挂载文件系统(启动 .mount 单元)。这不是特殊状态,而是常规作业队列的一部分。
如果 fsck 服务失败(例如需要某种手动修复),.mount 单元也会失败,并且只能这最终触发从常规启动目标到的切换emergency.target
。
如你所见,fsck 正在运行每一个启动,断电唯一影响的是启动时间。(有些文件系统有一个“脏”位,在挂载时设置,在卸载时清除;其他文件系统根据更新日志中未处理的条目检测状态。)要改变这种行为,您必须更改程序fsck.<fstype>
或完全禁用 fstab 中对该文件系统的检查。
要在运行前启动其他服务systemd-fsck@<dev>
(每次启动时都会发生,前它决定是否需要扩展检查)使用扩展 systemd 单元的常规方法。
请注意根文件系统是一个特殊情况:在某些发行版中,它实际上是在检查初始化内存文件系统(早期启动阶段),而主 systemd 进程尚未运行。(根据发行版,initramfs 可能有自己的 systemd,或者完全不同的 init。)同样,fsck
无论是否干净地关闭电源,它始终会运行。