[Unix] dovecot がおかしくなったら

dovecot がおかしい

IMAP サーバに dovecot を使っている.

しばらく幸せに使っていたのだが,ちょっと前から時々 INBOX の select に失敗するようになってしまった.失敗したり成功したり再現の条件がわからないので始末が悪い.Thunderbird で読めなくても Wanderlust なら読めたり,その逆だったり.両方とも読めなくなったり.

原因

MUA を立ち上げなおせば読めたりしたので深く追求していなかったのだが,最近いい塩梅に締切がいろいろ迫ってきたので現実逃避がてらに調べてみた.どうやら,おかしくなるときは syslog (mail.err) に以下のログを吐いているようだ.

Apr 28 hh:mm:ss HOSTNAME imap(xx): file imap-bodystructure.c: line 278 (part_parse_headers): assertion failed: (part->physical_pos >= input->v_offset - start_offset)
Apr 28 hh:mm:ss HOSTNAME dovecot: child 24731 (imap) killed with signal 6

エラーメッセージでぐぐってみると,どうやら index が壊れているとそうなるらしい.

対処

index が壊れるというのも困ったものだが,幸い dovecot はここらへんの補助ファイル群は「消しておけば勝手に再生成する」という後腐れのない特長を持っている.というわけで,~/Maildir/.INBOX/.imap.index.* を rm して MUA を起動して解決.

本質的には index を壊すバグを除く必要があるが,とりあえずもう一度困ることがあったら考えよう.