On Fri, 2011-10-07 at 11:09 -0400, Micah Anderson wrote:
I'm trying to determine what the best way to restore mail with mdbox is. Restoring using maildir was trivial, I just used rsync --ignore-existing which wrote any mails that were removed and didn't touch things that already existed[1].
If a mail had changed flag, the maildir file got duplicated, which Dovecot complained about if it noticed it.
With mdbox things have become more complicated, and I haven't found a way to restore mail that doesn't result in many message duplicates.
Do you need to restore mails so often that this is really a problem? :)
- I tried rsyncing the different backup directories back to the mail storage host, and then doing:
'dsync -R backup -u $user mdbox:/path/to/to/daily.1/mdbox'[2] 'dsync -R backup -u $user mdbox:/path/to/to/daily.2/mdbox'
This works ok, but it gives duplicates of every mail that already exists for every daily/weekly I dsync. This is what the rsync --ignore-existing avoided. This is particularly annoying if I restore the weekly, and multiple daily directories, because then you get a copy for every one you restore. I had thought that the individual message's GIDs would keep them from being duplicated?
GUIDs can be used to identify messages, but there's no automatic deduplication. It's fine to e.g. copy a message from INBOX to INBOX, which duplicates it. Dovecot shouldn't prevent that.
Is there a way I can restore things from backup and avoid duplicates? Is there another method I should try?
Here's one way, although somewhat slow (and not fully tested):
doveadm -f tab fetch -u user@domain 'mailbox guid' all | sort > guids1 doveadm -f tab fetch -o mdbox:/backups/user -u user@domain 'mailbox-guid guid' all | sort > guids2 diff -u guids1 guids2 | grep '^+[+]' | sed 's/^+//' | awk { system("doveadm import -u user@domain mdbox:/backups/user restored mailbox-guid "$1" guid "$2); }
- why doesn't doveadm import have a -s option to subscribe?
I suppose it could.. Added to v2.1: http://hg.dovecot.org/dovecot-2.1/rev/afec4ceda8e1