yum(rpmdb)がdb3エラーでどうにもできなくなった

yumでパッケージをインストールしようとしたら、エラーがボロボロ出てきて焦った。

[root@xxx netatalk-3.1.1]# yum install gcc
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
 * base: www.ftp.ne.jp
 * extras: www.ftp.ne.jp
 * updates: www.ftp.ne.jp
base                                                                                             | 3.7 kB     00:00     
extras                                                                                           | 3.4 kB     00:00     
updates                                                                                          | 3.4 kB     00:00     
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package gcc.x86_64 0:4.4.7-4.el6 will be installed
--> Processing Dependency: cpp = 4.4.7-4.el6 for package: gcc-4.4.7-4.el6.x86_64
--> Processing Dependency: cloog-ppl >= 0.15 for package: gcc-4.4.7-4.el6.x86_64
--> Running transaction check
---> Package cloog-ppl.x86_64 0:0.15.7-1.2.el6 will be installed
--> Processing Dependency: libppl_c.so.2()(64bit) for package: cloog-ppl-0.15.7-1.2.el6.x86_64
--> Processing Dependency: libppl.so.7()(64bit) for package: cloog-ppl-0.15.7-1.2.el6.x86_64
---> Package cpp.x86_64 0:4.4.7-4.el6 will be installed
--> Processing Dependency: libmpfr.so.1()(64bit) for package: cpp-4.4.7-4.el6.x86_64
--> Running transaction check
---> Package mpfr.x86_64 0:2.4.1-6.el6 will be installed
---> Package ppl.x86_64 0:0.10.2-11.el6 will be installed
rpmdb: page 9067: illegal page type or format
rpmdb: PANIC: 無効な引数です
rpmdb: Packages: pgin failed for page 9067
エラー: db3 エラー (-30974) (dbcursor->c_get において): DB_RUNRECOVERY: Fatal error, run database recovery
rpmdb: PANIC: fatal region error detected; run recovery
エラー: db3 エラー (-30974) (dbcursor->c_close において): DB_RUNRECOVERY: Fatal error, run database recovery
rpmdb: PANIC: fatal region error detected; run recovery
エラー: db3 エラー (-30974) (db->cursor において): DB_RUNRECOVERY: Fatal error, run database recovery
rpmdb: PANIC: fatal region error detected; run recovery
エラー: db3 エラー (-30974) (db->get において): DB_RUNRECOVERY: Fatal error, run database recovery
rpmdb: PANIC: fatal region error detected; run recovery
エラー: db3 エラー (-30974) (db->cursor において): DB_RUNRECOVERY: Fatal error, run database recovery
rpmdb: PANIC: fatal region error detected; run recovery
エラー: db3 エラー (-30974) (db->get において): DB_RUNRECOVERY: Fatal error, run database recovery
rpmdb: PANIC: fatal region error detected; run recovery
エラー: db3 エラー (-30974) (db->cursor において): DB_RUNRECOVERY: Fatal error, run database recovery
rpmdb: PANIC: fatal region error detected; run recovery
エラー: db3 エラー (-30974) (db->get において): DB_RUNRECOVERY: Fatal error, run database recovery
rpmdb: PANIC: fatal region error detected; run recovery
エラー: db3 エラー (-30974) (db->cursor において): DB_RUNRECOVERY: Fatal error, run database recovery
rpmdb: PANIC: fatal region error detected; run recovery
エラー: db3 エラー (-30974) (db->get において): DB_RUNRECOVERY: Fatal error, run database recovery
rpmdb: PANIC: fatal region error detected; run recovery
エラー: db3 エラー (-30974) (db->cursor において): DB_RUNRECOVERY: Fatal error, run database recovery
rpmdb: PANIC: fatal region error detected; run recovery
エラー: db3 エラー (-30974) (db->get において): DB_RUNRECOVERY: Fatal error, run database recovery
rpmdb: PANIC: fatal region error detected; run recovery
エラー: db3 エラー (-30974) (db->cursor において): DB_RUNRECOVERY: Fatal error, run database recovery
rpmdb: PANIC: fatal region error detected; run recovery
エラー: db3 エラー (-30974) (db->get において): DB_RUNRECOVERY: Fatal error, run database recovery
Error: Rpmdb changed underneath us
 You could try using --skip-broken to work around the problem
