yum错误:rpmdb打开失败


42

我正在尝试运行,yum update并且正在运行此错误:

rpmdb: PANIC: fatal region error detected; run recovery
error: db3 error(-30974) from dbenv->open: DB_RUNRECOVERY: Fatal error, run database recovery
error: cannot open Packages index using db3 - (-30974)
error: cannot open Packages database in /var/lib/rpm
CRITICAL:yum.main:

Error: rpmdb open failed

我查了一下页面这样的一个,但运行yum clean all运行相同的错误。

我该如何解决?

Answers:


84

这就是我解决问题的方式。

这是相当混乱的情况。您可以通过清除rpm数据库来解决此问题。为了最大程度地降低风险,请/var/lib/rpm/使用以下cp命令对文件进行备份:

mkdir /root/backups.rpm.mm_dd_yyyy/
cp -avr /var/lib/rpm/ /root/backups.rpm.mm_dd_yyyy/

要解决此问题,请尝试:

# rm -f /var/lib/rpm/__db*
# db_verify /var/lib/rpm/Packages
# rpm --rebuilddb
# yum clean all

使用以下yum命令验证错误已消失

# yum update

此解决方案似乎也可以使用dnf而不是yum。
2013年

完成所有这些操作后,我得到“剩余未完成的事务。”,造成问题的损坏软件包继续阻止以后的任何安装。因此,最终用户为什么需要查看/执行任何这些操作?如果yum-db有问题,它应该自动清理/修复自身-最多以y / n提示提示os-tinkerer可能希望退出。找到适合我的情况的解决方案-执行上述操作,然后执行“ yum-complete-transaction --cleanup-only”
JosephK

8
为什么不只是cd /var/lib/rpm; db_recover呢?在大多数情况下,这不是核选择。
Craig Ringer

3
我发现sudo rpm --rebuilddb一个人解决了我的问题。不过,请务必备份/var/lib/rpm以确保安全。
阿里克

对于那些仍然在yum install上看到被杀死的消息的人,只需重新启动服务器即可。是的,重新启动才能获得像这样的基本功能很糟糕,但这是唯一对我有用的东西。
Nirmal

0

谢谢亚历克斯,除了我必须做出的一些小改变之外,您的答案对我有用。

rm -f /var/lib/rpm/__db*

返回的错误

rm: cannot remove `/var/lib/rpm/__db.001': Is a directory
rm: cannot remove `/var/lib/rpm/__db.002': Is a directory
rm: cannot remove `/var/lib/rpm/__db.004': Is a directory

所以我不得不递归

rm -rf /var/lib/rpm/__db*

2
这些不应该是目录。如果看到此消息,则可能要fsck在分区上运行以确保没有文件损坏。
docwhat

0

我尝试了上面的一个没有用

下面工作正常

# cd /var/lib
# tar -zcvf /var/preserve/rpmdb-$(date +%Y-%m-%d_%H-%M-%S).tar.gz rpm

注意:如果尝试恢复RPM数据库有问题,则可以使用此tar备份。

验证软件包文件的完整性:

# cd /var/lib/rpm
# rm -f __db*      # to avoid stale locks
# /usr/lib/rpm/rpmdb_verify Packages

# mv Packages Packages.orig
# /usr/lib/rpm/rpmdb_dump Packages.orig | /usr/lib/rpm/rpmdb_load Packages


# rpm -vv --rebuilddb

再次验证RPM数据库:

# cd /var/lib/rpm
# /usr/lib/rpm/rpmdb_verify Packages

0

我要做的就是删除两个扩展名为“ .lock”的文件,以及三个以“ __db”开头的文件。

# rm /var/lib/rpm/.dbenv.lock
# rm /var/lib/rpm/.rpm.lock
# rm /var/lib/rpm/__db*

在那之后,yum update工作了。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.