linux/systemd 中是否有可编程的自动挂载/autofs 钩子?

Bri*_*man 5 linux mount automount systemd

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

如果缺少,我很乐意添加详细信息。

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

Hko*_*oof 6

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

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

要动态挂载此类主目录,您可以将其放在 /etc/auto.master 中:

/home    program:/usr/local/sbin/autofs-home-mapper.sh
Run Code Online (Sandbox Code Playgroud)

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

#!/bin/bash
echo "-fstype=nfs4,relatime nfs.example.com:/exported/${1%????}/${1}"
Run Code Online (Sandbox Code Playgroud)

当访问本地目录 /home/johndoe 时,autofs 将运行带有一个参数的脚本: johndoe

该脚本的输出将是:

-fstype=nfs4,relatime nfs.example.com:/exported/joh/johndoe
Run Code Online (Sandbox Code Playgroud)

...然后由 autofs 用于挂载 /home/johndoe

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

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