网站搜索

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


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

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

另请阅读:Linux 中 RPM 命令的 20 个实用示例

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

在本文中,我们将展示如何重建损坏的 RPM 数据库;这样您就可以从 CentOS 中的 RPM 数据库损坏中恢复。这需要 root 用户权限,否则,请使用 sudo 命令来获取这些权限。

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

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

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

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

rm -f /var/lib/rpm/__db*		
/usr/lib/rpm/rpmdb_verify /var/lib/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

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


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

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

rpm -vv --rebuilddb

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

我们还发现了dcrpm(检测和纠正 rpm)命令行工具,用于识别和纠正与 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 数据库。要提出任何问题或分享您对本指南的看法,请使用下面的反馈表。