Linux
Cyrus/Postfix DBERROR db4: operation not permitted
Nach einem Harddisk Crash bei unserem SUSE Open-Exchange Server wollten wir die bestehenden Mails auf ein neu aufgesetztes System überführen und damit fingen die Probleme an. Ich habe hier mal alles zusammengefasst, vielleicht ist es ja irgendwem mal eine Hilfe. Vom gecrashten System haben wir nur die wichtigsten Verzeichnisse übernommen:
- /etc/
- /var/
- /home/
Zum Glück gabs Backups und wir konnten noch auf Teile der aktuellen Mails zugreifen, aber mit folgenden Problemen hatten wir zu kämpfen:
Der Dämon fetchd hat alle Mails abgeholt, aber nur in /var/spool/active/ abgelegt und nicht in die einzelnen IMAP-Boxen der User verteilt.
Im Log stand dazu nur:
sox tls_prune[....]: DBERROR db4: operation not permitted during recovery. sox tls_prune[....]: DBERROR: opening /var/lib/imap/tls_sessions.db: Invalid argument sox tls_prune[....]: DBERROR: opening /var/lib/imap/tls_sessions.db: cyrusdb error sox postfix/local[....]: warning: premature end-of-input from private/lmtp socket while reading input attribute name sox postfix/local[....]: warning: private/lmtp socket: malformed response
So ich konnte im ersten Moment nicht viel mit diesen Meldungen anfangen. Auch vom SUSE-Support kam nicht wirklich eine brauchbare Hilfe.
In unserem Fall hab ich dann mit dem neu erstellen der Datenbanken/Indexfiles eine Lösung gefunden. Dazu habe ich als root zuerst die Daemons postfix und cyrus beendet und dann noch schnell ein Backup von allen DBs im /var/lib/imap-Verzeichnis erstellt (Ja sowas ist immer beruhigend).
rccyrus stop rcpostfix stop cd /var/lib/imap/ mkdir backup.20050914 cp -p *.db backup.20050914/ cp -pR db backup.20050914/ cp -pR deliverdb backup.20050914/ cp -pR /var/spool/imap/user backup.20050914/
So die Backups waren vorhanden, jetzt kann es losgehen. Als User cyrus mussten nun die Datenbanken neu erstellt werden. Ein reconstruct -m hat nicht funktioniert, darum der Umweg über mailboxes.txt.
su cyrus /usr/lib/cyrus/bin/ctl_mboxlist -d > mailboxes.txt cat mailboxes.txt | /usr/lib/cyrus/bin/ctl_mboxlist -u /usr/lib/cyrus/bin/reconstruct -r -f user exit
Damit waren alle Mailbox-Indexfiles neu erstellt. Aber das alleine hat noch nicht gereicht. Noch immer gab es Probleme und die selben Fehler im Log. Nach dem ich gehört habe, dass die Dateien tls_sessions.db, deliver.db und db/* bzw. deliver/* nur temporäre Files waren, hab ich sie einfach alle gelöscht und dann die Daemons neu gestartet.
rm deliver.db rm tls_sessions.db rm db/* rm deliver/* rcpostfix start rccyrus start
So ab jetzt hatte der Server wirklich zu tun, er mußte alle bereits gefetchten Mails aus dem /var/spool/postfix/active/ Verzeichnis in die IMAP-Boxen verteilen. Nachdem das geschehen war, war ich sehr erleichtert. Der Server wurde wieder ans Netz genommen und rennt seitdem wieder ohne Probleme.
Ich übernehme natürlich keine Garantie für diese Tipps, nur für meine Zwecke war das der richtige Lösungsweg. Nur so als Zusatzhinweis: Hier wurde mit SUSE Open Exchange Server 4.0 und 4.1 gearbeitet.
Hier noch zwei Links über die ich mich zu einer Lösung des Problems herangetastet habe. Natürlich waren unzählige Besuche auf anderen Seite, Foren und Google Suchen notwendig, aber mit diesen zwei Infos bin ich am weitesten gekommen.
Cyrus IMAP Mailbox Recovery
Dieser Link hat mir wohl am meisten weitergeholfen. In englisch, Abgerufen am 14.09.2005 um 20:00.
Newsgroup archive.info-cyrus
Über diesen Ideenaustausch bin ich überhaupt mal auf die richtige Spur gekommen. In Englisch, abgerufen am 14.09.2005 um 19:45.
Um einen Diskussionsbeitrag zu posten müssen Sie eingeloggt sein.