重建CentOS或RHEL上被损坏的RPM数据库
有时候使用rpm/yum命令时可能会出现下面这样的错误
rpm command terminates with “cannot open Packages database in /var/lib/rpm”
或者
rpmdb: Lock table is out of available locker entries
或者
rpmdb: /var/lib/rpm/Packages: unexpected file type or format error: cannot open Packages index using db3 – Invalid argument (22)
或者
error: rpmdbNextIterator: skipping h# 1601 Header V4 RSA/SHA1 signature: BAD, key ID 2142eef7
这可能是因为RPM数据库被损坏了. 若没有备份RPM数据库(/var/lib/rpm)的话,那么可以尝试下面步骤来进行恢复
首先备份现在的RPM数据库,防止后续操作对数据库产生进一步的损坏
tar -cvf rpm.db.tar /var/lib/rpm
删除
/var/lib/rpm/__db*
文件,这一步是删除之前rpm命令所产生的锁cd /var/lib/rpm rm -f /var/lib/rpm/__db*
尝试重建RPM数据库
rpm -vv --rebuilddb
验证Packages中文件的完整性
/usr/lib/rpm/rpmdb_verify /var/lib/rpm/Packages
如果上面的步骤还不行,那么需要重新导出倒入数据库
备份Packages目录
cd /var/lib/rpm mv /var/lib/rpm/Packages /var/lib/rpm/Packages.bak
导出再导入数据库
/usr/lib/rpm/rpmdb_dump Packages.bak |/usr/lib/rpm/rpmdb_load Packages
再校验Packages文件中的完整性
/usr/lib/rpm/rpmdb_verify Packages
检查DB中的headers
rpm -q >/dev/null
若上一步没有输出,那么可以重建index了
rpm -v --rebuilddb