yum Hatası: rpmdb açık başarısız oldu


42

Koşmaya çalışıyorum yum updateve bu hatayı çalıştırıyorum:

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

Sayfayı bu şekilde kontrol ettim ancak yayınlanması yum clean allaynı hatayı veriyor.

Bunu Nasıl Çözebilirim?

Yanıtlar:


84

Sorunumu bu şekilde düzelttim.

Bu oldukça dağınık bir durum. Bunu rpm veritabanını temizleyerek düzeltebilirsiniz. Riski en aza indirmek için, komutu /var/lib/rpm/kullanarak dosyaların bir yedeğini alın cp:

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

Bu sorunu çözmek için şunu deneyin:

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

Bu hatanın aşağıdaki yum komutuyla gittiğini doğrulayın

# yum update

Bu çözüm yum yerine dnf ile de çalışıyor gibi görünüyor.
saat

Bütün bunları yaptıktan sonra "tamamlanmamış işlemler kaldı ..." alıyorum ve sorunu yaratan kırık paketler gelecekteki kurulumları engellemeye devam ediyor. Bu nedenle, son kullanıcının neden bunlardan birini görmesi / yapması gerekiyor? Yum-db'nin bir sorunu varsa, otomatik olarak kendini temizlemesi / düzeltmesi gerekir - bir os-tinker'ın vazgeçmek isteyebileceği en fazla ay / n komutuyla. Davam için düzeltme buldum - yukarıdakileri yapın, daha sonra "yum-complete-process --cleanup-only" yapın
JosephK

8
Neden sadece değil cd /var/lib/rpm; db_recover? Çoğu durumda, bu bir nükleer seçeneğin çok altında.
Craig Ringer

3
sudo rpm --rebuilddbYalnız buluyorum davamı çözüyor. Yine de her zaman /var/lib/rpmgüvenli yedekleme .
44'te

Öldürülen mesajı hala yum kurulumunda görenler için sunucunuzu yeniden başlatın. Evet, bu şekilde çalışmak gibi basit bir şey elde etmek için yeniden başlamak berbat bir durum ama benim için işe yarayan tek şey buydu.
Nirmal

0

Teşekkürler Alex, cevabınız benim için yapmam gereken küçük bir değişiklikten başka işe yaramadı.

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

döndürülen hatalar

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

bu yüzden tekrarlanmam gerekti

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

2
Bunlar dizin olmamalıdır. Bunu görürseniz, fsckdosya bozulması olmadığından emin olmak için bölümünüzü çalıştırmak isteyebilirsiniz .
docwhat

0

Ben işe yaramadı yukarıdaki bir denedim

aşağıda iyi çalışıyor

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

Not: Bu katran yedeklemesi, RPM veritabanını kurtarma girişiminde sorun varsa kullanılabilir.

Packages dosyasının bütünlüğünü doğrulayın:

# 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

RPM veritabanını bir kez daha doğrulayın:

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

0

Tek yapmam gereken ".lock" uzantılı iki dosyayı ve "__db" ile başlayan üç dosyayı silmekti.

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

Ondan sonra yum updateçalıştı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.