ツイート
シェア
LINEで送る
B! はてぶでブックマーク
Pocketでブックマーク
RSSフィード

CentOS7, yum updateでrpmdbが壊れたのを直す方法

CentOS7
イラストダウンロードサイト【イラストAC】
の画像をもとに加工しています。※ CentOSのロゴはcentos.orgの商標です。当サイトがCentOS公認を示すものではありません。

yum updateでパッケージのアップデートができなくなりました。エラー内容を見るとrpmdbが壊れたらしい。

それを直します。作業自体はかんたんでコマンドを3回たたくだけなんですが、中身の理解が必要です。

(頻繁に起きることではないですが、でもそれが忘れやすい。備忘録です。)

CentOS7.8.2003
作業OSのバージョン

CentOSは、パッケージ(アプリ)の追加・更新・削除でyumコマンドを使います。

いつものようにyum updateを実行したら最後にこんなエラーが出ました。

完了しました!
error: rpmdb: BDB0060 PANIC: fatal region error detected; run recovery
error: db5 error(-30973) from db->close: BDB0087 DB_RUNRECOVERY: Fatal error, run database recovery
error: rpmdb: BDB0060 PANIC: fatal region error detected; run recovery
error: db5 error(-30973) from db->close: BDB0087 DB_RUNRECOVERY: Fatal error, run database recovery
error: rpmdb: BDB0060 PANIC: fatal region error detected; run recovery
error: db5 error(-30973) from db->close: BDB0087 DB_RUNRECOVERY: Fatal error, run database recovery
error: rpmdb: BDB1581 File handles still open at environment close
error: rpmdb: BDB1582 Open file handle: /var/lib/rpm/__db.001
error: rpmdb: BDB1582 Open file handle: /var/lib/rpm/__db.002
error: rpmdb: BDB1582 Open file handle: /var/lib/rpm/__db.003
error: rpmdb: BDB1582 Open file handle: /var/lib/rpm/Packages
error: rpmdb: BDB1582 Open file handle: /var/lib/rpm/Requirename
error: rpmdb: BDB1582 Open file handle: /var/lib/rpm/Name
error: rpmdb: BDB0060 PANIC: fatal region error detected; run recovery
error: db5 error(-30973) from dbenv->close: BDB0087 DB_RUNRECOVERY: Fatal error, run database recovery
error: rpmdb: BDB0060 PANIC: fatal region error detected; run recovery
error: db5 error(-30973) from db->close: BDB0087 DB_RUNRECOVERY: Fatal error, run database recovery
error: rpmdb: BDB0060 PANIC: fatal region error detected; run recovery
error: db5 error(-30973) from db->close: BDB0087 DB_RUNRECOVERY: Fatal error, run database recovery
error: rpmdb: BDB0060 PANIC: fatal region error detected; run recovery
error: db5 error(-30973) from db->close: BDB0087 DB_RUNRECOVERY: Fatal error, run database recovery
error: rpmdb: BDB0060 PANIC: fatal region error detected; run recovery
error: db5 error(-30973) from db->close: BDB0087 DB_RUNRECOVERY: Fatal error, run database recovery
error: rpmdb: BDB0060 PANIC: fatal region error detected; run recovery
error: db5 error(-30973) from db->close: BDB0087 DB_RUNRECOVERY: Fatal error, run database recovery
error: rpmdb: BDB0060 PANIC: fatal region error detected; run recovery
error: db5 error(-30973) from db->close: BDB0087 DB_RUNRECOVERY: Fatal error, run database recovery
error: rpmdb: BDB0060 PANIC: fatal region error detected; run recovery
error: db5 error(-30973) from db->close: BDB0087 DB_RUNRECOVERY: Fatal error, run database recovery
error: rpmdb: BDB0060 PANIC: fatal region error detected; run recovery
error: db5 error(-30973) from db->close: BDB0087 DB_RUNRECOVERY: Fatal error, run database recovery
error: rpmdb: BDB0060 PANIC: fatal region error detected; run recovery
error: db5 error(-30973) from db->close: BDB0087 DB_RUNRECOVERY: Fatal error, run database recovery
error: rpmdb: BDB0060 PANIC: fatal region error detected; run recovery
error: db5 error(-30973) from db->close: BDB0087 DB_RUNRECOVERY: Fatal error, run database recovery
error: rpmdb: BDB0060 PANIC: fatal region error detected; run recovery
error: db5 error(-30973) from db->close: BDB0087 DB_RUNRECOVERY: Fatal error, run database recovery
error: rpmdb: BDB0060 PANIC: fatal region error detected; run recovery
error: db5 error(-30973) from db->close: BDB0087 DB_RUNRECOVERY: Fatal error, run database recovery
error: rpmdb: BDB0060 PANIC: fatal region error detected; run recovery
error: db5 error(-30973) from db->close: BDB0087 DB_RUNRECOVERY: Fatal error, run database recovery
error: rpmdb: BDB1581 File handles still open at environment close
error: rpmdb: BDB1582 Open file handle: /var/lib/rpm/__db.001
error: rpmdb: BDB1582 Open file handle: /var/lib/rpm/__db.002
error: rpmdb: BDB1582 Open file handle: /var/lib/rpm/__db.003
error: rpmdb: BDB1582 Open file handle: /var/lib/rpm/Packages
error: rpmdb: BDB1582 Open file handle: /var/lib/rpm/Name
error: rpmdb: BDB1582 Open file handle: /var/lib/rpm/Basenames
error: rpmdb: BDB1582 Open file handle: /var/lib/rpm/Group
error: rpmdb: BDB1582 Open file handle: /var/lib/rpm/Requirename
error: rpmdb: BDB1582 Open file handle: /var/lib/rpm/Providename
error: rpmdb: BDB1582 Open file handle: /var/lib/rpm/Conflictname
error: rpmdb: BDB1582 Open file handle: /var/lib/rpm/Obsoletename
error: rpmdb: BDB1582 Open file handle: /var/lib/rpm/Triggername
error: rpmdb: BDB1582 Open file handle: /var/lib/rpm/Dirnames
error: rpmdb: BDB1582 Open file handle: /var/lib/rpm/Installtid
error: rpmdb: BDB1582 Open file handle: /var/lib/rpm/Sigmd5
error: rpmdb: BDB1582 Open file handle: /var/lib/rpm/Sha1header
error: rpmdb: BDB0060 PANIC: fatal region error detected; run recovery
error: db5 error(-30973) from dbenv->close: BDB0087 DB_RUNRECOVERY: Fatal error, run database recovery

