CentOS 6でrpmdbがBDB0100エラーで固まったので__db.00xを消した

  • CentOS
  • RPM
  • yum

この記事は、構成と文章の整理にAIを使っています。
あくまで読みやすくするための補助で、内容そのものをAIにすべて任せて書いているわけではありませんが、ところどころ相談しながら整えています。

何が起きたか

CentOS 6でyumを実行しようとしたら、以下のようなエラーが出て固まった。

rpmdb: BDB0100 Threads or processes using shared memory can not be recovered

/var/lib/rpm を見てみると、以下のようなファイルが残っていた。

# ll /var/lib/rpm
....
__db.001
__db.002
__db.003
__db.004
....

原因

CentOS 6のrpmはバックエンドにBerkeley DB (BDB) を使っていて、__db.00x はそのロックや共有メモリ管理用の環境ファイルらしい。実データ(Packagesなど)ではないので、消しても情報自体は失われない。yumやrpmが強制終了した後などにこのロックが残ったままになって、上記のエラーになることがあるようだ。

対処

yum/rpm系のプロセスが動いていないことを確認してから、該当ファイルを削除する。

# rm /var/lib/rpm/__db*

これで直った。__db.00x は次回rpm/yumを実行した時に自動で作り直されるので、消すだけで特に後処理は不要だった。

補足

これで直らない場合は rpm --rebuilddb で再構築する手もあるらしいが、今回はそこまでやらずに直った。

原因の切り分けとしては、まずrpm/yumのプロセスが本当に残っていないか(psで確認)、次にディスクフルになっていないかをチェックするのが先。それでもダメなら__db.00x削除、それでもダメなら--rebuilddb、という順番で試すのが良さそう。