Rebuilding corrupted rpm database in RHEL7
Situation:Although everything is done to ensure that your RPM databases are intact, your RPM database may become corrupt and unuseable. This happens mainly if the filesystem on which the rpm db resides is suddenly inaccessible (full, read-only, reboot, or so on).
Solution:
1.Start by creating a backup of your corrupt rpm db, as follows:
[root@nsk ~]# tar zcvf rpm-db.tar.gz /var/lib/rpm/*
tar: Removing leading `/' from member names
/var/lib/rpm/Basenames
/var/lib/rpm/Conflictname
/var/lib/rpm/__db.001
/var/lib/rpm/__db.002
/var/lib/rpm/__db.003
/var/lib/rpm/Dirnames
/var/lib/rpm/Group
/var/lib/rpm/Installtid
/var/lib/rpm/Name
/var/lib/rpm/Obsoletename
/var/lib/rpm/Packages
/var/lib/rpm/Providename
/var/lib/rpm/Requirename
/var/lib/rpm/Sha1header
/var/lib/rpm/Sigmd5
/var/lib/rpm/Triggername
2.Remove stale lock files if they exist through the following command:
[root@nsk ~]# rm -f /var/lib/rpm/__db*
3.Now, verify the integrity of the Packages database via the following:
[root@nsk ~]# /usr/lib/rpm/rpmdb_verify /var/lib/rpm/Packages; echo $?
BDB5105 Verification of /var/lib/rpm/Packages succeeded.
0
If it prints 0, proceed to next step.
4. Rename the Packages file (don't delete it, we'll need it!), as follows:
[root@nsk ~]# mv /var/lib/rpm/Packages /var/lib/rpm/Packages.org
5. Now, dump the Packages db from the original Packages db by executing the following command:
[root@nsk ~]# cd /var/lib/rpm/
[root@nsk rpm]# /usr/lib/rpm/rpmdb_dump Packages.org | /usr/lib/rpm/rpmdb_load Packages
rpmdb_load: BDB1540 configured environment flags incompatible with existing environment
6.Verify the integrity of the newly created Packages database. Run the following:
[root@nsk rpm]# /usr/lib/rpm/rpmdb_verify /var/lib/rpm/Packages; echo $?
BDB5105 Verification of /var/lib/rpm/Packages succeeded.
0
If the exit code is not 0, you will need to restore the database from backup.
7. Rebuild the rpm indexes, as follows:
[root@nsk ~]# rpm -vv --rebuilddb
[root@nsk rpm]# rpm -vv --rebuilddb
D: rebuilding database /var/lib/rpm into /var/lib/rpmrebuilddb.1312
D: opening db environment /var/lib/rpm private:0x401
D: opening db index /var/lib/rpm/Packages 0x400 mode=0x0
D: locked db index /var/lib/rpm/Packages
D: opening db environment /var/lib/rpmrebuilddb.1312 private:0x401
D: opening db index /var/lib/rpmrebuilddb.1312/Packages (none) mode=0x42
D: opening db index /var/lib/rpmrebuilddb.1312/Packages 0x1 mode=0x42
D: disabling fsync on database
....
...
D: adding "5f7fd424d0773a4202731bff4901d449699b0929" to Sha1header index.
D: closed db index /var/lib/rpm/Packages
D: closed db environment /var/lib/rpm
D: closed db index /var/lib/rpmrebuilddb.1312/Sha1header
D: closed db index /var/lib/rpmrebuilddb.1312/Sigmd5
D: closed db index /var/lib/rpmrebuilddb.1312/Installtid
D: closed db index /var/lib/rpmrebuilddb.1312/Dirnames
D: closed db index /var/lib/rpmrebuilddb.1312/Triggername
D: closed db index /var/lib/rpmrebuilddb.1312/Obsoletename
D: closed db index /var/lib/rpmrebuilddb.1312/Conflictname
D: closed db index /var/lib/rpmrebuilddb.1312/Providename
D: closed db index /var/lib/rpmrebuilddb.1312/Requirename
D: closed db index /var/lib/rpmrebuilddb.1312/Group
D: closed db index /var/lib/rpmrebuilddb.1312/Basenames
D: closed db index /var/lib/rpmrebuilddb.1312/Name
D: closed db index /var/lib/rpmrebuilddb.1312/Packages
D: closed db environment /var/lib/rpmrebuilddb.1312
8. Use the following command to check the rpm db with yum for any other issues (this may take a long time):
[root@nsk rpm]# yum check
Loaded plugins: fastestmirror
....
...
9. Restore the SELinux context of the rpm database through the following command:
[root@nsk rpm]# restorecon -R -v /var/lib/rpm
No comments:
Post a Comment