Systemd 服务在断电后在文件系统挂载之前启动

Systemd 服务在断电后在文件系统挂载之前启动

我遇到了一个问题系统服务在安装本地分区之前启动,特别是在断电事件之后。我调查了一下,发现这个问题是由于系统重新启动和随后的操作而引起的FSCK手术。

为了轻松复制问题,我创建了一个最小的概念证明。以下是详细信息。

我有一个名为 systemd 的服务,test.service配置如下:

[Unit]
Description=fsck order POC
After=network-online.target local-fs.target remote-fs.target swap.target

[Service]
ExecStart=/bin/bash -c "date > /mnt/storage/hello"

[Install]
WantedBy=multi-user.target

在我的 中/etc/fstab,我配置了一个安装点,如下所示:

/dev/sda1 /mnt/storage auto nosuid,nodev,nofail 0 2

运行sudo tune2fs -l /dev/sda1 | grep -i "mount count"返回:

Mount count: 1
Maximum mount count: 1

这表明/dev/sda1每次启动时都会进行 fsck。但是,该hello文件是在根文件系统的/mnt/storage目录中创建的,而不是预期的sda1挂载点。

结果,/mnt/storage启动后我看不到任何东西。但是,如果我可以看到该hello文件umount /mnt/storage

我的问题是:我应该进行哪些更改test.service以确保在安装并检查所有文件系统后执行我的脚本? (注意:安装点的名称可能会有所不同,因为当部署在客户端站点时我无法控制它。)

系统运行的是Ubuntu。这个问题在 Debian 上不会发生。

任何有关解决此问题的见解或建议将不胜感激。预先感谢您的帮助!

答案1

我的评论中的解决方案

来自 systemd.mount 联机帮助页:

nofail
            With nofail, this mount will be only wanted, not required,
 by local-fs.target or remote-fs.target. Moreover the mount unit is not ordered
 before these target units. This means that the boot will continue without
 waiting for the mount unit and regardless whether the mount point can be 
 mounted successfully.

如果您尝试不使用该标志,则 local-fs.target

第一次尝试提供帮助(在这种情况下没有解决方案)

跑步:

systemctl list-units --type=mount

识别您的挂载单元,并将其添加到 systemd 文件中的 After= 中。

也许有助于识别正确的单位:

systemctl status <unit>

相关内容