Perché l'indice yum viene danneggiato?


10

Occasionalmente la cache di yum viene danneggiata e vediamo errori come questo:

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

La soluzione è rm -f /var/lib/rpm/__db*quindi il comando "yum" successivo rigenera i dati.

La mia domanda è: che cosa potrebbe causare questo? C'è qualche attività comune che ignora i blocchi o ha altri problemi che lo causano?

Abbiamo centinaia di macchine CentOS e non esiste un modello per vedere questo problema. Potrebbe essere un problema "uno su un milione", che viene visto spesso su larga scala.

NOTA: mi rendo conto che questa è una domanda molto "aperta", ma se una risposta trova la causa, tornerò indietro e trasformerò la domanda in qualcosa di più canonico che si collega direttamente al problema specifico.


Mi sembra di ricordare che anni fa c'erano alcuni bug che causavano questo. Le macchine sono aggiornate?
Michael Hampton,

Centinaia di macchine CentOS? Questo è per Stackexchange? Non pensavo che avessero così tanti sistemi Linux.
Zoredache,

La maggior parte di @Zoredache è virtuale. Molti non sono nella linea diretta di servire le richieste, ma molti lo sono.
TomOnTime

Risposte:


6

In generale, ciò accade quando rpm (o yum) si arresta in modo anomalo durante l'aggiornamento di rpmdb, che è un archivio di valori-chiave Berkeley DB e molto sensibile. Quando si verifica un tale arresto, rpmdb viene lasciato in uno stato incoerente e si verifica questo errore. Tutti gli altri file /var/lib/rpmcontengono le stesse informazioni, anche se in un formato meno efficiente, quindi il database può essere facilmente ricostruito.

Due notevoli bug che potresti aver visto sui vecchi sistemi CentOS possono causare questo. La più grande , una "razza cattiva e sottile nel writeback della pagina condivisa da mmap" come appare nel log delle modifiche, è stata tranquillamente risolta in un aggiornamento del kernel nel 2007 . Tuttavia, questo si è presentato in modo leggermente diverso rispetto al rapporto.

L' uno si potrebbe vedere a partire dal 2009 è accaduto quando PackageKit avrebbe ucciso yum in un momento inopportuno, ed è stato anche fissato . Tuttavia, ciò avrebbe maggiori probabilità di incidere sui sistemi desktop o sui server con una GUI.

Tutti questi bug sono precedenti a EL 6 e non dovresti quasi mai vederlo accadere su EL 6 o 7, né dovresti vederlo se i tuoi sistemi EL 5 sono aggiornati. (Non ho idea di EL 4. Se ne hai uno, uccidilo prima che si diffonda.) Detto questo, tutto ciò che causa la morte di yum o rpm mentre si lavora con rpmdb potrebbe causarlo. Ciò include ciò che molto probabilmente vedrai in questi giorni, i raggi cosmici casuali che lanciano bit o qualcuno che diventa troppo zelante kill -9.

In RHEL 7, yum intrappola più segnali durante l'esecuzione effettiva della transazione e vedrai il messaggio (shutdown inhibited). Ciò dovrebbe aiutare a prevenire la maggior parte delle situazioni in cui qualcuno o qualcosa interrompe la transazione e causa questo problema.


2
La mia scommessa è che il problema è l'uso eccessivo di "kill -9". Grazie!
TomOnTime
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.