我在运行 systemd252 的 debian12 系统上有一个 nfs 挂载点,我需要在启动时将其挂载在 zfs 之前但在之后network-online.target
,因此我尝试使用,/etc/fstab
但它一直在加载之前network-online.target
(即使使用 x-systemd.before= 等)。我还尝试放入一个/etc/network/if-up.d/nfs
挂载 nfs 的脚本,但 zfs 在那之前加载。
因此,我尝试使用 systemd 创建挂载服务;
# /etc/systemd/system/nfs.mount
[Unit]
Description=nfs
DefaultDependencies=no
Conflicts=umount.target
Before=local-fs.target umount.target zfs-import.target
After=swap.target network-online.target
Requires=network-online.target #it doesn't work with and without this line
[Mount]
What=0.0.0.0:/ # generic info
Where=/nfs
Type=nfs
Options=ro,async,nfsvers=4,nosuid
[Install]
WantedBy=multi-user.target
这似乎是在之前加载的,network-online.target
因为它出错并显示:“mount.nfs:网络无法访问”,我也尝试过创建多个其他服务,但之前、之后和需要似乎都不起作用。我该如何按顺序加载网络、nfs、zfs?
编辑:似乎network-online.target
报告到达得太早了,nfs.mount
确实在之后就开始了,这意味着“之后=”有效。我尝试添加延迟,ExecStartPre=/usr/bin/sleep 10
但这会延迟整整 2 分钟。
编辑2:我通过改变服务修复了这个问题;
# /etc/systemd/system/mount-nfs.service
[Unit]
Description=Mount nfs after network but before docker
DefaultDependencies=no
Before=docker.service
After=network-online.target remote-fs.target
Wants=network-online.target
[Service]
Type=oneshot
RemainAfterExit=no
ExecStartPre=/usr/bin/sleep 15
ExecStart=/usr/bin/mount 0.0.0.0:/ /nfs
ExecStart=/usr/sbin/zfs mount -a
[Install]
WantedBy=multi-user.target
添加after=remote-fs.target
原因这篇博文,
wants=network-online.target
因为本文档,并替换before=zfs-import.target
为仅安装zfs mount -a
所以最后,主要帖子标题得到了解决。(我没有发布我自己问题的答案,因为我从技术上解决了这个问题,而不是完全修复它)