yum Ошибка: не удалось открыть rpmdb

42

Я пытаюсь запустить, yum updateи я запускаю эту ошибку:

rpmdb: PANIC: fatal region error detected; run recovery
error: db3 error(-30974) from dbenv->open: DB_RUNRECOVERY: Fatal error, run database recovery
error: cannot open Packages index using db3 - (-30974)
error: cannot open Packages database in /var/lib/rpm
CRITICAL:yum.main:

Error: rpmdb open failed

Я проверил страницу, как эта, но при запуске yum clean allзапускается та же ошибка.

Как я могу решить это?

Алекс Джолиг
источник

Ответы:

84

Вот как я исправил свою проблему.

Это довольно грязная ситуация. Вы можете исправить это, очистив базу данных rpm. Чтобы минимизировать риск, сделайте резервную копию файлов с /var/lib/rpm/помощью cpкоманды:

mkdir /root/backups.rpm.mm_dd_yyyy/
cp -avr /var/lib/rpm/ /root/backups.rpm.mm_dd_yyyy/

Чтобы решить эту проблему, попробуйте:

# rm -f /var/lib/rpm/__db*
# db_verify /var/lib/rpm/Packages
# rpm --rebuilddb
# yum clean all

Убедитесь, что ошибка прошла с помощью следующей команды yum

# yum update
Алекс Джолиг
источник
Это решение, кажется, работает с dnf вместо yum.
молотка
После всего этого я получаю «оставшиеся незавершенные транзакции», и поврежденные пакеты, которые создали проблему, продолжают блокировать любые будущие установки. В этом отношении, почему конечному пользователю нужно видеть / делать что-либо из этого? Если у yum-db есть проблема, он должен очистить / исправить себя автоматически - самое большее с подсказкой ay / n, от которой os-tinkerer может отказаться. Нашел исправление для моего случая - выполните вышеизложенное, затем выполните "yum-complete-транзакция --cleanup-only"
JosephK
8
Почему не просто cd /var/lib/rpm; db_recover? В большинстве случаев это гораздо менее ядерный вариант.
Крейг Рингер
3
Я нахожу sudo rpm --rebuilddbодин решает мое дело. Тем не менее всегда резервное копирование /var/lib/rpmдля безопасности.
alik
Для тех, кто все еще видит убитое сообщение при установке yum, просто перезапустите ваш сервер. Да, это отстой, чтобы перезапустить, чтобы получить что-то основное, как эта работа, но это было единственное, что работало для меня.
Нирмал
0

Спасибо, Алекс, твой ответ сработал для меня, кроме одного небольшого изменения, которое я должен был сделать.

rm -f /var/lib/rpm/__db*

возвращенные ошибки

rm: cannot remove `/var/lib/rpm/__db.001': Is a directory
rm: cannot remove `/var/lib/rpm/__db.002': Is a directory
rm: cannot remove `/var/lib/rpm/__db.004': Is a directory

поэтому я должен был с

rm -rf /var/lib/rpm/__db*
Ян Эллис
источник
2
Это не должно быть каталогами. Если вы видите это, то вы можете запустить fsckсвой раздел, чтобы убедиться, что у вас нет повреждений файла.
именно
0

Я попробовал выше, это не сработало

ниже работает нормально

# cd /var/lib
# tar -zcvf /var/preserve/rpmdb-$(date +%Y-%m-%d_%H-%M-%S).tar.gz rpm

Примечание. Эту резервную копию tar можно использовать, если при попытке восстановить базу данных RPM возникли проблемы.

Проверьте целостность файла Packages:

# cd /var/lib/rpm
# rm -f __db*      # to avoid stale locks
# /usr/lib/rpm/rpmdb_verify Packages

# mv Packages Packages.orig
# /usr/lib/rpm/rpmdb_dump Packages.orig | /usr/lib/rpm/rpmdb_load Packages


# rpm -vv --rebuilddb

Еще раз проверьте базу данных RPM:

# cd /var/lib/rpm
# /usr/lib/rpm/rpmdb_verify Packages
дворняжка
источник
0

Все, что мне нужно было сделать, это удалить два файла с расширением «.lock» и три файла, которые начинались с «__db».

# rm /var/lib/rpm/.dbenv.lock
# rm /var/lib/rpm/.rpm.lock
# rm /var/lib/rpm/__db*

После этого yum updateсработало.

isapir
источник