Reconstructing mailboxes when using delayed expunge

Sebastian Hagedorn Hagedorn at uni-koeln.de
Wed Jul 23 12:58:02 EDT 2008


Hi,

we're running Cyrus 2.3.11 with "delete_mode: delayed". Today, for the 
first time since using that feature, we had to undelete an entire hierarchy 
of mailboxes a user had inadvertently deleted. We found that it was more 
tricky than we had anticipated. This is an anecdotal report of how we 
managed to do it eventually. I hope this might help other admins in the 
future, because I don't think this is really documented anywhere.

The first issue was finding the deleted mailboxes. It seems they can be 
anywhere, more or less. We have three partitions. We managed to find them 
by doing this:

ctl_mboxlist -d | grep DELETED | grep username

Then we had to look for them with mbpath, replacing the '.' with '/', 
because we use unixhierarchysep. The next surprise was that the actual 
mails were in subdirectories with funny names, e.g.:

DELETED/user/xxx/blabla/bla/48873884

(That's when the original mailbox was called user/xxx/blabla/bla)

I found out that a timestamp is added by reading the source. I suppose 
that's so that multiple deletions of a mailbox of the same name don't 
clobber prior versions.

We then copied the contents of the timestamped folders to a newly created 
folder in the user's mailbox. Our internal documentation said not to copy 
the metadata (i.e. the cyrus.xxx files), but I don't remember why. Is that 
the right thing to do? It caused us some headaches later on.

Then we tried our usual reconstruct approach, i.e. 'reconstruct -rf 
user/xxx'. However, the restored mailboxes weren't added. The reason is 
that -f only works when a cyrus.header file exists. Then we tried touching 
cyrus.header in the folders. But that's no good in itself, either. There 
was an error message that the mailbox had an invalid format. A look at the 
manpage suggested that -x should help. That sort of worked, but two 
mailboxes still weren't added because there was no cyrus.header file.

So without the trial & error, the correct approach seems to be:

- find the mailbox(es)
- copy their contents (with or without metadata)
- touch cyrus.header in *all* mailboxes if you did not copy the metadata
- run 'reconstruct -rfx' on the user

Has anybody else found a better way? Does everybody agree that there should 
be an 'unexpunge' for mailboxes as well?? I guess an unexpunge for 
mailboxes would have to let you specify a target folder, because simply 
writing everything to the original position might not be correct ...

Cheers, Sebastian Hagedorn
-- 
     .:.Sebastian Hagedorn - RZKR-R1 (Gebäude 52), Zimmer 18.:.
Zentrum für angewandte Informatik - Universitätsweiter Service RRZK
.:.Universität zu Köln / Cologne University - ✆ +49-221-478-5587.:.
                   .:.:.:.Skype: shagedorn.:.:.:.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 186 bytes
Desc: not available
Url : http://lists.andrew.cmu.edu/pipermail/info-cyrus/attachments/20080723/ddf88686/attachment.bin 


More information about the Info-cyrus mailing list