58

I'm trying to run yum update and I'm running this 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

I checked page like this one but running yum clean all runs the same error.

How can I solve this?

4 Answers 4

127

This is how I fixed my problem.

You may fix this by cleaning out rpm database. But first, in order to minimize the risk, make sure you create a backup of files in /var/lib/rpm/ using cp command:

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

The try this to fix this problem:

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

And finally verify that error has gone with the following yum command

# yum update
7
  • 1
    This solution seems to work with dnf instead of yum as well.
    – unhammer
    Jan 18, 2016 at 14:30
  • I get "unfinished transactions remaining.." after doing all this, and the broken packages that created the problem continues to block any future installations. For that matter, why would the end-user need to see/do any of this? If the yum-db has an issue, it should clean/fix itself automatically - with at most a y/n prompt which an os-tinkerer might want to opt out of. Found the fix for my case - do the above, then do "yum-complete-transaction --cleanup-only"
    – JosephK
    Mar 13, 2016 at 10:05
  • 11
    Why not just cd /var/lib/rpm; db_recover ? In most cases that's much less of a nuclear option. Feb 24, 2017 at 8:06
  • 6
    I find sudo rpm --rebuilddb alone solves my case. Nevertheless always backup /var/lib/rpm for safe.
    – alick
    Jun 12, 2017 at 21:44
  • For those who still see the killed message on yum install, just restart your server. Yes, it sucks to restart to get something basic like this working, but that was the only thing that worked for me.
    – Nirmal
    Nov 15, 2017 at 6:44
0

Thanks Alex, your answer worked for me apart from one slight change I had to make.

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

returned errors

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

so I had to recurse with

rm -rf /var/lib/rpm/__db*
1
  • 3
    Those should not be directories. If you see that, then you may want to run fsck on your partition to ensure you don't have file corruption.
    – docwhat
    Jul 15, 2016 at 15:28
0

I tried the above one it did'nt work

below works fine

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

Note: This tar backup can be used if the attempt to recover the RPM database has issues.

Verify integrity of the Packages file:

# 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

Once again verify RPM database:

# cd /var/lib/rpm
# /usr/lib/rpm/rpmdb_verify Packages
2
  • On running sudo /usr/lib/rpm/rpmdb_dump Packages.orig | /usr/lib/rpm/rpmdb_load Packages I get the following error: rpmdb_load: DB->open: Packages: Permission denied
    – Arpit
    Jul 22, 2021 at 10:27
  • It would be better if you raise a Question for this. Also mentioen which user are you trying to connect?
    – AReddy
    Jul 24, 2021 at 6:56
0

All I had to do was to delete the two file with the ".lock" extension, and the three files that started with "__db".

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

After that, yum update worked.

Not the answer you're looking for? Browse other questions tagged or ask your own question.