Files
website/content/posts/dovecot-index-cache-issues.md
T
demian cc7ba433d4
Build & Deploy / deploy (push) Successful in 32s
Translate all posts to German with personal blog style
2026-06-06 19:25:28 +02:00

3.9 KiB
Raw Blame History

+++ date = '2025-05-18T11:34:09+02:00' draft = false title = 'Wenn der Dovecot-Index durchknallt'

[cover] image = "/imgs/dove.jpg" alt = "Tauben auf nem Dach" caption = "Die Tauben auf dem Bild haben übrigens nix mit Dovecot zu tun. Fand ich nur passend."

+++

Wenn dovecot.index.cache dich in den Wahnsinn treibt

Letztens hab ich ein altes Mail-System in sein neues Zuhause umgezogen. Nach der Migration check ich die Logs und seh Warnungen wie diese:

May 17 11:23:13 server1 dovecot: dsync-local(user@domain.tld)<cRjZCwGnKWiIvicA2dm5Tw>: Error: Mailbox INBOX: mmap(size=511310568) failed with file /var/vmail/domain.tld/user/Maildir/dovecot.index.cache: Cannot allocate memory

Übersetzung: Die dovecot.index.cache-Datei ist so fett, dass Dovecot nicht genug Speicher hat, um sie zu verarbeiten. Ja, 500 MB für 'ne Index-Datei. Das ist kein Index mehr, das ist ein Roman.

Was Sind dovecot.index.cache-Dateien Überhaupt?

Dovecot, der beliebteste IMAP-Server auf diesem Planeten, benutzt Index-Dateien (dovecot.index, dovecot.index.cache, dovecot.index.log, etc.), um den Zugriff auf Postfächer zu beschleunigen. Die Datei, die mir Kopfschmerzen bereitet hat, speichert gecachte Nachrichten-Metadaten (Header, Flags, Vorschautext). So muss Dovecot nicht jedes Mal alle Mails durchforsten, wenn du dein Postfach öffnest.

Mit der Zeit kann die dovecot.index.cache allerdings fett werden oder aus der Spur laufen. Hier ein paar Gründe:

Im Normalbetrieb

  • Gelöschte oder verschobene Mails hinterlassen verwaiste Metadaten.
  • Korrupte Einträge sammeln sich an, wenn mal ein Prozess abstürzt.
  • Datenmüll kann jahrelang rumgammeln, wenn niemand aufräumt.

Nach ner Migration

Migrationen sind besonders fies, weil:

  • Datei-Timestamps und UIDs ändern sich: Dovecots Cache basiert auf Annahmen über den Zustand der Nachrichten. Eine Migration (z.B. via rsync oder imapsync) kann diese Annahmen über den Haufen werfen.
  • Index-Format/Version-Konflikte: Wenn du zwischen den Servern verschiedene Dovecot-Versionen hast, kann das Format von .index.cache inkompatibel sein.
  • Partielle Cache-Neubauten: Dovecot versucht, alte Cache-Dateien weiterzuverwenden, die nicht mehr zum aktuellen Inhalt des Postfachs passen. Chaos pur.

Wie Werd Ich Die Dinger Los?

Nach der Migration hatte ich einige dieser Meldungen im Log. Also musste ich alle betroffenen User finden und handeln. Diese riesigen Dateien fressen nicht nur Plattenplatz, sondern killen auch die Performance und verursachen dsync-Probleme.

Kann Ich Die Einfach Löschen?

Kurze Antwort: Ja du kannst alle dovecot.index*-Dateien im Maildir eines Benutzers löschen.

Dovecot baut die Indizes bei Bedarf automatisch neu auf. Klar, beim ersten Login nach dem Löschen gibt's kurz nen kleinen Lag, aber danach läuft alles wieder geschmeidig.

Wie Finde Ich Die Schwergewichte?

Erstmal checken, was bei dir als "groß" gilt. Ich hab mich auf Dateien über 100 MB konzentriert:

find /var/vmail -type f -name "dovecot.index.cache" -size +100M -exec ls -lh {} \;

Nachdem ich die Kandidaten identifiziert hatte, bin ich ins Maildir des Users und hab die Dinger plattgemacht:

cd /var/vmail/domain.tld/affecteduser/Maildir/
rm dovecot.index*

Gibt's Auch Ne Sanftere Methode?

Klar. Du könntest auch das virtuelle Speicherlimit für Dovecot erhöhen (default_vsz_limit). Oder die Einstellungen mail_cache_fields und mail_never_cache_fields anpassen, damit der Cache gar nicht erst so fett wird.

Ich hab mich fürs Löschen entschieden, weil die Dateien schon vor der Migration so monströs waren. Nach der Neugenerierung sind die Dinger deutlich kleiner. Mal sehen, ob das Thema wiederkommt.

Fazit

Wenn du diese Warnungen in deinen Logs siehst: Check die dovecot.index.cache-Dateien und werd sie los. Aufräumen ist sicher und einfach Dovecot kümmert sich um den Rest. Und denk dran: Ein gut gepflegter Cache ist ein glücklicher Cache.