syncing maildirs

Jon Masters jonathan at
Sat Aug 12 01:34:53 EDT 2006

Hi folks,

In preparation of my move to the US, I'm sorting out my email. In the
past, all mail incoming has been subjected to a series of complex exim
rules in order to duplicate it (in triplicate) and keep several copies
in case of server problems - I'm often traveling, especially on
weekends, and I dislike downtime removing my ability to read mail -
but I've only generally actually used one "authoritative" maildir for
actually reading the mail when things worked.

Now, I've setup a bunch of virtual machines (some with
linode/bytemark, others hosted myself in "real" colo) on both sides of
the atlantic. I've got private openvpn (TLS/SSL) peerings between the
machines and lots of cross-mounted NFS. I want to ultimately use GFS/a
distributed filesystem but I'm waiting on folks like linode/bytemark
to upgrade their kernels for me to be able to do that. Roll on Xen

So, on my test domain, mail now does e.g. this:

mail testdomain --> MX chosen --> one vm in rotation --> delivered
into multiple Maildirs

This works great and does mean that I can - for the foreseeable future
- live with this NFS hack. Mail is nicely backed up into many diverse
locations when it is received and this can scale up to 4 or 5 machines
in the rotation, and that'll do for now.

But in the new world order, I've decided I'd like to be able to read
mail on any of these machines - it as after all the "same" since
there's just a local symlink on each box pointing to its own local NFS
mount. The problem is obvious - I'm not syncing maildir metadata with
each NFS mount so each maildir is out of sync with the others. Read
mail is not marked in every maildir copy and deletions aren't global
either (that's less of a problem, however).

There are various pieces of software that are designed for "offline
maildirs" and other "maildir sync" type of utilities. I'm happy to
write one that does what I want to do - since this is a little unusal
- but I would also love it if someone could point me at an existing
tool! The local RTC on each VM is not under my control, but I can
ensure that the tool I use sees "newer" modifications with higher
timestamps via an LD_PRELOAD libc hack if needed :-)


More information about the Discuss mailing list