rpmdb: PANIC: fatal region error detected; run recovery
エラー: db3 エラー (-30974) (db->cursor において): DB_RUNRECOVERY: Fatal error, run database recovery
rpmdb: PANIC: fatal region error detected; run recovery
エラー: db3 エラー (-30974) (db->get において): DB_RUNRECOVERY: Fatal error, run database recovery
rpmdb: PANIC: fatal region error detected; run recovery
エラー: db3 エラー (-30974) (db->cursor において): DB_RUNRECOVERY: Fatal error, run database recovery
rpmdb: PANIC: fatal region error detected; run recovery
エラー: db3 エラー (-30974) (db->get において): DB_RUNRECOVERY: Fatal error, run database recovery
 Yum checks failed: Rpmdb changed underneath us
 You could try running: rpm -Va --nofiles --nodigest
rpmdb: PANIC: fatal region error detected; run recovery
エラー: db3 エラー (-30974) (db->close において): DB_RUNRECOVERY: Fatal error, run database recovery
rpmdb: PANIC: fatal region error detected; run recovery
エラー: db3 エラー (-30974) (db->close において): DB_RUNRECOVERY: Fatal error, run database recovery
rpmdb: PANIC: fatal region error detected; run recovery
エラー: db3 エラー (-30974) (db->close において): DB_RUNRECOVERY: Fatal error, run database recovery
rpmdb: PANIC: fatal region error detected; run recovery
エラー: db3 エラー (-30974) (db->close において): DB_RUNRECOVERY: Fatal error, run database recovery
rpmdb: File handles still open at environment close
rpmdb: Open file handle: /var/lib/rpm/Packages
rpmdb: Open file handle: /var/lib/rpm/Name
rpmdb: Open file handle: /var/lib/rpm/Providename
rpmdb: Open file handle: /var/lib/rpm/Basenames
rpmdb: PANIC: fatal region error detected; run recovery
エラー: db3 エラー (-30974) (dbenv->close において): DB_RUNRECOVERY: Fatal error, run database recovery

ヘルプすら効かなくなった。

[root@xxx netatalk-3.1.1]# yum --help
rpmdb: PANIC: fatal region error detected; run recovery
エラー: db3 エラー (-30974) (dbenv->open において): DB_RUNRECOVERY: Fatal error, run database recovery
エラー: Packages インデックスを db3 でオープンできません -  (-30974)
エラー: /var/lib/rpm にある Package データベースをオープンできません。
CRITICAL:yum.main:

Error: rpmdb open failed


rpmdbのフォルダから 先頭が__dbの名前のファイルを削除することで

[root@xxx netatalk-3.1.1]# ls /var/lib/rpm
Basenames     Filedigests  Name          Providename     Requirename     Sigmd5       __db.002
Conflictname  Group        Obsoletename  Provideversion  Requireversion  Triggername  __db.003
Dirnames      Installtid   Packages      Pubkeys         Sha1header      __db.001     __db.004
[root@fileserver netatalk-3.1.1]# rm /var/lib/rpm/__db*
rm: remove 通常ファイル `/var/lib/rpm/__db.001'? y
rm: remove 通常ファイル `/var/lib/rpm/__db.002'? y
rm: remove 通常ファイル `/var/lib/rpm/__db.003'? y
rm: remove 通常ファイル `/var/lib/rpm/__db.004'? y

治った!

[root@xxx netatalk-3.1.1]# yum --help
Loaded plugins: fastestmirror, security
Usage: yum [options] COMMAND

List of Commands:

check          Check for problems in the rpmdb
check-update   Check for available package updates


コメント