5

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

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

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

4

2 回答 2

6

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.

于 2018-08-15T10:35:47.777 回答
1

看一下x-systemd.requires=, 和x-systemd.after=挂载前执行的钩子。

这些选项可以在里面指定/etc/fstab


相关问题:在unmounts之前挂钩.automount

于 2017-11-26T03:57:24.267 回答