CentOS CentOS

CentOS: база rpm повреждена (rpmdb error)

  • Обновлено
  • Чтение ≈ 3 минуты

Краткий ответ

База установленных пакетов может повредиться при аварийном отключении или прерванной установке. Ниже — причины и порядок действий от простого к сложному.

В этой статье
  1. Что означает ошибка
  2. Причины и решения
  3. Пошаговое решение
  4. Резервная копия и снятие блокировок
  5. Перестроение
  6. Если не помогло

#Что означает ошибка

Сообщение
error: rpmdb: BDB0113 Thread/process failed: BDB1507 Thread died in Berkeley DB library

Ошибки error: rpmdb: BDB0113 Thread/process ... failed, error: db5 error(-30973) и rpmdb: Program version mismatch означают, что база данных RPM (/var/lib/rpm) повреждена: сбой при установке, прерванное обновление, нехватка места, аварийное отключение. Без базы yum и rpm не работают.

Перед восстановлением сделайте копию каталога.

Дальше пересоберите индексы базы.

База установленных пакетов может повредиться при аварийном отключении или прерванной установке. Её можно перестроить командой rpm --rebuilddb.

#Причины и решения

Возможная причинаКак узнатьЧто делать
Аварийное завершениеyum прервали.rpm --rebuilddb.
Остались блокировкиФайлы __db.Удалите.
Диск заполненНет места.Освободите.
Ошибки файловой системыДиск.fsck.

#Пошаговое решение

  1. Остановите yum и rpmПеред восстановлением базы RPM в CentOS запустите pgrep -a -f "rpm|yum|dnf|PackageKit" и убедитесь, что нет реальной установки или обновления. Если процессы идут, дождитесь их окончания; не убивайте менеджер пакетов во время транзакции. При подозрении на зависание сохраните журнал и согласуйте остановку с администратором сервера. После этого проверьте свободное место на разделе, где находится база RPM, и только затем делайте её резервную копию.
  2. Сделайте копию /var/lib/rpmСначала узнайте реальный путь базы командой rpm --eval "%{_dbpath}". Под правами root убедитесь, что пакетные менеджеры не работают и место на другом диске достаточно для копии. Сделайте архив реального каталога базы в отдельное безопасное хранилище или сохраните снимок виртуальной машины, проверьте его наличие. Путь базы в CentOS и новых RHEL-подобных системах не всегда одинаков.
  3. Определите формат RPM-базы, не удаляя файлы наугадНа CentOS 7 и более новых RPM может использовать разные форматы баз данных; расположение и содержимое /var/lib/rpm нельзя считать универсальными. Выполните rpm --version, rpm --eval "%{_dbpath}" и ls -lah для полученного реального каталога. Убедитесь, что пакетные менеджеры не запущены, а копия каталога сохранена. Не выполняйте rm __db.* автоматически и не удаляйте Packages/SQLite: формат, причина блокировки и безопасный способ восстановления требуют проверки.
  4. Выполните rpm --rebuilddbТолько при подтверждённом повреждении индекса RPM и после резервного копирования используйте восстановление, соответствующее именно вашей версии RPM и её формату базы (Berkeley DB или SQLite). В терминале администратора сначала выполните rpm --eval "%{_dbpath}" и проверьте права и доступность каталога; затем по документации вашего выпуска можно применить sudo rpm --rebuilddb. После выполнения проверьте rpm -qa | head, sudo dnf check либо yum check для старого CentOS. Если база продолжает сообщать ошибки, восстановите копию или привлеките специалиста вместо повторных пересборок.
  5. Очистите кэш и проверьте yum checkУточните, какому приложению принадлежит кэш; сначала сохраните рабочие данные. Используйте штатную команду очистки именно этого приложения или пакетного менеджера, а не удаляйте произвольные системные каталоги.
  6. Проверьте базу после восстановления без изменения пакетовВыполните rpm -qa | head, rpm -q rpm и штатную диагностическую команду менеджера пакетов, соответствующего вашему выпуску. Если ошибка rpmdb сохраняется, не запускайте цепочку db_dump/db_load из старых инструкций: сначала восстановите проверенную копию базы или привлеките администратора с учётом используемого RPM/SQLite/BDB.
  7. Не удаляйте __db* без определения версии RPM и формата базы (SQLite или Berkeley DB)
    Linux · Терминал (Bash)Команда
    Не удаляйте __db* без определения версии RPM и формата базы (SQLite или Berkeley DB). Запуск: терминал Linux с правами, указанными в команде. Сначала проверьте имя устройства и целевой путь.
    rpm -qa >/dev/null

#Резервная копия и снятие блокировок

Остановите установку пакетов только штатно; проверьте ps aux | grep -E "[r]pm|[y]um|[d]nf". Запишите результат rpm --version и rpm --eval "%{_dbpath}". После проверенной резервной копии реальной базы можно попробовать sudo rpm --rebuilddb, если хватает места на диске и нет аппаратных ошибок. Не удаляйте файлы __db.* без подтверждения применимости к вашему формату RPM; SQLite требует другого подхода.

#Перестроение

Выполните sudo rpm --rebuilddb. Затем очистите кэш: sudo yum clean all (на новых системах sudo dnf clean all). Проверьте работу: rpm -qa | wc -l и sudo yum check. Для CentOS 8+/Stream/Alma/Rocky база в формате sqlite или ndb: sudo rpm --rebuilddb работает так же. Если rpm -qa по-прежнему падает, проверьте целостность: db_verify /var/lib/rpm/Packages (пакет libdb-utils).

#Если не помогло

Если rpm --rebuilddb не помог, сохраните точный текст ошибки, rpm --version, rpm --eval "%{_dbpath}", список файлов базы и состояние диска. Не выполняйте старые инструкции с db_dump, db_load или переименованием Packages на неизвестной версии RPM: восстановление Berkeley DB и SQLite различается. При необходимости восстановите базу из проверенной копии или обратитесь к администратору.

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 2 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.