kesalahan yum: buka rpmdb gagal

42

Saya mencoba untuk menjalankan yum updatedan saya menjalankan kesalahan ini:

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

Saya memeriksa halaman seperti ini tetapi menjalankan yum clean allmenjalankan kesalahan yang sama.

Bagaimana saya bisa memecahkan masalah ini?

Alex Jolig
sumber

Jawaban:

84

Ini adalah bagaimana saya memperbaiki masalah saya.

Ini situasi yang cukup berantakan. Anda dapat memperbaikinya dengan membersihkan basis data rpm. Untuk meminimalkan risiko, buat cadangan file dalam /var/lib/rpm/menggunakan cpperintah:

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

Untuk memperbaiki masalah ini, cobalah:

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

Verifikasi bahwa kesalahan telah terjadi dengan perintah yum berikut

# yum update
Alex Jolig
sumber
Solusi ini tampaknya bekerja dengan dnf, bukan yum juga.
Unhammer
Saya mendapatkan "sisa transaksi yang belum selesai .." setelah melakukan semua ini, dan paket rusak yang menciptakan masalah terus memblokir setiap instalasi di masa depan. Untuk itu, mengapa pengguna akhir perlu melihat / melakukan semua ini? Jika yum-db memiliki masalah, ia harus membersihkan / memperbaiki sendiri secara otomatis - dengan paling banyak ay / n prompt yang mungkin ingin di-os-tinkerer pilih. Menemukan perbaikan untuk kasus saya - lakukan di atas, lalu lakukan "yum-complete-transaksi --cleanup-only"
JosephK
8
Kenapa tidak adil cd /var/lib/rpm; db_recover? Dalam kebanyakan kasus itu jauh lebih sedikit dari opsi nuklir.
Craig Ringer
3
Saya menemukan sudo rpm --rebuilddbsendiri menyelesaikan kasus saya. Meskipun demikian selalu cadangan /var/lib/rpmuntuk aman.
alick
Bagi mereka yang masih melihat pesan terbunuh di instal yum, cukup restart server Anda. Ya, menyebalkan untuk memulai kembali untuk mendapatkan sesuatu yang mendasar seperti ini berfungsi, tetapi itu satu-satunya hal yang berhasil untuk saya.
Nirmal
0

Terima kasih Alex, jawaban Anda berhasil untuk saya, terlepas dari satu perubahan kecil yang harus saya lakukan.

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

kesalahan dikembalikan

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

jadi saya harus berulang dengan

rm -rf /var/lib/rpm/__db*
Ian Ellis
sumber
2
Itu seharusnya bukan direktori. Jika Anda melihatnya, maka Anda mungkin ingin menjalankan fsckdi partisi Anda untuk memastikan Anda tidak memiliki file korupsi.
docwhat
0

Saya mencoba yang di atas itu tidak berhasil

di bawah ini berfungsi dengan baik

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

Catatan: Cadangan tar ini dapat digunakan jika upaya untuk memulihkan basis data RPM memiliki masalah.

Verifikasi integritas file Paket:

# 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

Sekali lagi memverifikasi basis data RPM:

# cd /var/lib/rpm
# /usr/lib/rpm/rpmdb_verify Packages
Anjing kampung
sumber
0

Yang harus saya lakukan adalah menghapus dua file dengan ekstensi ".lock", dan tiga file yang dimulai dengan "__db".

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

Setelah itu yum updateberhasil.

isapir
sumber