This documentation is for Dovecot v2.x, see wiki1 for v1.x documentation.

Online Mailbox Format Conversion

This page aims to help with the tasks around planned mailbox migrations to e.g. mdbox. To perform this exercise with minimum service interruption a Postfix check can be implemented to put mail for the accounts to be migrated on HOLD:

Postfix main.cf

smtpd_recipient_restrictions =
 [...]
 check_recipient_access hash:/etc/postfix/recipient_maintenance,
 permit_mynetworks,
 reject_unauth_destination

/etc/postfix/recipient_maintenance

user@domain.tld HOLD Planned maintenance
user1@domain.tld HOLD Planned maintenance
user2@domain.tld HOLD Planned maintenance
[...]

Virtual Domain Aliases in Postfix can be easily used to populate the List of Recipients to be converted (and to be queued on HOLD). The following basic script helps populating the database and needs to be adapted to the actual alias location:

#!/bin/bash
set -e
ALIASES="/etc/postfix/virtual"
MAINTALIASES="/etc/postfix/recipient_maintenance"

doveadm user $1 || { echo 'user query failed.'; exit 1; }

sed -e "s/\(.*\)$1/\1/;s/[ \t]*$//; s/$/ HOLD Planned maintenance: account=$1/" $ALIASES >>$MAINTALIASES
grep $1 $MAINTALIASES
postmap $MAINTALIASES
echo '[ Complete ]'

Usage:

$ maintalias.sh user@domain.tld

Finally running postmap recipient_maintenance will create the database (in case this part is not scripted).

Actual Migration

Disable new logins for the users by adding allow_nets= to their userdb records, effectively disallowing ALL nets. Close open sessions if any:

$ doveadm who <user>
$ doveadm kick <user>

Convert the mailbox using the backup option:

$ dsync -u user@domain.tld backup mdbox:~/mdbox

Adjust userdb entries (if required) to reflect new mail_location. Clear the recipient_maintenance DB and undo allow_nets= entries for the migrated users.

Finally release and requeue all mail previously held:

$ postsuper -r [ALL]
$ postqueue -f

Migration/Online (last edited 2011-01-04 19:56:05 by ThomasLeuxner)