web-dev-qa-db-ja.com

yumインデックスが破損するのはなぜですか?

時折、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マシンがあり、この問題が発生するパターンはありません。これは「100万分の1」の問題である可能性があり、大規模に頻繁に見られます。

注:これは非常に「自由形式の」質問であると認識していますが、回答で原因が見つかった場合は、戻って質問を特定の問題に直接関連するより標準的なものに変えます。

10
TomOnTime

一般的なケースでは、これは、Berkeley DBのKey-Valueストアであり非常に機密性の高いrpmdbを更新するときにrpm(またはyum)がクラッシュしたときに発生します。このようなクラッシュが発生すると、rpmdbは不整合な状態のままになり、このエラーが発生します。 /var/lib/rpm内の他のすべてのファイルには同じ情報が含まれていますが、形式は効率が悪いため、データベースを簡単に再構築できます。

古いCentOSシステムで見た可能性のある2つの注目すべきバグがこれを引き起こす可能性があります。 大きなもの 、変更ログに表示される「共有mmapされたページの書き戻しにおける厄介で微妙な競争」は 2007年のカーネルアップデートで静かに修正されました でした。これは それ自体は少し異なって表示されます しかしあなたのレポートとは異なります。

2009年から表示される可能性があります PackageKitが不適切なタイミングでyumを強制終了したときに発生し、 これも修正されました 。ただし、これはGUIを備えたデスクトップシステムまたはサーバーに影響を与える可能性が高くなります。

これらのバグはすべてEL6より前のものであり、ほとんどEL 6または7でこれが発生することはなく、EL5システムの場合は表示されないはずです。最新です。 (EL 4についてはわかりません。もしあれば、広がる前に殺してください。)とはいえ、yumまたはrpmを死に至らしめるもの rpmdbでの作業中に、それが発生する可能性があります。これには、最近見られる可能性が最も高いもの、ランダムな宇宙線の反転ビット、またはkill -9に熱心になっている人が含まれます。

RHEL 7では、yumは実際のトランザクションの実行中にさらに多くのシグナルをトラップし、メッセージ(shutdown inhibited)が表示されます。これは、誰かまたは何かがトランザクションを中断してこの問題を引き起こすほとんどの状況を防ぐのに役立つはずです。

6
Michael Hampton