

CentOS 6でrpmdbがBDB0100エラーで固まったので__db.00xを消した
この記事は、構成と文章の整理に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、という順番で試すのが良さそう。