[RFC] Filesystem-local databases in mlocate
Miloslav Trmac
mitr at volny.cz
Fri Mar 16 04:16:26 UTC 2007
Hi,
I'm planning to add filesystem-local database support to mlocate. This
allows:
- running updatedb on a file server and making the database
automatically available to clients without any client-side
configuration
- using locate on GFS volumes without running updatedb on each host that
has the volume mounted (which slows the volumes down due to lock
contention)
The plan:
* the mlocate.db format is extended to support databases without a fixed
path prefix, such that all entries in a database in
/foo/bar/.mlocate/mlocate.db are implicitly prefixed by /foo/bar.
(this allows using /srv/home on the file server, mounting it as /home,
and using a single database on both the server and the client).
* locate(1)'s default database is not just /var/lib/mlocate/mlocate.db;
mlocate also checks each mounted filesystem for a .mlocate/mlocate.db
file, owned by root or the invoking user, and not writable by anyone
but the owner. Such files are automatically added to the database
path.
* To allow overriding this check, the LOCATE_PATH variable is changed
to override the default database path instead of appending to the
database path.
*note*: this is an incompatible change
* updatedb(8) gets a new option, --single-fs PATH.
This option generates a database in PATH/.mlocate/mlocate.db that
spans only the subtree of PATH. filesystems mounted in subdirectories
of PATH are automatically excluded, PRUNEFS is ignored. PRUNEPATHS is
honored, except for PATH itself.
* /etc/cron.daily/mlocate reads /etc/sysconfig/mlocate to get a list
of single-fs PATHs. For each PATH it checks PATH/.mlocate/mlocate.db
is older than 12 hours, creates a lock to prevent a concurrent
updatedb, and runs updatedb --single-fs PATH.
The standard daily run is performed as well, with all entries of
/etc/sysconfig/mlocate added to PRUNEPATHS automatically.
Usage for /home on NFS:
- NFS is automatically excluded by clients, so updatedb on clients
does not walk the filesystem.
- On the server:
Add /srv/home to /etc/sysconfig/mlocate. If /srv/home is not a
separate mount point, add LOCATE_PATH=:/srv/home/.mlocate/mlocate.db
to the global environment.
Usage for /home on GFS:
- GFS is automatically excluded, so no host walks the filesystem by
default.
- On all hosts: add /home to /etc/sysconfig/mlocate
Can anyone see a problem with the plan, or an important feature that the
above fails to address?
Thanks,
Mirek
More information about the fedora-devel-list
mailing list