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-завершені транзакції - тільки
чистка

8
Чому б не просто cd /var/lib/rpm; db_recover? У більшості випадків це набагато менше ядерного варіанту.
Крейг Рінгер

3
Я знаходжу sudo rpm --rebuilddbсамостійно вирішує свою справу. Тим не менш завжди резервне копіювання /var/lib/rpmдля безпечного.
alick

Для тих, хто все ще бачить вбитий повідомлення під час встановлення, просто перезавантажте сервер. Так, досить запустити перезапуск, щоб отримати щось базове, як це працююче, але це було єдине, що працювало для мене.
Nirmal

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

Примітка. Ця резервна копія смоли може бути використана, якщо в спробі відновлення бази даних RPM є проблеми.

Перевірте цілісність пакету файлів:

# 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працювали.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.