【问题标题】:Are there programmable automount/autofs hooks in linux/systemd?linux/systemd 中是否有可编程的 automount/autofs 挂钩?
【发布时间】:2018-08-15 20:27:44
【问题描述】:

我想在对特定设备/共享/挂载进行挂载尝试之前执行一个程序。 例如,我想让 autofs/amd 控制 /data/{1..10},当一个进程打开 /data/4(并且 /data/4 当前未挂载)时,会调用一个脚本,例如作为 '/usr/local/bin/preparedata 4'(4 是 autofs 控制目录中的安装点名称),在尝试安装之前。 例如,我可以动态附加 iSCSI LUN(将在 autofs 映射中引用),或启动具有 NFS 导出(在映射中指定)的远程系统/VM。

如果缺少详细信息,我很乐意补充。

更新:我注意到 systemd 似乎正在拦截 open() 调用,有什么方法可以做到这一点,特别是在 systemd 中?

【问题讨论】:

标签: linux mount systemd automount


【解决方案1】:

Autofs 本身可以运行自定义脚本或程序来动态提供“地图”,即 autofs 用于安装的安装选项和参数。

例如,要从 NFS 服务器自动挂载主目录,可能更喜欢使用“/home/user12/user123456”之类的模式作为主目录路径,以限制服务器上的子目录数量。很多用户。

要动态挂载这样的主目录,你可以把它放在你的 /etc/auto.master 中:

/home    program:/usr/local/sbin/autofs-home-mapper.sh

脚本 /usr/local/sbin/autofs-home-mapper.sh 可能如下所示:

#!/bin/bash
echo "-fstype=nfs4,relatime nfs.example.com:/exported/${1%????}/${1}"

当访问本地目录/home/johndoe时,autofs会运行脚本 有一个论点:johndoe

此脚本的输出将是:

-fstype=nfs4,relatime nfs.example.com:/exported/joh/johndoe

...然后 autofs 使用它来挂载 /home/johndoe

不要忘记在脚本上设置执行权限,因为这样的错误很难追踪。

man 5 auto.master(查看“地图类型”)和man 5 autofs 中的更多信息。

【讨论】:

  • 啊啊啊,原来研究的时候看到的,但是以为是运行一次生成地图,而不是每次在地图中查找关键字时运行。如果是后者,那么这个问题就很好的解决了!
  • 每次需要挂载时都会运行。
【解决方案2】:

查看x-systemd.requires=x-systemd.after= 以了解挂载前执行的挂钩。

这些选项可以在/etc/fstab中指定。


相关问题:Hook before an .automount unmounts

【讨论】: