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すると同じエラーが発生します。

どうすれば解決できますか?

回答:


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

このソリューションは、yumではなくdnfでも機能するようです。
アンハンマー

これをすべて実行した後、「未完了のトランザクションが残っています。」というメッセージが表示され、問題を引き起こした破損したパッケージが今後のインストールをブロックし続けます。さらに言えば、なぜエンドユーザーはこれを表示/実行する必要があるのでしょうか?yum-dbに問題がある場合は、それ自体を自動的にクリーニング/修正する必要があります-せいぜいos-tinkererがオプトアウトしたいay / nプロンプトが表示されます。私の場合の修正を見つけました-上記を実行してから、「yum-complete-transaction --cleanup-only」を実行します
JosephK

8
どうしてcd /var/lib/rpm; db_recover?ほとんどの場合、それは核の選択肢ではありません。
クレイグリンガー

3
sudo rpm --rebuilddbだけが私の問題を解決すると思います。それにもかかわらず、常に/var/lib/rpm安全のためにバックアップします。
アリック

yumインストールで強制終了メッセージが表示される場合は、サーバーを再起動してください。はい、この機能のような基本的なものを得るために再起動するのは残念ですが、それが私のために働いた唯一のことでした。
ニーマル

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

私は上記の1つを試してみましたがうまくいきませんでした

以下は正常に動作します

# 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」の2つのファイルと、「__ db」で始まる3つのファイルを削除することだけでした。

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

その後、yum update働いた。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.