重建CentOS或RHEL上被损坏的RPM数据库
source link: https://www.lujun9972.win/blog/2018/07/21/%E9%87%8D%E5%BB%BAcentos%E6%88%96rhel%E4%B8%8A%E8%A2%AB%E6%8D%9F%E5%9D%8F%E7%9A%84rpm%E6%95%B0%E6%8D%AE%E5%BA%93/index.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
重建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
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK