Cyrus IMAPサーバ移転

IMAPサーバを移転した際の、メールデータの移動手順メモ。

IMAPメーラを使用する方法

 ThunderbirdなどIMAPを扱えるメールクライアントで新旧のサーバに接続し、フォルダをドラッグ&ドロップしてコピー。ユーザごとに個別に移動することになる。

お手軽だけれども、大量のメールを移動したい場合には向いていない。

メールデータを直接移動する方法

スプールのバックアップをとって、移転先に展開する力押しな方法。システム管理者が大量のメールを全ユーザまとめて移動する場合に向いている。

  1. 旧サーバ上で、スプールをアーカイブにまとめて新サーバ上に転送する。
    cd /var/spool/imap/user
    tar cvfz /tmp/imapdata.tar.gz
  2. 旧サーバ上で、mailboxes.dbのダンプをとって新サーバ上に転送する。
    /usr/local/cyrus/bin/ctl_mboxlist -d -f /var/imap/mailboxes.db > /tmp/mailboxes.txt
  3. 必要に応じて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
  4. 新サーバ上で、メールスプールを展開する。
    cd /var/spool/imap/user
    tar tvfz /tmp/imapdata.tar.gz
  5. 新サーバ上で、mailboxes.dbのダンプをリストアする。
    /usr/local/cyrus/bin/ctl_mboxlist -u < /tmp/mailboxes.txt
  6. ユーザごとにreconstructを実行。
    /usr/local/cyrus/bin/reconstruct -r -f hoge
    /usr/local/cyrus/bin/reconstruct -r -f foobah
  7. 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)