yum Erreur: l'ouverture de rpmdb a échoué


42

J'essaie de courir yum updateet je cours cette erreur:

rpmdb: PANIC: fatal region error detected; run recovery
error: db3 error(-30974) from dbenv->open: DB_RUNRECOVERY: Fatal error, run database recovery
error: cannot open Packages index using db3 - (-30974)
error: cannot open Packages database in /var/lib/rpm
CRITICAL:yum.main:

Error: rpmdb open failed

J'ai vérifié la page comme celle- ci, mais l'exécution yum clean allgénère la même erreur.

Comment puis-je résoudre ça?

Réponses:


84

Voici comment j'ai résolu mon problème.

C'est assez la situation en désordre. Vous pouvez résoudre ce problème en nettoyant la base de données rpm. Pour minimiser les risques, faites une sauvegarde des fichiers en /var/lib/rpm/utilisant la cpcommande:

mkdir /root/backups.rpm.mm_dd_yyyy/
cp -avr /var/lib/rpm/ /root/backups.rpm.mm_dd_yyyy/

Pour résoudre ce problème, essayez:

# rm -f /var/lib/rpm/__db*
# db_verify /var/lib/rpm/Packages
# rpm --rebuilddb
# yum clean all

Vérifiez que l'erreur a disparu avec la commande suivante yum

# yum update

Cette solution semble fonctionner avec dnf au lieu de yum également.
Unhammer

Après tout cela, il me reste "des transactions non terminées ..." et les packages endommagés qui ont créé le problème continuent de bloquer les installations futures. D'ailleurs, pourquoi l'utilisateur final aurait-il besoin de voir / faire tout cela? Si yum-db a un problème, il doit se nettoyer / se réparer automatiquement - avec au plus une invite ay / n à laquelle os-tinkerer pourrait vouloir se retirer. J'ai trouvé le correctif pour mon cas - fais ce qui précède, puis fais "yum-complete-transaction - clean-only"
JosephK

8
Pourquoi pas juste cd /var/lib/rpm; db_recover? Dans la plupart des cas, c'est beaucoup moins une option nucléaire.
Craig Ringer le

3
Je trouve que sudo rpm --rebuilddbseul résout mon cas. Néanmoins toujours sauvegarde /var/lib/rpmpour coffre-fort.
alick

Pour ceux qui voient toujours le message tué lors de l'installation, redémarrez simplement votre serveur. Oui, ça craint de recommencer pour que quelque chose de fondamental comme celui-ci fonctionne, mais c'était la seule chose qui a fonctionné pour moi.
Nirmal

0

Merci Alex, ta réponse a fonctionné pour moi, mis à part un léger changement que j'ai dû effectuer.

rm -f /var/lib/rpm/__db*

erreurs retournées

rm: cannot remove `/var/lib/rpm/__db.001': Is a directory
rm: cannot remove `/var/lib/rpm/__db.002': Is a directory
rm: cannot remove `/var/lib/rpm/__db.004': Is a directory

donc j'ai dû recurse avec

rm -rf /var/lib/rpm/__db*

2
Ceux-ci ne devraient pas être des répertoires. Si vous voyez cela, alors vous voudrez peut-être exécuter fscksur votre partition pour vous assurer que le fichier n'est pas corrompu.
doc what

0

J'ai essayé celui ci-dessus cela n'a pas fonctionné

ci-dessous fonctionne bien

# cd /var/lib
# tar -zcvf /var/preserve/rpmdb-$(date +%Y-%m-%d_%H-%M-%S).tar.gz rpm

Remarque: Cette sauvegarde tar peut être utilisée si la tentative de récupération de la base de données RPM pose des problèmes.

Vérifier l'intégrité du fichier Packages:

# cd /var/lib/rpm
# rm -f __db*      # to avoid stale locks
# /usr/lib/rpm/rpmdb_verify Packages

# mv Packages Packages.orig
# /usr/lib/rpm/rpmdb_dump Packages.orig | /usr/lib/rpm/rpmdb_load Packages


# rpm -vv --rebuilddb

Vérifiez à nouveau la base de données RPM:

# cd /var/lib/rpm
# /usr/lib/rpm/rpmdb_verify Packages

0

Tout ce que j'avais à faire était de supprimer les deux fichiers portant l'extension ".lock" et les trois fichiers commençant par "__db".

# rm /var/lib/rpm/.dbenv.lock
# rm /var/lib/rpm/.rpm.lock
# rm /var/lib/rpm/__db*

Après cela, a yum updatetravaillé.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.