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

77 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
+++
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:
```bash
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:
```bash
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.