![当电源故障导致 fsck 时,systemd 会加载到哪个运行级别 - 紧急模式还是救援模式?](https://linux22.com/image/1556720/%E5%BD%93%E7%94%B5%E6%BA%90%E6%95%85%E9%9A%9C%E5%AF%BC%E8%87%B4%20fsck%20%E6%97%B6%EF%BC%8Csystemd%20%E4%BC%9A%E5%8A%A0%E8%BD%BD%E5%88%B0%E5%93%AA%E4%B8%AA%E8%BF%90%E8%A1%8C%E7%BA%A7%E5%88%AB%20-%20%E7%B4%A7%E6%80%A5%E6%A8%A1%E5%BC%8F%E8%BF%98%E6%98%AF%E6%95%91%E6%8F%B4%E6%A8%A1%E5%BC%8F%EF%BC%9F.png)
有人能告诉我,断电后系统提示检查文件系统时,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
无论是否干净地关闭电源,它始终会运行。