Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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?

like image 316
Brian Chrisman Avatar asked Dec 31 '14 01:12

Brian Chrisman


People also ask

Does autofs use fstab?

Please note that systemd's automount feature is separate from the method provided by the autofs package, which has been around many years longer. The method used by the autofs package does not use entries in /etc/fstab. Instead, it uses /etc/auto. master plus map files.

What is difference between autofs and fstab?

Autofs should be as performant as fstab based mounting but has the advantage that your shares are mounted on demand which also should give you more reliability in case of network interuptions. If you already have mounted your shares already via fstab comment out that line in fstab and reboot.

How does autofs work in Linux?

Autofs is an automount daemon that manages mount points as needed. In short, it only mounts a given share when that share is being accessed and are unmounted after a defined period of inactivity.


1 Answers

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.

like image 98
Hkoof Avatar answered Sep 28 '22 00:09

Hkoof