linuxmountsystemdautomount

Are there programmable automount/autofs hooks in linux/systemd?


I'd like to have a program executed before a mount attempt is made for a particular device/share/mount. For example, I'd like for autofs/amd to control /data/{1..10}, and when a process opens /data/4 (and /data/4 is not currently mounted), a script is invoked, such as '/usr/local/bin/preparedata 4' (4 being the mount point name within the autofs controlled directory), prior to the attempt to mount. For example, I could dynamically attach an iSCSI LUN (which would be referenced in the autofs map), or startup a remote system/VM which has an NFS export (which is specified in the map).

I'd be glad to add details if missing.

Update: I've noticed that systemd appears to be intercepting open() calls, is there some way to do this particularly in systemd?


Solution

  • Autofs itself can run a custom script or program to dynamically provide "the map", i.e. the mount options and arguments autofs uses for mounting.

    As an example, to automount home directories from an NFS-server one may prefer to use a pattern like "/home/user12/user123456" for the homedir paths to limit the number of sub-directories on a server when there are many users.

    To dynamically mount such home directories, you could put this in your /etc/auto.master:

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

    The script /usr/local/sbin/autofs-home-mapper.sh could look like this:

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

    When the local directory /home/johndoe is accessed, autofs will run the script with one argument: johndoe

    Output of this script will then be:

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

    ...which is then used by autofs to mount /home/johndoe

    Don't forget to set eXecute permission on the script, as it can be difficult to track down a bug like that.

    More information in man 5 auto.master (look under "map-type") and man 5 autofs.