7

重建CentOS或RHEL上被损坏的RPM数据库

 3 years ago
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.
neoserver,ios ssh client

重建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
    

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK