An AutoFS executable map to automount device nodes
For my company’s hard disk-based backup system I needed the ability to automount disk drives by their device name into a standard directory structure.
One possible approach would be to add some lines like these to fstab:
/dev/sda1 /mnt/sda1 ext3 defaults,noauto 0 0
This may be good enough in some cases, though it wasn’t sufficient for me, when there were dozens of device nodes which could get mounted eventually.
So I basically wanted something that would allow me to just access a directory, while the underlying disk was mounted automatically, then having it unmounted automatically if not in use, but still being dynamic in it’s nature so it would auto-adjust.
Now there’s a simple trick using an AutoFS feature called “executable maps”, which would allow me to achive this all.
The idea is, that all devices (let’s say /dev/sda1, /dev/sda2, /dev/sdb1, /dev/sdc1 as an example) will get mounted to /mnt/disks/[devicename].
First make sure, that AutoFS is installed. On Debian for example, it is installed like this:
apt-get install autofs
Then create a file called /etc/auto.disks with the following lines therein:
#!/bin/bash # $1 is passed-over from automount # key refers to the mount point we are looking for key="$1" # default mount options opts="-fstype=ext3,rw" # if a block device exists at /dev/[key] # pass it back to automount [ -b /dev/${key} ] && { echo "$opts \"; echo -e "t:/dev/${key}"; }
Don’t forget to chmod 755 /etc/auto.disks.
This script will create an automounter map dynamically as soon as it passed
a device node. It it finds it (e.g. while looking up /dev/sda1, which exists), it’ll
return the map to automount, which will cause the device node to be mounted.
In my case, the script didn’t need to be very sophisticated as I only have ext3-formatted disks, but it’s easy to script it for automatic file system recognition.
Btw, the script can be tested like this to see if it’s actually working:
satyr:~# bash /etc/auto.disks sda1 -fstype=ext3,rw :/dev/sda1 satyr:~# bash /etc/auto.disks sdx1
The first command returns the map for an existing device node /dev/sda1, while the second command returns nothing as /dev/sdx1 doesn’t exist on the system.
Now set AutoFS to use the executable map for /mnt/disks directory. Add this line to /etc/auto.master:
/mnt/disks /etc/auto.disks --timeout=360
This will cause AutoFS to examine the executable map on all requested sub directories beneath /mnt/disks. So if you’re going to access /mnt/disks/sda1, /mnt/disks/sda2, /mnt/disks/sdb1, /mnt/disks/sdc1, the block devices corresponding to the directories are mounted automatically — as long as the devices exist of course.
The timeout value designates after how much time (of inactivity) an automounted file system expires and get’s unmounted.
February 15th, 2010 at 6:46 pm
complicated,
the same is done with autofs sub map file containing
* -fstype=ext3,rw :/dev/&
cheers
/JM
November 25th, 2010 at 12:48 am
Ha!Hey!Hah!. That’s funny. That’s the third time I’ve seensomething along those lines. Cool.