yum Error: rpmdb abierto fallido

42

Estoy intentando ejecutar yum updatey estoy ejecutando este error:

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

Revisé una página como esta, pero la ejecución yum clean allejecuta el mismo error.

¿Como puedo resolver esto?

Alex Jolig
fuente

Respuestas:

84

Así es como solucioné mi problema.

Esta es una situación bastante desordenada. Puede solucionar esto limpiando la base de datos rpm. Para minimizar el riesgo, haga una copia de seguridad de los archivos /var/lib/rpm/usando el cpcomando:

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

Para solucionar este problema, intente:

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

Verifique que el error haya desaparecido con el siguiente comando yum

# yum update
Alex Jolig
fuente
Esta solución parece funcionar con dnf en lugar de yum también.
Martillo
Recibo "transacciones pendientes sin terminar ..." después de hacer todo esto, y los paquetes rotos que crearon el problema continúan bloqueando cualquier instalación futura. Para el caso, ¿por qué el usuario final necesitaría ver / hacer algo de esto? Si el yum-db tiene un problema, debería limpiarse / arreglarse automáticamente, a lo sumo, con un indicador ay / n del cual un os-tinkerer podría optar por no participar. Encontré la solución para mi caso - haz lo anterior, luego haz "yum-complete-transaction --cleanup-only"
JosephK
8
¿Por qué no solo cd /var/lib/rpm; db_recover? En la mayoría de los casos, eso es mucho menos una opción nuclear.
Craig Ringer
3
Me parece que sudo rpm --rebuilddbresuelve mi caso. Sin embargo, siempre haga copias /var/lib/rpmde seguridad de forma segura
alick
Para aquellos que todavía ven el mensaje muerto en la instalación de yum, simplemente reinicie su servidor. Sí, apesta reiniciar para que algo básico como este funcione, pero eso fue lo único que funcionó para mí.
Nirmal
0

Gracias Alex, tu respuesta funcionó para mí, aparte de un pequeño cambio que tuve que hacer.

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

errores devueltos

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

así que tuve que recurrir con

rm -rf /var/lib/rpm/__db*
Ian Ellis
fuente
2
Esos no deberían ser directorios. Si ve eso, es posible que desee ejecutar fscken su partición para asegurarse de que no tiene corrupción de archivos.
docwhat
0

Probé el anterior, no funcionó

a continuación funciona bien

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

Nota: Esta copia de seguridad de tar puede usarse si el intento de recuperar la base de datos RPM tiene problemas.

Verifique la integridad del archivo de paquetes:

# 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

Una vez más verifique la base de datos RPM:

# cd /var/lib/rpm
# /usr/lib/rpm/rpmdb_verify Packages
Mestizo
fuente
0

Todo lo que tenía que hacer era eliminar los dos archivos con la extensión ".lock" y los tres archivos que comenzaban con "__db".

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

Después de eso, yum updatefuncionó.

isapir
fuente