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?

Alex Jolig
la source

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
Alex Jolig
la source
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*
Ian Ellis
la source
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
Bâtard
la source
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é.

isapir
la source