默认情况下,systemd 会在最轻微的错误时进入紧急外壳。例如,如果 fstab 中的一个挂载由于某种原因失败,系统会立即变得无法启动。我管理着几十个不同的生产系统,我发现这种行为非常有害。(其实我认为这是一个重大的设计失败,但这是个人意见)。
我想增加系统启动弹性。理想情况下,系统应该始终启动,缺少驱动程序、挂载等不应该丢弃紧急外壳(只显示警告),除非给定的错误会导致控制台登录绝对不可能。能跑的,就该跑。
我知道 systemd 会自动从 /etc/fstab 生成 *.mount 文件,我可以使用 nofail 选项和小 x-systemd.device 超时(或自己定义相关的 .mount 文件)。但是它不能解决我的问题,我想让系统更有弹性,每次“修补” fstab 不是很方便,而且我不确定还有多少其他可能的“问题”会导致我的系统无法启动只是因为某处的一些开发人员认为这已经足够重要了。
总的来说,我想重新获得对我机器的控制权,而不是让 systemd 决定什么问题严重到足以破坏启动过程。可能吗?
实际上只是安装失败,这就是您需要更改的全部内容。
因此,您的请求信将很容易回答。创建一个插入文件:
我相信这不会增加任何新问题,除了 linux sysvinit 已经因允许这种部分故障情况而遭受的问题。
但是,您还指出了systemd 应该等待指定的块设备可用多长时间的问题。如果不提供整个 fstab 生成器的替代品,我看不出有什么方法可以配置它。https://www.freedesktop.org/software/systemd/man/systemd.generator.html
如果您在这里转储大量不太广泛使用的代码,似乎不太可能增加系统弹性。我认为最接近的解决方案是修补现有的 fstab 生成器。它不是非常复杂,我怀疑你可以侥幸逃脱/跟上任何重大变化。
从技术上讲,如果您的发行版有一个自包含的
mountall
sysvinit 脚本,您可以尝试将其挂钩。但这将显着改变引导过程 - 它实际上更像是一个分叉。我不会推荐这种方法。https://unix.stackexchange.com/a/393711/29483
通过在其条目中添加一个
noauto
挂载选项来关闭对引导操作非必要的任何文件系统的自动挂载:/etc/fstab
至:
然后在启动后使用以下行挂载文件系统
/etc/rc.local
:此示例使用 NFS,但它也适用于从文件服务器导入的 LUN。
试试这个可能吗?