yum update で「rpmdb: PANIC: fatal region error detected; run recovery」発生

yum update で自動的にパッケージを更新していたら、更新に失敗した通知が届いた。該当のサーバーにログインして yum update してみると、以下のようなエラーが発生した。サーバーは、さくらインターネットの VPS を利用しており、CentOS 6.5を利用している。

[root@server ~]# 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

エラーが発生したのは、

  • 前日の更新で kernel パッケージの更新が発生
  • 再起動するが、kernel パニックで起動せず
  • コンソールでログインして以前の kernel で起動

という一連の作業を実施した翌日の出来事だ。おそらく rpm のデータベースが壊れたのであろうと推測し、エラーの回復方法を調べてみると「/var/lib/rpm/__db.*」を消せばよいという情報が見つかった他のサイトの情報なども合わせて、ざっと要約すると「/var/lib/rpm/__db.* ファイルは Berklay DB にアクセスするときに生成されるファイルで、rpm コマンドが強制終了したときに残る」ということのようだ。

再生成されると書いてあるので消しても問題ないだろうと思って、

[root@server ~]# rm /var/lib/rpm/__db.*
[root@server ~]# yum update
rpmdb: PANIC: fatal region error detected; run recovery
...

さっくりと消したが、yum update は成功しない。気を取り直して、ファイル削除、rpm のデータベース再作成、yum の順に実行したところ成功した。

[root@server ~]# rm /var/lib/rpm/__db.*
[root@server ~]# rpm --rebuilddb
[root@server ~]# yum update

rpm の「–rebuilddb」はデータベース再作成オプションで、インストールされているパッケージのへッダーからデータベースのインデックスを再作成する。

なお、今回は場当たり的に対処してしまったが、正しく行うのであればシングルユーザーモードで起動、「/var/lib/rpm」のバックアップを取得、「/var/lib/rpm/__db.*」ファイルの削除、データベースの再作成という順序で行う。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Time limit is exhausted. Please reload CAPTCHA.