≡ Menu

Rebuilding corrupted RPM database

One of our client reported that he is getting an error and RPM database is corrupted. He is using Red Hat Linux

Sometime it is possible to fix RPM database errors. I am surprised that many admins do not make back up of RPM DB (/var/lib/rpm).

Anyways if you ever messed up with RPM database, here is a quick guide to fix it (you must have rpmdb tools installed):

Take system to single user mode to avoid further damage and to make backup/restore process easy:

# init 1

Method # 1

Remove /var/lib/rpm/__db* files to avoid stale locks:
# cd /var/lib
# rm __db*

Rebuild RPM database:
# rpm --rebuilddb
# rpmdb_verify Packages

Method # 2

If you are still getting errors, then try your luck with following commands:

# mv Packages Packages-BAKUP
# db_dump Packages-BAKUP | db_load Packages
# rpm -qa
# rpm --rebuilddb

Further reading

Share this on:
{ 16 comments… add one }
  • Paul Blonde December 5, 2006, 11:25 pm

    Method 2 does not work, as the db_load and db_dump commands were not found. Needless to say if what came before worked I wouldn’t have gotten to 2.

  • nixCraft December 5, 2006, 11:35 pm

    whereis db_dump db_load
    db_dump: /usr/bin/db_dump
    db_load: /usr/bin/db_load

    These utilities get installed by default using db4-utils package. Above instructions are tested on Fedora Core and RHEL 4 only.

  • Tapas Mallick August 18, 2008, 1:18 pm

    How to recreate /var/lib/rpm/Packages (If original got deleted/corrupted) ?

  • James Cassell October 10, 2008, 5:46 pm

    Thank You! you saved my day.

  • James Cassell October 10, 2008, 5:46 pm

    Thank You! you saved my day

  • Tapas Mallick October 13, 2008, 7:55 am

    I found the same post/solution before in nixcraft and it is really a great solution but my question is how to recreate /var/lib/Packages if the original got “DELETED”.

  • com4host.com September 18, 2009, 5:43 pm

    Thank You! you saved my day.

  • michael November 8, 2009, 3:09 pm

    first command is cd /var/lib/rpm and not /var/lib

  • Anonymous May 17, 2010, 6:14 pm

    cd /var/lib/rpm

    not #cd /var/lib/

  • mhelix October 18, 2012, 2:59 pm

    nixcraft to the rescue!

    • Lyubo March 7, 2014, 6:48 am

      For me it worked this one :
      rpm -e –justdb

  • Lubos August 27, 2014, 7:12 am

    Hallo and thanks for howto.
    But you have small syntactic error at method1.
    cd /var/lib/rmp instead of cd /var/lib

  • Aleksey Tsalolikhin August 12, 2015, 4:17 pm

    Thanks for a great site. It’s a fantastic resource for the sysadmin community.
    The code in Method 1 should be “cd /var/lib/rpm” rather than “cd /var/lib”. Please fix? :)

  • Mimmus January 14, 2016, 3:50 pm

    Thank you.
    You solved an infinite loop of RPMs dependencies.

    Please fix typo errors as suggested

  • krish June 3, 2016, 2:18 pm

    remove that init 1 command from above, it will take the remote machine off network .. and someone from DC or physically reboot the server.

  • raj November 28, 2016, 5:45 am


Security: Are you a robot or human?

Leave a Comment