DemandFS is a filesystem-layer for unix-like systems using FUSE.
Like autofs and automount it shall execute a mount if a specific direcotry
receives a filesystem request and do also a unmount after the filesystem was
idle for some time. Additional it has following features:
- the first request on the filesystem will block until the mount-script in the background has finished.
- it can execute a script (to unmout) after the idle-timeout for the filesystem has reached
DemandFS is not a daemon - it uses FUSE to be mounted on a specific directory.
Its main part is a layer between the mountpoint where it was mounted
and the backdir, which holds the data. Every call for the mountpoint will
be mapped to the backdir.
If the backdir is not mounted, the request will fire a trigger which
starts a script specified as mountscript. If this scripts returns with 0
as returncode, the request will be mapped to backdir.
After the filesystem is idle for some seconds, specified as timeout,
DemandFS will call the unmountscript to unmount the backdir.
- backdir: The directory where the mountscritp mounts the directory. This directory really holds the data. DemandFS will work as a mapper between its own mountpoint and this directory.
- mountscript: Path to the script which is called to mount the backdir.
- umountscript: Path the script which unmounts the backdir
- timeout: Time in secods after last avitivty, DemandFS will try to call
the unmountscript when the timeout has reached.
DemandFS checks the idle-state of the FS only every 30 seconds, so it can take this time longer before the unmount is called. - verbose: Use verbose=true to get verbose output. (You should also use the -f option to run DemandFS in foreground)
- -f: will run DemandFS in the foreground (might be easier to find problems)
tmp # cat mount.sh
#!/bin/bash
mount -t nfs -o rw 192.168.1.3:/Daten /mnt/back_server
exit $?
tmp # cat unmount.sh
#!/bin/bash
umount /mnt/back_server
exit $?
tmp # demandfs.py -o backdir=/mnt/back_server,mountscript=/tmp/mount.sh,umountscript=/tmp/unmount.sh,timeout=60 /mnt/server
The both scripts in /tmp will do the mount and unmount of the source, a NFS
share in this case. They will mount it to /mnt/server_back.
DemandFS mountpoint is /mnt/server. If any request will reach this
destination, it will call the mountscript and (if it does not fail) the data
will be available in /mnt/server.
If /mnt/server is idle for 60 seconds, DemandFS will call the script to
unmount.