Gonna start over and try to be more simply.
On Fri, Dec 24, 2010 at 9:57 PM, Stan Hoeppner stan@hardwarefreak.comwrote:
Joan Moreau put forth on 12/24/2010 5:41 PM:
1 - plan to have all the new emails in a different folder (say "/data/mail2" )
No. Do not need to do anything.
2 - make a script that go through all users & domains
Yes.
3 - for each user (and therefore dbox folder), run "dsync -o mail_location=sdbox:/data/mail/%d/%n mirror mdbox:/data/mail2/%d/%n" (where %d and %n are updated correctly for each user)
I did not, but you could!
4 - move /data/mail to /data/mailold and move /data/mail2 /data/mail
You don't have to move the mail "back".
No.
5 - update dovecot.conf with "mail_location = mdbox:/data/mail/%d/%n"
Simply change the mail location to the new directory in dovecot.conf. After you've confirmed all the users' mail is safely in the new location you can delete all the old mail folders/structure.
You could, or use it from mysql.
6 - Only then, restart dovecot in production ?
You can perform all of this without stopping Dovecot. IMAP commands are used for the mirror operation to the new directory/mailboxes not some direct file manipulation that requires the mailboxes be offline.
Shutting down dovecot simply makes sure you don't miss new mail that's written by users or your MTA (new deliveries) while the mirror operation is running (which can take a LONG time). If you do it live, you simply have to make a second run, which will be MUCH faster due to fewer "new" mails to mirror. Think of how rsync works--only new files are copied. So the seconds run will be quick. Immediately after the second run, stop dovecot, change the mail location in dovecot.conf to the new directory with the mdbox files and start dovecot. Or, better, stop dovecot before the 2nd mirror run, run the mirror op, change dovecot.conf with new mail location, start dovecot. Down time during the 2nd run should/will be minimal.
I did with down time most part of it. But a few hundres i did live.
I have about 9k acount on my server.
ISn't there a way to do that keeping dovecot running ?
Yes, see above.
As i will try to explain again!
Let see.
First some info.
Dovecot can ether get this informations about gid and uid and mail location from mysql using user_query. If the return of query is an result this will be used, if it is null the conf file will be use.
I don't know if what i used is the best way, but it worked for me.
Right now, you can run this comand.
# dsync -v -u user@domain.com backup mdbox:/Converted/mail/user1/mdbox
And it will make exacly the same mail from user@domain.com in /Converted/mail/user/mdbox
but with only this, you can not do anything, becase dovecot for imap process sees the location of mail in the conf file. and it still the other path. This is why mysql with field "mail" goes. It tells dovecot that for that user, the maillocation is /Converted/mail/user/mdbox
My user query tells me for each user. uid gid home and mail_location
Usualy my mail_location is maildir: ~/mail/ and home is /some-storage/domain/user/
And for other users it uses mail_location from the file that is mbox:/domaim/user:INBOX:/var/spoll/mail
I mean, like this i have total control what each user will have it for conf.
So once you have configured dovecot to user mysql you can run this steps.
1 - make the home of user unwriteble to dovecot. 2 - conver with dsync like this. # dsync -v -u user@domain.commdbox:~/mdbox/ 5 - make mdbox:~/mdbox writible to dovecot 4 - Change mail location of this user in mysql ( before it was null, so dovecot uses the file ) change it to mdbox:~/mdbox/ 5 - Done. Now dovecot is already writing ( LDA ) and reading ( IMAP POP3 ) from mdbox
I guess it would be all
Still any questions ?