Dovecot で IMAP の INBOX が突然空に見えることがあります。メールが消えたように見えるためかなり焦りますが、Maildir 上のメール実体が残っている場合は、Dovecot のインデックス不整合として切り分けられることがあります。
この記事では、INBOX が空に見える時に確認する場所、Maildir と Dovecot Index の関係、doveadm force-resync による復旧手順を整理します。
症状
今回の事象では、IMAP クライアントから見ると INBOX が空になっていました。一方で、サブフォルダは正常に見えており、Maildir 配下にはメールファイルが残っていました。
- INBOX が空に見える
- サブフォルダは正常に表示される
- Maildir の
cur/やnew/にはメールファイルが存在する - メール配送そのものが止まっているわけではない
この状態では、最初に「メール実体が消えたのか」「Dovecot が認識できていないだけなのか」を分けて確認します。
Maildir と Dovecot Index の関係
Maildir では、メールはファイルとして保存されます。Dovecot はそのメール実体に加えて、IMAP の一覧表示や UID 管理を効率化するためにインデックスやキャッシュを持ちます。
| 要素 | 役割 | 障害時の見方 |
|---|---|---|
Maildir の cur/ / new/ | メール実体 | ここにメールが残っていれば、データ自体は残っている可能性が高い |
dovecot-uidlist | IMAP UID と Maildir ファイル名の対応 | UID の不整合や再割り当てに関係する |
dovecot.index | メールボックスのインデックス | 一覧表示や状態管理に使われる |
dovecot.index.cache | キャッシュ情報 | 破損しても再構築できる場合がある |
dovecot.index.log | インデックス更新ログ | インデックスの更新履歴に関係する |
設計的には、Maildir のメール実体が正で、Dovecot Index はそれを高速に扱うためのメタデータと見ると理解しやすいです。
Maildir = メール実体
Dovecot Index = メタデータ / キャッシュ
INBOX が空に見える = 実体欠損とは限らない復旧前に確認すること
復旧コマンドを実行する前に、Maildir にメール実体が残っているかを確認します。パスは環境によって異なるため、実際の mail_location に合わせて読み替えます。
# 例: Maildir 形式の場合
ls -la ~/Maildir/
ls -la ~/Maildir/cur/ | head
ls -la ~/Maildir/new/ | headユーザー単位で Dovecot から見えるメールボックスを確認する場合は、doveadm mailbox list や doveadm mailbox status が役に立ちます。
doveadm mailbox list -u <user>
doveadm mailbox status -u <user> messages INBOXforce-resync で INBOX を再同期する
Maildir の実体が残っており、Dovecot の認識だけがおかしい場合は、doveadm force-resync でメールボックスの再同期を試します。
doveadm force-resync -u <user> INBOXDovecot の公式ドキュメントでも、Dovecot がメールボックスの問題を自動解決できない場合に force-resync が役立つことが説明されています。壊れたメールボックスを修復するための管理コマンドとして位置づけるとよいです。
force-resync の考え方
force-resync は、メール実体をもとに Dovecot 側の認識を再構築する操作です。単純にメールを復元する魔法のコマンドではなく、メールボックスのメタデータ不整合を修正する操作として理解します。
| 処理 | 意味 |
|---|---|
| メールボックスの再スキャン | Maildir の実体を Dovecot が再確認する |
| インデックスの再構築 | 壊れたメタデータやキャッシュを作り直す |
| UID / フラグの再評価 | IMAP クライアント側の再同期が発生する可能性がある |
キャッシュ破棄
↓
Maildir 実体の再スキャン
↓
Dovecot Index の再構築
↓
IMAP クライアント側の再同期注意点
この操作は比較的安全に見えますが、IMAP クライアント側への影響はあります。特に大量メール環境では、再同期や一覧再取得に時間がかかることがあります。
- IMAP クライアント側で再同期が発生する可能性がある
- UID や既読状態の扱いに影響が出る場合がある
- 大量メール環境では処理に時間がかかる
- Maildir 実体が消えている場合は、この手順では復旧できない
- 実行前に可能であれば Maildir をバックアップする
再発防止で見るところ
一度だけの不整合なら force-resync で復旧できることがあります。ただし、繰り返す場合は、インデックス破損の背景を確認する必要があります。
| 観点 | 確認内容 |
|---|---|
| ストレージ | ディスク障害、I/O エラー、容量不足がないか |
| 権限 | Maildir や Dovecot index の所有者・パーミッションが正しいか |
| 外部操作 | Dovecot 以外のプロセスが Maildir を直接変更していないか |
| バックアップ / 同期 | rsync やバックアップ処理が中途半端な状態を作っていないか |
| メール配送 | Postfix / LMTP / LDA から Dovecot への配送経路が正しいか |
まとめ
Dovecot で INBOX が空に見える場合でも、Maildir の cur/ や new/ にメール実体が残っていれば、データ欠損ではなくインデックス不整合の可能性があります。
その場合は、Maildir の実体を確認した上で doveadm force-resync -u <user> INBOX を実行し、Dovecot 側の認識を再構築します。重要なのは、メール実体とインデックスを分けて見て、復旧操作の影響範囲を理解してから実行することです。
書籍
Postfix詳解 MTAの理解とメールサーバの構築・運用
Postfix を中心にメールサーバーの構築と運用を確認したい場合の参考書籍です。Dovecot と組み合わせたメール基盤を理解する補助として使えます。価格や在庫はリンク先で確認してください。
Amazon で見るこのリンクは Amazon アソシエイトリンクです。
参考
- Dovecot CE – doveadm-force-resync
- Dovecot Documentation – Maildir Configuration
- Dovecot Documentation – Mail index file format





