每次安装 rpm 包时,rpm 系统会将一些元信息存储在它的数据库中,使用 rpm -q 命令查询软件包的相关信息时将会查询这些数据库,数据库文件位于 /var/lib/rpm 目录中。如果 RPM 的数据库损坏,将会导致一些 RPM 数据丢失,一些功能将无法正常使用。
[root@bogon ~]# file /var/lib/rpm/*
/var/lib/rpm/Basenames: Berkeley DB (Hash, version 9, native byte-order)
/var/lib/rpm/Conflictname: Berkeley DB (Hash, version 9, native byte-order)
/var/lib/rpm/__db.001: Applesoft BASIC program data
/var/lib/rpm/__db.002: 386 pure executable
/var/lib/rpm/__db.003: 386 pure executable not stripped
/var/lib/rpm/__db.004: 386 pure executable
/var/lib/rpm/Dirnames: Berkeley DB (Btree, version 9, native byte-order)
/var/lib/rpm/Filedigests: Berkeley DB (Hash, version 9, native byte-order)
/var/lib/rpm/Group: Berkeley DB (Hash, version 9, native byte-order)
/var/lib/rpm/Installtid: Berkeley DB (Btree, version 9, native byte-order)
/var/lib/rpm/Name: Berkeley DB (Hash, version 9, native byte-order)
/var/lib/rpm/Obsoletename: Berkeley DB (Hash, version 9, native byte-order)
/var/lib/rpm/Packages: Berkeley DB (Hash, version 9, native byte-order)
/var/lib/rpm/Providename: Berkeley DB (Hash, version 9, native byte-order)
/var/lib/rpm/Provideversion: Berkeley DB (Btree, version 9, native byte-order)
/var/lib/rpm/Pubkeys: Berkeley DB (Hash, version 9, native byte-order)
/var/lib/rpm/Requirename: Berkeley DB (Hash, version 9, native byte-order)
/var/lib/rpm/Requireversion: Berkeley DB (Btree, version 9, native byte-order)
/var/lib/rpm/Sha1header: Berkeley DB (Hash, version 9, native byte-order)
/var/lib/rpm/Sigmd5: Berkeley DB (Hash, version 9, native byte-order)
/var/lib/rpm/Triggername: Berkeley DB (Hash, version 9, native byte-order)
可以看到这里有很多 Berkeley DB 格式的数据库文件和几个 __db 数据文件。
如果 RPM 的数据库损坏,首先可以尝试重建它,如果无法重建,那么需要重新初始化数据库。
这个命令会从已安装的软件包提取信息重建数据库,它从 /var/lib/rpm/Packages 这个文件中提取信息,其他所有的数据库文件都可以由这个文件重建。如果 RPM 的数据库是完好的,这个命令不会重建,而是对数据库中未使用的条目进行空间回收。
如果已经没有其他别的办法了,--initdb 会创建一个新的空的 RPM 数据库。由于新建的数据库是空的,不要万不得已不要使用这个命令。