Defekte RPM-Datenbank reparieren

Heute gibt’s mal eine Problemlösung aus der Linux-Welt. Nehmen wir mal an, ihr habt einen SUSE Linux Enterprise Server und nutzt dort das Paketverwaltungswerkzeug zypper. Eurem Server widerfährt eine Widrigkeit wie ein Stromausfall, während gerade auf die Platte geschrieben wurde oder der extern angebundene Storage bricht weg. Erste Maßnahme natürlich: ein fsck über sämtliche Dateisysteme. Aber ihr habt Pech, denn der Dateisystemschaden war derart massiv, dass nach der Reparatur manche Daten trotzdem beschädigt bleiben. Nach dem versuchten Update oder der Installation eines neuen Pakets mittels zypper bekommt ihr nur folgende Fehlermeldung zu sehen:

rpmdb: PANIC: fatal region error detected; run recovery
error: db4 error(-30977) from dbenv->close: DB_RUNRECOVERY: Fatal error, run database recovery

Glücklicherweise gibt es einen Weg, die RPM-Datenbank zu reparieren, und der geht so:

Anlegen eines Backup-Verzeichnisses und Kopieren der beschädigten RPM-Datenbank:
mkdir /root/rpmdb_backup
cp -avr /var/lib/rpm /root/rpmdb_backup

Löschen der defekten Datenbank-Dateien:
rm -f /var/lib/rpm/__db*
Reparieren/Neuerstellung der Datenbank:
db_verify /var/lib/rpm/Packages
rpm --rebuilddb

Leeren des zypper-Caches:
zypper clean

Nun sollten sich wieder Softwarepakete installieren lassen.

(via nixCraft)