yum Erro: falha no rpmdb aberto


42

Estou tentando executar yum updatee estou executando este erro:

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

Eu verifiquei uma página como esta, mas a execução yum clean allexecuta o mesmo erro.

Como posso resolver isso?

Respostas:


84

Foi assim que resolvi o meu problema.

Esta é uma situação bastante confusa. Você pode corrigir isso limpando o banco de dados rpm. Para minimizar o risco, faça um backup dos arquivos /var/lib/rpm/usando o cpcomando:

mkdir /root/backups.rpm.mm_dd_yyyy/
cp -avr /var/lib/rpm/ /root/backups.rpm.mm_dd_yyyy/

Para corrigir esse problema, tente:

# rm -f /var/lib/rpm/__db*
# db_verify /var/lib/rpm/Packages
# rpm --rebuilddb
# yum clean all

Verifique se o erro foi com o seguinte comando yum

# yum update

Esta solução parece funcionar com dnf em vez de yum também.
unhammer

Eu recebo "transações inacabadas restantes .." depois de fazer tudo isso, e os pacotes quebrados que criaram o problema continuam a bloquear quaisquer instalações futuras. Por esse motivo, por que o usuário final precisaria ver / fazer isso? Se o yum-db tiver um problema, ele deverá se limpar / corrigir automaticamente - com no máximo um prompt ay / n do qual um administrador de sistemas pode querer desativar. Encontrado a correção para o meu caso - que o anterior, então faça "yum-complete-transaction --cleanup-only"
JosephK

8
Por que não apenas cd /var/lib/rpm; db_recover? Na maioria dos casos, isso é muito menos uma opção nuclear.
Craig Ringer

3
Acho que sudo rpm --rebuilddbsozinho resolve meu caso. No entanto, sempre faça backup /var/lib/rpmpor segurança.
alick

Para quem ainda vê a mensagem morta no yum install, basta reiniciar o servidor. Sim, é uma merda reiniciar para obter algo básico como este funcionando, mas essa foi a única coisa que funcionou para mim.
Nirmal

0

Obrigado Alex, sua resposta funcionou para mim além de uma pequena alteração que tive que fazer.

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

erros retornados

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

então eu tive que recuar com

rm -rf /var/lib/rpm/__db*

2
Esses não devem ser diretórios. Se fsckvir isso, convém executar na sua partição para garantir que você não tenha corrupção de arquivos.
docwhat

0

Eu tentei o acima não funcionou

abaixo funciona bem

# cd /var/lib
# tar -zcvf /var/preserve/rpmdb-$(date +%Y-%m-%d_%H-%M-%S).tar.gz rpm

Nota: Esse backup tar pode ser usado se a tentativa de recuperar o banco de dados RPM tiver problemas.

Verifique a integridade do arquivo Packages:

# 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

Mais uma vez, verifique o banco de dados do RPM:

# cd /var/lib/rpm
# /usr/lib/rpm/rpmdb_verify Packages

0

Tudo o que eu precisava fazer era excluir os dois arquivos com a extensão ".lock" e os três arquivos iniciados com "__db".

# rm /var/lib/rpm/.dbenv.lock
# rm /var/lib/rpm/.rpm.lock
# rm /var/lib/rpm/__db*

Depois disso, yum updatefuncionou.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.