RPM数据库由CentOS中的/ var / lib / rpm /目录下的文件和其他企业Linux发行版(如RHEL , openSUSE , Oracle Linux等)组成。
如果RPM数据库损坏, RPM将无法正常工作,因此更新无法应用到您的系统,您在通过YUM软件包管理器更新系统上的软件包时遇到错误。 最糟糕的情况是无法成功运行任何rpm和yum命令。
导致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数据库。 要提出任何问题或分享您对本指南的看法,请使用下面的反馈表格。