Перейти к основному содержанию

RPM — Thread died in Berkeley DB library

Oracle Linux

Свежий баг. Редкий, но встречается. У меня случился на Oracle Linux.

Симптомы только косвенные. Началась утечка CPU на виртуальной машине. Прошло несколько дней, гипервизор стал жаловаться на процессор:

cpu

Смотрю статистику использования CPU гипервизора и вижу такую картину:

cpu

Видно утечку, ищем виновника.

linux

Графики производительности помогают легко найти виртуальную машину с утечкой CPU. Заглянем ей в консоль.

cpu

Опа, процессоры сожраны запросами к RPM. Выполняю:

rpm -qa

Запрос зависает, Ctrl + C со скрежетом убиваем текущий процесс. Заново делаю тот же запрос, вот и виновник торжества:

ошибка: rpmdb: BDB0113 Thread/process 9817/139781811808320 failed: BDB1507 Thread died in Berkley DB library
ошибка: ошибка(5)  db_30973 из dbenv->failchk: BDB0087 DB_RUNRECOVERY: Fatal error, run database recovery
ошибка: невозможно открыть индекс Packages используя db5 -  (-30973)

rpm

Быстрое решение проблемы

Пересоздаём базу RPM.

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

Немного терпения.

cpu

С облегчением.

cpu

Еще больше вариантов восстановления

http://wiki.rosalab.ru/ru/index.php/Если_упала_база_RPM

  1. rm -f /var/lib/rpm/__db.*
    /usr/lib/rpm/bin/rpmdbchk
    
  2. db52_recover -vh /var/lib/rpm
  3. perl -MURPM -e 'URPM::DB::convert("/", "btree", 1, 1)'
  4. rm -f /var/lib/rpm/__db*
    rpm -vv --rebuilddb
  5. urpmi.recover --list-safe
    # (найти стабильное состояние и откатить на нужное количество транзакций, обозначенных датами)
    urpmi.recover --transactions --rollback 3
    
  6. # копируем из /var/log последний здоровый rpmpkgs в удобное место.
    cp /var/log/rpmpkgs /home/username
    cp /var/lib/rpm/ /var/lib/rpm-stored
    # чистим
    rm -f /var/lib/rpm/__db*
    rm -f /var/lib/rpm/Packages
    rm -f /var/lib/rpm/log/log*
    # создаём БД
    rpm -vv --rebuilddb
    # проверим
    urpmi wget,urpmi
    # скачаем все пакеты
    cat /home/username/rpmpkgs | xargs urpmi --no-install
    # поставим
    cat /home/username/rpmpkgs | xargs urpmi --justdb
    # или
    cat /home/username/rpmpkgs | xargs rpm -i -v --nodeps --noscripts --notriggers --justdb --excludepath /

Теги

 

Похожие материалы

Putty — SOCKS5 прокси через SSH-туннель

Однажды один из IP адресов на работе попал в SORBS SPAM. IP адрес можно выкинуть из спам листа, если зайти на сайт sorbs.net именно с этого IP адреса. Но у меня на компе другой внешний IP адрес, а на почтовике с нужным IP стоит linux и нет возможности запустить браузер. Сделаем с помощью putty SSH туннель. 

Теги

Postfix с SMTP аутентификацией Cyrus

Понадобилось сделать Postfix с SMTP аутентификацией. Раньше не настраивал, перерыл кучу статей. Очень сумбурно всё изложено, поэтому пришлось написать свой вариант. Если кто-то знает хорошую инструкцию по данному вопросу без лишней воды — пишите в комментариях.

Теги