Поиск по сайту:

Как восстановить поврежденную базу данных RPM в CentOS


База данных RPM состоит из файлов в каталоге /var/lib/rpm/ в CentOS и других корпоративных дистрибутивах Linux, таких как . >RHEL, openSUSE, Oracle Linux и другие.

Если база данных RPM повреждена, RPM не будет работать правильно, поэтому обновления не могут быть применены к вашей системе. Вы сталкиваетесь с ошибками при обновлении пакетов в вашей системе через менеджер пакетов YUM. Худший сценарий — невозможность успешного выполнения команд rpm и yum.

Читайте также: 20 практических примеров команды RPM в Linux

Существует ряд факторов, которые могут привести к повреждению базы данных RPM, например незавершенные предыдущие транзакции, установка определенного стороннего программного обеспечения, удаление определенных пакетов и многие другие.

В этой статье мы покажем, как восстановить поврежденную базу данных RPM; таким образом вы можете восстановиться после повреждения базы данных RPM в CentOS. Для этого требуются привилегии пользователя root, в противном случае используйте команду sudo, чтобы получить эти привилегии.

Восстановить поврежденную базу данных RPM в CentOS

Прежде чем продолжить, начните с резервного копирования текущей базы данных RPM (она может понадобиться вам в будущем), используя следующие команды.

mkdir /backups/
tar -zcvf /backups/rpmdb-$(date +"%d%m%Y").tar.gz  /var/lib/rpm

Затем проверьте целостность файла метаданных главного пакета /var/lib/rpm/Packages; это файл, который необходимо перестроить, но сначала удалите файлы /var/lib/rpm/__db*, чтобы предотвратить устаревшие блокировки с помощью следующих команд.

rm -f /var/lib/rpm/__db*		
/usr/lib/rpm/rpmdb_verify /var/lib/rpm/Packages

Если вышеуказанная операция не удалась, то есть ошибки по-прежнему возникают, вам следует сбросить и загрузить новую базу данных. Также проверьте целостность только что загруженного файла Packages следующим образом.


cd /var/lib/rpm/
mv Packages Packages.back
/usr/lib/rpm/rpmdb_dump Packages.back | /usr/lib/rpm/rpmdb_load Packages
/usr/lib/rpm/rpmdb_verify Packages

Теперь, чтобы проверить заголовки базы данных, запросите все установленные пакеты, используя флаги -q и -a, и постарайтесь внимательно наблюдать за любыми ошибками, отправленными в . стандартная ошибка.


rpm -qa >/dev/null	#output is discarded to enable printing of errors only

И последнее, но не менее важное: перестройте базу данных RPM с помощью следующей команды: опция -vv позволяет отображать большое количество отладочной информации.

rpm -vv --rebuilddb

Используйте инструмент dcrpm для обнаружения и исправления базы данных RPM

Мы также обнаружили инструмент командной строки dcrpm (обнаружение и исправление rpm), используемый для выявления и исправления хорошо известных проблем, связанных с повреждением базы данных RPM. Это простой и удобный в использовании инструмент, который можно использовать без дополнительных опций. Для эффективного и надежного использования вам следует регулярно запускать его через cron.

Вы можете установить его из исходного кода; загрузите дерево исходного кода и установите его с помощью setup.py (который также должен получить зависимость psutil от pypi), как показано.

git clone https://github.com/facebookincubator/dcrpm.git
cd dcrpm
python setup.py install

После установки dcrpm запустите его, как показано.

dcrpm

Наконец, попробуйте еще раз запустить неудачную команду rpm или yum, чтобы убедиться, что все работает нормально.

Репозиторий dcrpm на Github: https://github.com/facebookincubator/dcrpm
Дополнительную информацию можно найти на странице восстановления базы данных RPM.

Вот и все! В этой статье мы объяснили, как восстановить поврежденную базу данных RPM в CentOS. Чтобы задать любые вопросы или поделиться своими мыслями об этом руководстве, воспользуйтесь формой обратной связи ниже.