[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