IMAPサーバを移転した際の、メールデータの移動手順メモ。
IMAPメーラを使用する方法
ThunderbirdなどIMAPを扱えるメールクライアントで新旧のサーバに接続し、フォルダをドラッグ&ドロップしてコピー。ユーザごとに個別に移動することになる。
お手軽だけれども、大量のメールを移動したい場合には向いていない。
メールデータを直接移動する方法
スプールのバックアップをとって、移転先に展開する力押しな方法。システム管理者が大量のメールを全ユーザまとめて移動する場合に向いている。
- 旧サーバ上で、スプールをアーカイブにまとめて新サーバ上に転送する。
cd /var/spool/imap/user tar cvfz /tmp/imapdata.tar.gz
- 旧サーバ上で、mailboxes.dbのダンプをとって新サーバ上に転送する。
/usr/local/cyrus/bin/ctl_mboxlist -d -f /var/imap/mailboxes.db > /tmp/mailboxes.txt
- 必要に応じてmailboxes.dbのダンプ内容を編集する。ダンプは、次のように全ユーザの全メールボックスが一覧になったものなので、転送内容に応じて移転先のダンプとマージするなど、適切に編集しておく。
user.seiji.Archives 0 default hoge lrswipkxtecda user.hoge.Drafts 0 default hoge lrswipkxtecda user.hoge.Sent 0 default hoge lrswipkxtecda user.hoge.Trash 0 default hoge lrswipkxtecda user.foobah 0 default foobah lrswipkxtecda user.foobah.Archives 0 default foobah lrswipkxtecda user.foobah.Drafts 0 default foobah lrswipkxtecda user.foobah.Junk 0 default foobah lrswipkxtecda user.foobah.Sent 0 default foobah lrswipkxtecda user.foobah.Trash 0 default foobah lrswipkxtecda
- 新サーバ上で、メールスプールを展開する。
cd /var/spool/imap/user tar tvfz /tmp/imapdata.tar.gz
- 新サーバ上で、mailboxes.dbのダンプをリストアする。
/usr/local/cyrus/bin/ctl_mboxlist -u < /tmp/mailboxes.txt
- ユーザごとにreconstructを実行。
/usr/local/cyrus/bin/reconstruct -r -f hoge /usr/local/cyrus/bin/reconstruct -r -f foobah
- mailboxes.dbとスプールに不整合がないか確認。
/usr/local/cyrus/bin/ctl_mboxlist -v
メールクライアントからどうしても削除できないフォルダが作成されてしまった場合なども、この手順に沿って修復可能。
cf. 「Cyrus IMAPのサーバ間データ移行(異なるOSでも可)」(LocalScope::)
cf. 「How to recover from Cyrus when you have some DB errors」(Luc Stepniewski’s Blog)