暗无天日

=============>DarkSun的个人博客

重建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)的话,那么可以尝试下面步骤来进行恢复

  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