通过服务自动挂载 + 服务不自动挂载文件夹

通过服务自动挂载 + 服务不自动挂载文件夹

我们在redhat 7.2版本上创建以下服务

more nfsshare.mount
[Unit]
  Description=nfs mount script
  Requires=network-online.target
  After=network-online.service

[Mount]

  What=master1:/nfs
  Where=/nfsshare
  Options=noauto,user,rw,group
  Type=nfs
  TimeoutIdleSec=10

[Install]
  WantedBy=multi-user.target

重新启动服务后,挂载点将按原样挂载

master1:/nfs             41932800 6559744  35373056  16% /nfsshare

现在我们卸载 /nfsshare 文件夹

umount /nfsshare

现在我们期望 /nfsshare 文件夹将再次挂载并且服务将自动挂载该文件夹

但没有任何反应并且文件夹未安装

我这里哪里错了?

我也尝试

 more nfsshare.automount
[Unit]
  Description=nfs mount script
  Requires=network-online.target
  After=network-online.service

[Automount]
  What=master1:/nfs
  Where=/nfsshare
  Options=noauto,user,rw,group
  Type=nfs
  TimeoutIdleSec=10

[Install]
  WantedBy=multi-user.target

但该服务在重新启动后甚至无法挂载该文件夹

答案1

正确的设置是单元nfsshare.mount包含:

[Unit]
Description=Mount nfsshare
Wants=network-online.target
After=network-online.target

[Mount]
What=master1:/nfs
Where=/nfsshare
Options=rw,group
Type=nfs

对于nfsshare.automount包含以下内容的单元:

[Unit]
Description=Automount nfsshare
Wants=network-online.target
After=network-online.target

[Automount]
Where=/nfsshare
TimeoutIdleSec=10

[Install]
WantedBy=multi-user.target

您通常只想启用该.automount单元:

$ sudo systemctl enable nfsshare.automount

通过此设置,在启动后(假设没有正在运行的守护进程访问 NFS 共享),该共享将不是被安装。但是一旦它被访问(例如ls /nfsshare),它将根据需要安装。它会保持挂载状态 10 秒,然后卸载,但在再次访问后会再次挂载。

这两个单元共同.mount作用.automount来触发这种行为。该.automount单元只需要知道在哪里设置自动挂载的挂载点目录。一旦访问该目录,它将触发对具有相同名称(相同路径)的单元的请求.mount,并等待该单元启动后再继续。

请参阅自动安装单元的手册页更多细节。


我还对您的设置进行了哪些更改?

对于网络依赖项,您应该使用network-online.target,而不是.service不存在的。我也在使用Wants=,这是针对这种情况的推荐指令(请参阅这个维基页面有关网络目标的更深入讨论。)

我从你的安装选项中删除了noautouser,因为这些选项只有在/etc/fstab.我还认为你并不真的想user在那里,只是让它自动安装,而不是允许非特权用户调用mountutil 来安装它,自动安装更好。

对哪个单元采取的指令是不同的(除了Where=两个单元都采取的指令之外),所以我只保留有效的指令。

我删除了[Install]该单元的部分.mount,因为您不需要启用它。您只需要启用该.automount单元,以便在启动时启动它,然后该单元将负责在需要时启动(和关闭)安装单元(取决于正在访问的目标目录。)


请注意,您还可以在/etc/fstab.事实上,systemd 通常建议用于/etc/fstab配置而不是创建安装单元。

对于自动挂载,您所需要做的就是向该文件系统条目x-systemd.automount的挂载选项列表中添加一个伪选项。 (在这种情况下,您通常也/etc/fstab希望包含在内。)noauto

Arch Linux wiki 的这一部分更多细节。 (这些都不是特定于 Arch Linux 的,它在 RHEL 7 上的工作方式应该完全相同。)

相关内容