依赖哪个 zfs 命令/systemd 单元来确保挂载点可用?

依赖哪个 zfs 命令/systemd 单元来确保挂载点可用?

我想确保在由 管理的服务systemd启动之前有一个可用的 ZFS 挂载点。因此,我将使用单元After=中的节systemd。但是,要写什么作为参数呢?

由于发布版本持续存在性能问题,我使用本地安装的 ZFS,并导入唯一的池

[Unit]
Description=ZFS pool import for source installations of ZFS
After=local-fs.target

[Service]
Type=oneshot
ExecStart=/usr/local/sbin/zpool import -d /dev data

[Install]
WantedBy=multi-user.target

因为我从来没有找到任何有用的关于 Ubuntu 的支持文档systemd,而且似乎现在才成为开发者的目标

但是,在另一个系统上,我也遇到了内置资源问题,例如,zfs-mount.service即使没有导入任何池,它也会加载并运行,因此无法成功挂载。

是否有一个目标可以让我的服务依赖它,以便仅在挂载点可用后启动,并且如果整个 ZFS 或仅挂载点初始化失败则拒绝启动(并且我可以复制它以进行本地安装)?

我正在使用 Ubuntu 17.10。

答案1

系统默认设置

这里有很多神奇的东西,但在 Ubuntu 18.04 上答案一般来说似乎是zfs.target,它被列为WantedBy各种zfs-*.services(mount、modprobe 等)。如果你仔细阅读,你会看到这一点

more /lib/systemd/system/zfs* | less

您可能会注意到,在运行之后但在文件系统挂载之前也有一个zfs-import.target满足的条件。zpool import

不过,就我而言,还有其他步骤需要先执行(例如,加密块设备映射),因此这些步骤对我来说不是开箱即用的。

特定挂载点

对于特定挂载点,我建议不要依赖通用的zfs.target,而是添加您自己的服务(可能使用Wants=zfs.target),以检查系统所依赖的特定挂载的状态。例如,如果您依赖于/blah/my/zfs/mount挂载,只需为其创建一个服务,该服务可以在返回之前检查 zfs 挂载状态,可能使用

zfs get mounted blah/my/zfs/mount | grep yes

例子

/etc/systemd/system/my-zfs-mount.service

[Unit]
Description=ZFS mount blah/my/zfs/mount
Wants=zfs.target

[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/sbin/zfs get mounted blah/my/zfs/mount | grep yes

[Install]
WantedBy=multi-user.target

然后您的其他服务就可以依赖于这个。

相关内容