Warum die RPM-Datenbank beschädigt wird
Es kann mehrere Gründe geben, die zu einer Beschädigung der RPM-Datenbank führen können. Aufgrund der Einschränkungen kann man dafür keinen einzelnen RCA genau bestimmen, es gibt keinen Mechanismus zur Überwachung der Beschädigung der RPM-Datenbank.
– Die RPM-Datenbank wird jedes Mal abgefragt, wenn ein Administrator/irgendein Prozess einen RPM-Befehl ausführt.
– Selbst während Yum-Transaktionen wird die RPM-Datenbank stark verändert.
– Ein kleiner Zeiger kann ebenfalls eine solche Beschädigung verursachen.
– Wenn LD_LIBRARY_PATH auf einen bestimmten Wert gesetzt ist, wird sogar die RPM-Datenbank beschädigt.
– Wenn ein Drittanbieterpaket installiert wird, das unnötige Änderungen in der RPM-Datenbank verursacht.
– Unvollständige Transaktionen können ebenfalls zu solchen Beschädigungen führen.
– Im Falle einer /var-Partition, die sich auf SAN-Volumes befindet.
Insgesamt können also viele Faktoren für eine solche Beschädigung der RPM-Datenbank in Betracht gezogen werden. Wenn die RPM-Datenbank häufig beschädigt wird, wird empfohlen, regelmäßig eine Sicherungskopie der RPM-Datenbank über cron zu erstellen.
Reparieren Sie die RPM-Datenbank
Das RPM-Tool verwendet seine eigene benutzerdefinierte Datenbankimplementierung, um seine Informationen aufzunehmen. Manchmal kann diese Datenbank beschädigt werden; Zu den Symptomen gehören Behauptungen, dass ein installiertes RPM-Paket fehlt; oder Versuche, ein RPM zu aktualisieren, hängen einfach. Versuche, einige Pakete abzufragen (rpm -q), können mit dem folgenden Fehler fehlschlagen.
rpmdb: /var/lib/rpm/Packages: unexpected file type or format error: cannot open Packages index using db3 - Invalid argument (22)
Wenn Ihre RPM-Datenbank hängt oder beschädigt ist, können Sie versuchen, sie mit diesen Befehlen zu reparieren. Bitte beachten Sie:Es kann nicht garantiert werden, dass dieser Vorgang funktioniert. Für diese Schritte müssen Sie mit Superuser-Rechten (auch bekannt als „root“) angemeldet sein. Die Befehle können kopiert und direkt in ein Root-Terminalfenster eingefügt werden.
1. Stellen Sie sicher, dass auf Ihrem System keine RPM-Prozesse mehr ausgeführt werden. Verwenden Sie den Befehl ps, um sie zu identifizieren. Verwenden Sie den Kill-Befehl, um alle „rpm“-Prozesse zu beenden, die Sie finden; ein „kill -9“ kann notwendig sein.
# ps -ef | grep-i rpm
2. Löschen Sie die von RPM verwendeten Sperrdateien:
# rm -f /var/lib/rpm/__db*
# /usr/lib/rpm/rpmdb_verify /var/lib/rpm/Packages
3. Wenn Sie einen hängenden „rpm“-Befehl erlebt haben, versuchen Sie es erneut. Wenn es funktioniert, sind Sie fertig. Wenn nicht, führen Sie die Schritte 1 und 2 erneut aus. Fahren Sie dann mit dem nächsten Schritt fort.
4. Erstellen Sie eine Sicherungskopie Ihrer RPM-Datenbank:
# cd /var/lib # mkdir rpm-backup # rsync -av ./rpm/. ./rpm-backup/.
5. Erstellen Sie Ihre RPM-Datenbank neu:
# rpm -vv --rebuilddb > /tmp/rpmrebuilddb.log 2>&1
6. Versuchen Sie erneut, die RPM-Datenbank zu überprüfen.
# cd /var/lib/rpm # /usr/lib/rpm/rpmdb_verify PackagesHinweis :Wenn die oben genannten Wiederherstellungsschritte fehlschlagen oder Fehler auslösen, ist die Wiederherstellung des Verzeichnisses /var/lib/rpm aus einer aktuellen Systemsicherung möglicherweise die beste Option. Denken Sie daran, die Tar-Sicherung nicht zu überschreiben, da sie immer noch wertvoll sein kann.
6. Wiederholen Sie Ihren fehlgeschlagenen RPM-Befehl.
RPM-Befehlsbeispiele zum Abfragen, Installieren, Entfernen und Aktualisieren von Paketen