[RH Knowledgebase] Как восстановить базу данных RPM
Перевод заметки из базы знаний Red Hat: DOC-6904 (https://access.redhat.com/kb/docs/DOC-6904)
Иногда база данных RPM "залипает". Одной из причин этой проблемы - убийство процесса, работающего с базой данных, что приводит к неверной информации о состоянии блокировки и ограничению доступа последующих процессов к базе данных. Так что, необходимо убедиться, что процесс действительно завис до того, как убить его - если процесс использует большое количество процессорного времени, то возможно, что он продолжает выполнять полезную работу. Информация о состоянии блокировки должна быть восстановлена вручную, чтобы устранить "зависание" и позволить rpm нормально функционировать.
"Убийство" процесса (иногда это происходит при пропадании электропитания, иногда происходит в случае падения стороннего программного обеспечения без очистки информации о состоянии блокировки при выходе, иногда из-за нетерпеливого администратора) может привести к небольшим повреждениям базы данных RPM 'SleepyCat db'. В таком случае, необходимо удалить файлы, хранящие информацию о состоянии блокировки (эти файлы начинают с двух нижних подчеркиваний, например, "__db"). Так как эти файлы автоматически создаются заново при отсутствии, это достаточно безопасная операция.
Предупреждение: очень важно убедиться, что никакой запущенных процесс не обращается к базе данных RPM, перед тем, как удалять '/var/lib/rpm/db*'. Если такая проверка затруднена, удаление db* должно производиться в single user mode. В действительности, init-скрипты RHEL делают это автоматически, так перезагрузки обычно достаточно.
Далее с осторожностью проделайте следующее:
Перед попыткой восстановления базы, СНАЧАЛА сделайте резерную копию.
# cd /var/lib # tar zcvf /var/preserve/rpmdb-[today's date].tar.gz rpm
Проверьте целостность с помощью
# cd /var/lib/rpm # rm -f __db* # /usr/lib/rpm/rpmdb_verify PackagesДалее проделайте следующее:
# mv Packages Packages.orig
# /usr/lib/rpm/rpmdb_dump Packages.orig | /usr/lib/rpm/rpmdb_load Packages # /usr/lib/rpm/rpmdb_verify Packages # rpm -qaИ в итоге восстановите базу данных
# rpm -vv --rebuilddb
Дополнительная информация: Подробные заметки о восстановлении базы данных RPM можно найти здесь: http://people.redhat.com/berrange/notes/rpmrecovery.html