Fedora/RHEL: error: rpmdb open failed

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

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

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

В этой статье
  1. Что означает ошибка
  2. Причины и решения
  3. Пошаговое решение
  4. Блокировки
  5. Перестроение базы
  6. Особые ситуации

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

Сообщение
error: rpmdb: BDB0113 Thread/process failed error: cannot open Packages database

error: cannot open Packages database in /var/lib/rpm / error: db5 error(11) from dbenv->open: Resource temporarily unavailable — rpm не может открыть свою базу. Причины: другой процесс удерживает блокировку (yum/dnf в фоне, PackageKit, автообновления), остались файлы блокировок после сбоя, нет прав, повреждение или нехватка места.

Сначала проверьте активные процессы.

Затем уберите блокировки и пересоберите базу.

База данных RPM может быть повреждена после аварийного завершения установки. Её можно перестроить командой rpm --rebuilddb — предварительно закрыв другие процессы пакетного менеджера.

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

Возможная причинаКак узнатьЧто делать
Прерванная установкаСбой питания или kill.Перестройте базу.
Висящий процесс rpm/dnfБлокировка.Завершите процесс.
Нет местаДиск заполнен.Освободите место.
Ошибки файловой системыДиск с ошибками.Проверьте диск.

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

  1. Проверьте процессы пакетных менеджеровОшибка rpmdb open failed относится к базе установленных RPM-пакетов, а не к службе произвольного имени. Откройте терминал Fedora/RHEL/совместимого дистрибутива и выполните ps -ef | grep -E "[r]pm|[d]nf|[y]um|[p]ackagekit". Если пакетный менеджер сейчас обновляет систему, дождитесь завершения. Затем проверьте свободное место df -h / /var и inode df -i /var, запишите полную ошибку rpm -qa. Не удаляйте файлы базы при активной установке.
  2. Остановите packagekitЕсли packagekit занял менеджер пакетов, закройте графическую программу обновления и дождитесь окончания операции. Проверьте systemctl status packagekit --no-pager и наличие процессов ps -ef | grep -E "[p]ackagekitd|[d]nf|[r]pm". Только после проверки и при необходимости администратор может временно остановить sudo systemctl stop packagekit; не останавливайте работающую транзакцию. Затем повторите диагностику базы и после ремонта верните штатную работу обновлений.
  3. Сделайте копию /var/lib/rpmПрежде чем применять восстановление, создайте копию фактической базы RPM. Её расположение зависит от версии дистрибутива: проверьте rpm --eval "%{_dbpath}". На современных Fedora/RHEL это может быть /usr/lib/sysimage/rpm, а не /var/lib/rpm. Убедитесь, что пакетные менеджеры не работают и хватает места, затем скопируйте весь каталог в отдельную директорию с сохранением владельца и разрешений штатной утилитой cp -a. Не заменяйте базу копией от другого компьютера.
  4. Удалите __db.* и пересоберите базуНе удаляйте __db.*: это приём для старых Berkeley DB, который неприменим к ряду современных RPM с SQLite или другим форматом. Сначала определите выпуск (cat /etc/os-release) и реальный путь rpm --eval "%{_dbpath}", проверьте целостность резервной копии и отсутствие работающих транзакций. Только затем следуйте официальной для конкретной версии процедуре rpm --rebuilddb; на неисправном диске или без копии попытки ремонта могут усугубить потерю данных.
  5. Проверьте rpm -qa и место на дискеПосле подтверждённого восстановления выполните rpm -qa | head -n 20 и rpm -q rpm, убедитесь, что чтение базы не выдаёт rpmdb open failed. Дополнительно проверьте df -h / /var и df -i /var, чтобы исключить повторную нехватку места. Затем выполните безопасный просмотр sudo dnf check (если dnf установлен) и изучите предупреждения. Если ошибок базы нет, но пакеты не совпадают, не продолжайте массовое обновление до проверки резервной копии.
  6. Дополнительная команда по теме
    Linux · Терминал (Bash)Команда
    Удалена безусловная пересборка базы RPM, пока не проверен её формат и не сохранена резервная копия.
    rpm --eval "%{_dbpath}"
    rpm -q rpm

#Блокировки

Выполните ps aux | grep -E "yum|dnf|rpm|packagekit|apt" и дождитесь завершения. Остановите PackageKit: sudo systemctl stop packagekit. Не убивайте процессы в середине установки. Если процессов нет, удалите файлы блокировок: sudo rm -f /var/lib/rpm/__db.00*. Проверьте права: ls -ld /var/lib/rpm (владелец root, drwxr-xr-x). Запускайте rpm от root. Место: df -h /var, df -i /var.

#Перестроение базы

Резервная копия: sudo cp -a /var/lib/rpm /var/lib/rpm.bak. Затем sudo rpm --rebuilddb. Проверка: rpm -qa | head. Для Fedora/RHEL 9+ база может быть в /usr/lib/sysimage/rpm; тот же порядок действий с этим путём (rpm --rebuilddb --dbpath не нужен — rpm знает путь по умолчанию). После этого sudo dnf clean all.

#Особые ситуации

В контейнерах и chroot укажите --root: rpm --root /mnt/sysroot -qa. Если база повреждена (BDB0060, PANIC: fatal region error detected), после __db.* и --rebuilddb помогает db_recover -h /var/lib/rpm (пакет libdb-utils) и повторная пересборка. Незавершённые транзакции: sudo dnf history list, sudo dnf history redo и yum-complete-transaction. После сбоя питания проверьте файловую систему fsck на отмонтированном разделе.

Linux · Терминал (Bash)Команда
Не удаляйте файлы /var/lib/rpm/__db* без анализа формата RPM и живых процессов. Запуск: терминал Linux с правами, указанными в команде. Сначала проверьте имя устройства и целевой путь.
rpm -qa >/dev/null

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

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

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