[CentOS] Recover rpm DB corrupted by disk failure?

Mon Feb 23 17:10:44 UTC 2009
Akemi Yagi <amyagi at gmail.com>

On Mon, Feb 23, 2009 at 8:59 AM, Bill Campbell <centos at celestial.com> wrote:
> On Mon, Feb 23, 2009, Bart Schaefer wrote:
>>Over the weekend my workstation (still on CentOS 3) started showing
>>SMART errors, so we shut it down and moved everything onto a new
>>drive.  On reboot, the RPM database reports as corrupted and "rpm
>>--rebuilddb" segmentation faults.
>>
>>Is there any reasonable way to recover from this, short of a complete
>>reinstall?  The machine is otherwise up though it's quite likely some
>>files have been lost.
>
> You may be able to get things going again with the bdb recover
> script, /usr/lib/rpm/rpmdb_recover.  I think this should be a
> berkeley DB recovery routine that is specific to the version
> being used by rpm.  I have recovered the OpenPKG rpm database
> using this technique using the standard bdb db_recover program.
>
> If I am not mistaken, the appropriate command would be:
>
> /usr/lib/rpm/rpmdb_recover -h /var/lib/rpm

You can first verity the database by:

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

If the recover command does not work, then try something like:

Check the contents of /var/log/rpmpkgs (and .1 .2 etc).
Get all packages listed there into a single directory.
cd to that directory and issue the command:

rpm -ivh --noscripts --notriggers --justdb *.rpm

to restore your /var/lib/rpm/Packages file

Akemi