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

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 /

Теги

 

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

Резервное копирование Atlassian JIRA через GUI

Резервную копию Atlassian JIRA можно сделать в Администрирование > Система > Импорт и Экспорт > Резервное копирование. Здесь вы сможете сделать резервное копирование содержимого базы данных в доступном формате XML.

Теги

Bitvise SSH Server для Windows

Bitvise SSH Server (WinSSHD) — SSH-сервер, разработанный специально для Windows. Позволяет на Windows машине организовать сервер Secure Shell Handling 2 (SSH2) и Secure FTP (SFTP). Отличается большим количеством настроек. Бесплатно для частного использования при выборе версии Personal Edition, но с ограничениями.

Haproxy на Ubuntu 20.04 LTS

Установим и настроим балансировщик haproxy на Ubuntu 20.04 LTS. Балансировать будем в режиме roundrobin порт TCP 25 на порты localhost TCP 26, 27, 28, 29, 30. На этих портах работает postfix в режиме multi-instance, сделаем единый 25 порт, который будет балансировать нагрузку между экземплярами почтового сервера.

Теги