Daniel Parthey wrote:
we get errors about corrupted indexes and we are losing flags with mdbox on NFSv4:
Error: Recent flags state corrupted for mailbox Error: Corrupted dbox file Error: Corrupted transaction log file
It looks like a LMTP director problem. The user has IMAP IDLE connections open and lmtp delivers to another host. This leads to nfs corruption problems.
Jun 8 03:36:03 10.129.3.200 dovecot: mailbox: mail: imap(someuser@example.de): Error: Corrupted transaction log file /mail/dovecot/example.de/someuser/mail/mailboxes/INBOX/dbox- Mails/dovecot.index.log seq 82: Invalid transaction log size (32856 vs 32824): /mail/dovecot/example.de/someuser/mail/mailboxes/INBOX/dbox-Mails/dovecot.index.log (sync_offset=32856) Jun 8 03:36:03 10.129.3.200 dovecot: mailbox: mail: imap(someuser@example.de): Error: Index /mail/dovecot/example.de/someuser/mail/mailboxes/INBOX/dbox-Mails/dovecot.index: Lost log for seq=82 offset=32856 Jun 8 03:36:03 10.129.3.200 dovecot: mailbox: mail: imap(someuser@example.de): Warning: fscking index file /mail/dovecot/example.de/someuser/mail/mailboxes/INBOX/dbox-Mails/dovecot.index Jun 8 03:36:03 10.129.3.200 dovecot: mailbox: mail: imap(someuser@example.de): Error: Fixed index file /mail/dovecot/example.de/someuser/mail/mailboxes/INBOX/dbox-Mails/dovecot.index: log_file_seq 82 -> 83 Jun 8 03:36:38 10.129.3.200 dovecot: mailbox: mail: imap(someuser@example.de): Error: Transaction log file /mail/dovecot/example.de/someuser/mail/mailboxes/INBOX/dbox-Mails/dovecot.index.log.2: marked corrupted
How to enable the LMTP director to deliver to the correct mailbox host?
The reason were different usernames for different protocols (lmtp and imap) of the same user, which resulted in different target hosts in the director:
LMTP director was using username@example.org -> Host mail01 IMAP director was using username@dovecotmail.example.org -> Host mail04
# 2.0.20: /etc/dovecot-director/dovecot-director.conf passdb { args = proxy=y nopassword=y user=%n@dovecotmail.%d driver = static }
Removing the user mapping in the static imap passdb solved the problem:
passdb { args = proxy=y nopassword=y driver = static }
Now the user is directed to the same host for all protocols again.
Regards, Daniel