在我的特殊情况下,我想remote-fs
在glusterfs
完全启动后再启动设备。
我的系统文件:
glusterfs
目标:
node04:/usr/lib/systemd/system # cat glusterfsd.service
[Unit]
Description=GlusterFS brick processes (stopping only)
After=network.target glusterd.service
[Service]
Type=oneshot
ExecStart=/bin/true
RemainAfterExit=yes
ExecStop=/bin/sh -c "/bin/killall --wait glusterfsd || /bin/true"
ExecReload=/bin/sh -c "/bin/killall -HUP glusterfsd || /bin/true"
[Install]
WantedBy=multi-user.target
remote-fs
目标:
node04:/usr/lib/systemd/system # cat remote-fs.target
[Unit]
Description=Remote File Systems
Documentation=man:systemd.special(7)
Requires=glusterfsd.service
After=glusterfsd.service remote-fs-pre.target
DefaultDependencies=no
Conflicts=shutdown.target
[Install]
WantedBy=multi-user.target
好的,所有Gluster守护程序都成功启动,我想通过NFS挂载Gluster文件系统,但是Gluster的NFS共享不是在glusterfs.service
启动后立即准备就绪,而是在几秒钟后准备就绪,因此remote-fs
即使是关于Requires
和After
指令,通常也无法挂载它。
让我们看看日志:
Apr 14 16:16:22 node04 systemd[1]: Started GlusterFS, a clustered file-system server.
Apr 14 16:16:22 node04 systemd[1]: Starting GlusterFS brick processes (stopping only)...
Apr 14 16:16:22 node04 systemd[1]: Starting Network is Online.
Apr 14 16:16:22 node04 systemd[1]: Reached target Network is Online.
Apr 14 16:16:22 node04 systemd[1]: Mounting /stor...
在这里一切正常,在glusterfs启动后,似乎挂载了远程文件系统(/ stor),因为这意味着要根据单位文件进行安装...但是接下来的几行是:
//...skipped.....
Apr 14 16:16:22 node04 systemd[1]: Started GlusterFS brick processes (stopping only).
什么?GlusterFS仅在这一刻准备好了!然后我们看到:
//...skipped.....
Apr 14 16:16:23 node04 mount[2960]: mount.nfs: mounting node04:/stor failed, reason given by server: No such file or directory
Apr 14 16:16:23 node04 systemd[1]: stor.mount mount process exited, code=exited status=32
Apr 14 16:16:23 node04 systemd[1]: Failed to mount /stor.
Apr 14 16:16:23 node04 systemd[1]: Dependency failed for Remote File Systems.
Apr 14 16:16:23 node04 systemd[1]: Unit stor.mount entered failed state.
挂载失败,因为在systemd尝试挂载存储时NFS服务器尚未准备就绪。
由于systemd引导过程的不确定性,有时(大约每10个引导中的1个)在引导过程中成功挂载此文件系统。
如果onboot挂载不成功,我可以登录到服务器并手动挂载/ stor目录,因此Gluster的NFS服务似乎可以正常工作。
那么,如何在remote-fs
after之后开始glusterfsd
,即在Started GlusterFS brick processes
日志中出现一行之后呢?
remote-fs
似乎是最后一个目标之一,所以我无法让它在另一个实际上不需要的“替代方法”目标之后开始remote-fs
。
glusterfsd.service
单位档案确实让我感到困惑。它似乎并没有真正启动任何服务,实际上杀死了所有glusterfsd
进程。您还有其他与gluster相关的单位文件吗?
stor.mount
单位吗?
ExecStartPre=<command>
的“单元”部分添加属性glusterfsd.service
?这可能会阻止glusterfsd.service
指示成功并激活remotefs.target
。