手当たり次第に書くんだ

飽きっぽいのは本能

Dovecot で INBOX が空に見える時の復旧手順 – Maildir と Index の再同期

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-uidlistIMAP 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 listdoveadm mailbox status が役に立ちます。

doveadm mailbox list -u <user>
doveadm mailbox status -u <user> messages INBOX

force-resync で INBOX を再同期する

Maildir の実体が残っており、Dovecot の認識だけがおかしい場合は、doveadm force-resync でメールボックスの再同期を試します。

doveadm force-resync -u <user> INBOX

Dovecot の公式ドキュメントでも、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 で INBOX が空に見える時の復旧手順 – Maildir と Index の再同期

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る