如何在CentOS中重建损坏的RPM数据库

RPM数据库由CentOS中/ var / lib / rpm /目录下的文件和其他企业Linux发行版(如RHELopenSUSEOracle Linux等)组成。

如果RPM数据库损坏, RPM将无法正常工作,因此更新无法应用到您的系统,您在通过YUM软件包管理器更新系统上的软件包时遇到错误。 最糟糕的情况是无法成功运行任何rpmyum命令。

另请 参见:Linux中20个RPM命令的实例

导致RPM数据库损坏的因素有很多,例如以前的事务不完整,安装某些第三方软件,删除特定软件包等等。

在本文中,我们将演示如何重建损坏的RPM数据库; 通过这种方式,您可以从CentOS中的RPM数据库损坏中恢复。 这需要root用户权限,否则使用sudo命令获得这些权限。

在CentOS中重建损坏的RPM数据库

首先开始备份当前的RPM数据库,然后继续操作(将来可能需要它),然后使用以下命令。

# mkdir /backups/
# tar -zcvf /backups/rpmdb-$(date +"%d%m%Y").tar.gz  /var/lib/rpm

备份RPM数据库

接下来,验证主包元数据文件/ var / lib / rpm / Packages的完整性; 这是需要重新构建的文件,但首先删除/ var / lib / rpm / __ db *文件以防止使用以下命令失效锁定。

# rm -f /var/lib/rpm/__db*		
# /usr/lib/rpm/rpmdb_verify /var/lib/rpm/Packages

验证RPM数据库

如果上述操作失败,意味着您仍然遇到错误,那么您应该转储并加载新的数据库。 如下所示验证新加载的Packages文件的完整性。

# cd /var/lib/rpm/
# mv Packages Packages.back
# /usr/lib/rpm/rpmdb_dump Packages.back | /usr/lib/rpm/rpmdb_load Packages
# /usr/lib/rpm/rpmdb_verify Packages

转储和加载RPM数据库

现在要检查数据库标题,使用-q-a标志查询所有已安装的软件包 ,并尝试仔细观察发送到stderror的任何错误。

# rpm -qa >/dev/null	#output is discarded to enable printing of errors only

最后但并非最不重要的是,使用以下命令重建RPM数据库, -vv选项允许显示大量调试信息。

# rpm -vv --rebuilddb

重建RPM数据库

使用dcrpm工具检测并更正RPM数据库

我们还发现了用于识别和纠正众所周知的与RPM数据库损坏相关的问题的dcrpm (detect and correct rpm)命令行工具。 这是一个简单易用的工具,您可以无需运行即可运行。 为了有效和可靠的使用,您应该通过cron定期运行它。

你可以从源代码安装它; 下载源代码树并使用setup.py安装它(它也应该从pypi获取psutil依赖项),如图所示。

# git clone https://github.com/facebookincubator/dcrpm.git
# cd dcrpm
# python setup.py install

一旦你安装了dcrpm ,运行如图所示。

# dcrpm

最后,尝试再次运行失败的rpm或yum命令以查看是否一切正常。

dcrpm Github存储库: https//github.com/facebookincubator/dcrpm
您可以从RPM数据库恢复页面找到更多信息。

就这样! 在本文中,我们已经解释了如何在CentOS中重建损坏的RPM数据库。 要提出任何问题或分享您对本指南的看法,请使用下面的反馈表格。

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