Warum wird yum index beschädigt?

10

Gelegentlich wird der Cache von yum beschädigt und es werden folgende Fehler angezeigt:

error: db3 error(-30974) from dbenv->failchk: DB_RUNRECOVERY: Fatal error, run database recovery
error: cannot open Packages index using db3 -  (-30974)
error: cannot open Packages database in /var/lib/rpm

Die Problemumgehung ist rm -f /var/lib/rpm/__db*und dann generiert der nächste "yum" -Befehl die Daten neu.

Meine Frage ist: Was wird dies wahrscheinlich verursachen? Gibt es eine häufige Aufgabe, die Sperren ignoriert, oder gibt es ein anderes Problem, das dies verursacht?

Wir haben Hunderte von CentOS-Maschinen und es gibt kein Muster, nach dem dieses Problem auftritt. Es könnte sich um ein "Eins-zu-eine-Million" -Problem handeln, das im großen Maßstab häufig auftritt.

HINWEIS: Mir ist klar, dass dies eine sehr "offene" Frage ist. Wenn jedoch eine Antwort die Ursache findet, gehe ich zurück und verwandle die Frage in etwas Kanonischeres, das sich direkt auf das spezifische Problem bezieht.

TomOnTime
quelle
Ich scheine mich zu erinnern, dass es vor Jahren einige Fehler gab, die dies verursacht haben. Sind die Maschinen auf dem neuesten Stand?
Michael Hampton
Hunderte von CentOS-Maschinen? Ist das für Stackexchange? Ich dachte nicht, dass sie so viele Linux-Systeme haben.
Zoredache
@ Zoredache die meisten sind virtuell. Viele sind nicht in der direkten Linie, Anfragen zu bedienen, aber viele sind es.
TomOnTime

Antworten:

6

Im allgemeinen Fall geschieht dies, wenn rpm (oder yum) beim Aktualisieren der rpmdb, einem Berkeley DB-Schlüsselwertspeicher, abstürzt und sehr empfindlich ist. Wenn ein solcher Absturz auftritt, bleibt die rpmdb in einem inkonsistenten Zustand und dieser Fehler tritt auf. Alle anderen Dateien /var/lib/rpmenthalten dieselben Informationen, jedoch in einem weniger effizienten Format, sodass die Datenbank problemlos wiederhergestellt werden kann.

Zwei bemerkenswerte Fehler, die Sie möglicherweise auf älteren CentOS-Systemen gesehen haben, können dies verursachen. Das große Problem, ein "böses und subtiles Rennen beim gemeinsamen Zurückschreiben von mmap'ed-Seiten", wie es im Änderungsprotokoll erscheint, wurde 2007 in einem Kernel-Update stillschweigend behoben . Dieser präsentierte sich jedoch etwas anders als Ihr Bericht.

Die, die Sie möglicherweise aus dem Jahr 2009 sehen, ist passiert, als PackageKit Yum zu einem ungünstigen Zeitpunkt tötete, und wurde ebenfalls behoben . Dies wirkt sich jedoch eher auf Desktop-Systeme oder Server mit einer grafischen Benutzeroberfläche aus.

Alle diese Fehler sind älter als EL 6, und Sie sollten dies fast nie bei EL 6 oder 7 sehen, noch sollten Sie es sehen, wenn Ihre EL 5-Systeme auf dem neuesten Stand sind. (Ich habe keine Ahnung von EL 4. Wenn Sie eine haben, töten Sie sie, bevor sie sich ausbreitet.) Das heißt, alles , was dazu führt , dass yum oder rpm während der Arbeit mit der rpmdb sterben, kann sie verursachen. Dazu gehört, was Sie heutzutage am wahrscheinlichsten sehen, zufällige kosmische Strahlen, die Teile umdrehen, oder jemand, mit dem Sie übereifrig werden kill -9.

In RHEL 7 fängt yum während des eigentlichen Transaktionslaufs mehr Signale ab, und die Meldung wird angezeigt (shutdown inhibited). Dies sollte helfen, die meisten Situationen zu verhindern, in denen jemand oder etwas die Transaktion unterbricht und dieses Problem verursacht.

Michael Hampton
quelle
2
Meine Wette ist, dass das Problem die übereifrige Verwendung von "kill -9" ist. Vielen Dank!
TomOnTime