rpmのDBが壊れたようです。

rpmはRedhat系OSのパッケージ管理システムで、yum以前はこれを直接操作していたのですが、yumの登場でラッピングされました。

(yumは内部でrpmを操作している。)

エラー内容は、rpm情報テーブルのリカバリをチャレンジして失敗しています。ちなみに、この状態でyum updateを実行するとやっぱりエラーになります。

yum update
エラー: db5 エラー (-30973) (dbenv->open において): BDB0087 DB_RUNRECOVERY: Fatal error, run database recovery
エラー: Packages インデックスを db5 で開けません -  (-30973)
エラー: /var/lib/rpm にある Package データベースを開けません。
CRITICAL:yum.main:

Error: rpmdb open failed

リカバリでダメなら作り直しましょう。

rpm情報テーブルの退避。

rpmdbのリカバリ(再生成)。

yumコマンドでクリーン実行。

作業の内容はこれだけです。これをコマンドで実行するとこうなります。

rpmdbのリカバリ
  mv /var/lib/rpm/__db* /tmp/
  rpm --rebuilddb
  yum clean all

作業は以上です。


Redhat系OSを使いはじめて10年? いやそれ以上が経っていますが、こんなことは初めてです。

もしかしたら、HDDの寿命が来たのかも?

今回これが起きたのは、VirtualBoxを使ってローカルPCに作った仮想サーバー。

レンタルサーバーやクラウドサーバーは、サービス提供会社が定期的にメンテナンスでHDDの交換をしているので、ハードが原因で起きることは稀。

勝手にHDDのせいにしてますが確証はありません。それくらい、頻繁に起きるものではないです。

VirtualBoxはバージョン6からWindows10のHyper-Vと共存できるようになりました。

でも、仮想サーバーのネットワークが不安定です。

yumはネット上のrpmリポジトリに頻繁にアクセスするので、通信が途切れて起きたのかも知れません。

※ 追記。依存性の解決エラーでも使える

yum updateの『依存性の解決』でエラーが出たときにも使えます。

依存性の解決エラー
yum update
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ mongodb-org.x86_64 0:4.2.9-1.el7 を 更新
---> パッケージ mongodb-org.x86_64 0:4.2.10-1.el7 を アップデート
---> パッケージ mongodb-org-mongos.x86_64 0:4.2.9-1.el7 を 更新
---> パッケージ mongodb-org-mongos.x86_64 0:4.2.10-1.el7 を アップデート
---> パッケージ mongodb-org-server.x86_64 0:4.2.9-1.el7 を 更新
---> パッケージ mongodb-org-server.x86_64 0:4.2.10-1.el7 を アップデート
---> パッケージ mongodb-org-shell.x86_64 0:4.2.9-1.el7 を 更新
---> パッケージ mongodb-org-shell.x86_64 0:4.2.10-1.el7 を アップデート
---> パッケージ mongodb-org-tools.x86_64 0:4.2.9-1.el7 を 更新
---> パッケージ mongodb-org-tools.x86_64 0:4.2.10-1.el7 を アップデート
エラー: rpmdbNextIterator: スキップします。 h#     724 リージョン ヘッダー以降: 異常です。tag 1986338884 type 1768123251 offset -1869490464 count 1529950513
--> 依存性解決を終了しました。
エラー: rpmdbNextIterator: スキップします。 h#     724 リージョン ヘッダー以降: 異常です。tag 1560948000 type 1533440861 offset -544106099 count 975195497
エラー: Rpmdb checksum is invalid: pkg checksums: kernel-headers-0:3.10.0-1127.19.1.el7.x86_64
前の投稿
CentOS ssh, rootユーザーをパスワードでログインする
CentOS7 yum, rpmdb復旧でも直らないのを解決する方法
次の投稿
コメントを残す

*