为什么yum索引损坏?


10

有时,yum的缓存已损坏,我们看到如下错误:

error: db3 error(-30974) from dbenv->failchk: DB_RUNRECOVERY: Fatal error, run database recovery
error: cannot open Packages index using db3 -  (-30974)
error: cannot open Packages database in /var/lib/rpm

解决方法是rm -f /var/lib/rpm/__db*,然后下一个“ yum”命令重新生成数据。

我的问题是:可能是什么原因造成的?是否有一些忽略锁的常见任务或导致此的其他问题?

我们有数百台CentOS机器,没有任何模式可以解决此问题。这可能是一个“百万分之一”的问题,在大型组织中经常出现。

注意:我意识到这是一个非常“开放式”的问题,但是如果答案找到了原因,我将返回并将问题转为与特定问题直接相关的更规范的问题。


我似乎回想起几年前的一些错误。机器是最新的吗?
迈克尔·汉普顿

数百台CentOS机器?这是用于Stackexchange吗?我认为他们没有那么多Linux系统。
Zoredache 2014年

@Zoredache大多数是虚拟的。许多请求不在服务请求的直接范围内,但很多都在。
TomOnTime 2014年

Answers:


6

通常,在更新rpmdb(这是Berkeley DB键值存储)并且非常敏感时,rpm(或yum)崩溃时会发生这种情况。当发生此类崩溃时,rpmdb处于不一致状态,并且会发生此错误。所有其他文件都/var/lib/rpm包含相同的信息,尽管格式效率较低,因此可以轻松地重建数据库。

您可能会在较旧的CentOS系统上看到两个值得注意的错误,可能会导致这种情况。大一个,因为它出现在更新日志了“共享mmap'ed页写回讨厌的和微妙的比赛”,被悄悄地固定在内核更新于2007年。不过,此报告的呈现方式与您的报告略有不同

你可能会从2009年看到一个发生时将PackageKit的在不合适的时候杀死百胜,并也固定。但是,这更可能会影响具有GUI的桌面系统或服务器。

所有这些错误都早于EL 6,并且您几乎永远都不会在EL 6或7上看到这种错误,如果您的EL 5系统是最新的,也应该看不到它。(我不知道EL4。如果有EL 4,请在杀死它之前将其杀死。)也就是说,在使用rpmdb时导致yum或rpm死亡的任何事情都可能引起它。这包括这些天您最有可能看到的事物,随机的宇宙射线使位翻转或对变得过分热心的人kill -9

在RHEL 7中,yum在实际事务运行期间会捕获更多信号,您将看到消息(shutdown inhibited)。这应该有助于防止大多数情况下某人或某物中断事务并导致此问题。


2
我敢打赌,问题在于过度使用“ kill -9”。谢谢!
TomOnTime 2014年
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.