有时候使用 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 的话,那么可以尝试下面步骤来进行恢复
1、首先备份现在的RPM数据库,防止后续操作对数据库产生进一步的损坏
tar -cvf rpm.db.tar /var/lib/rpm
2、删除 /var/lib/rpm/__db* 文件,这一步是删除之前 rpm 命令所产生的锁
cd /var/lib/rpm
rm -f /var/lib/rpm/__db*
3、尝试重建 RPM 数据库
rpm -vv --rebuilddb
4、验证Packages中文件的完整性
/usr/lib/rpm/rpmdb_verify /var/lib/rpm/Packages
如果上面的步骤还不行,那么需要重新导出倒入数据库
1、备份 Packages 目录
cd /var/lib/rpm
mv /var/lib/rpm/Packages /var/lib/rpm/Packages.bak
2、导出再导入数据库
/usr/lib/rpm/rpmdb_dump Packages.bak |/usr/lib/rpm/rpmdb_load Packages
3、再校验 Packages 文件中的完整性
/usr/lib/rpm/rpmdb_verify Packages
4、检查 DB 中的 headers
rpm -q >/dev/null
5、若上一步没有输出,那么可以重建 index 了
rpm -v --rebuilddb
