Terkadang cache yum rusak dan kami melihat kesalahan seperti ini:
error: db3 error(-30974) from dbenv->failchk: DB_RUNRECOVERY: Fatal error, run database recovery
error: cannot open Packages index using db3 - (-30974)
error: cannot open Packages database in /var/lib/rpm
Solusinya adalah rm -f /var/lib/rpm/__db*
dan kemudian perintah "yum" berikutnya meregenerasi data.
Pertanyaan saya adalah: apa yang menyebabkan ini? Apakah ada beberapa tugas umum yang mengabaikan kunci atau memiliki masalah lain yang menyebabkan ini?
Kami memiliki ratusan mesin CentOS dan tidak ada pola yang melihat masalah ini. Ini bisa menjadi masalah "satu dalam sejuta", yang dalam skala besar sering terlihat.
CATATAN: Saya menyadari ini adalah pertanyaan yang sangat "terbuka", tetapi jika suatu jawaban menemukan penyebabnya, saya akan kembali dan mengubah pertanyaan itu menjadi sesuatu yang lebih kanonik yang berhubungan langsung dengan masalah spesifik.
centos
yum
rpm
data-consistency
TomOnTime
sumber
sumber
Jawaban:
Dalam kasus umum, ini terjadi ketika rpm (atau yum) mogok saat memperbarui rpmdb, yang merupakan penyimpanan nilai kunci Berkeley DB, dan sangat sensitif. Ketika crash seperti itu terjadi, rpmdb dibiarkan dalam keadaan tidak konsisten dan kesalahan ini terjadi. Semua file lain di
/var/lib/rpm
dalamnya berisi informasi yang sama, meskipun dalam format yang kurang efisien, sehingga database mudah dibangun kembali.Dua bug penting yang mungkin Anda lihat pada sistem CentOS yang lebih lama dapat menyebabkan hal ini. Yang besar , "ras jahat dan halus dalam penulisan kembali halaman mmap'ed bersama" seperti yang muncul di changelog, diam - diam diperbaiki dalam pembaruan kernel pada tahun 2007 . Yang ini menyajikan dirinya sedikit berbeda dari laporan Anda.
Yang mungkin Anda lihat dari 2009 terjadi ketika PackageKit akan membunuh yum pada waktu yang tidak tepat, dan juga diperbaiki . Ini akan lebih mungkin untuk mempengaruhi sistem desktop atau server dengan GUI.
Semua bug ini ada sebelum EL 6, dan Anda seharusnya hampir tidak pernah melihat ini terjadi pada EL 6 atau 7, dan Anda juga tidak boleh melihatnya jika sistem EL 5 Anda terbaru. (Saya tidak tahu tentang EL 4. Jika Anda memilikinya, bunuh sebelum menyebar.) Yang mengatakan, apa pun yang menyebabkan yum atau rpm mati saat bekerja dengan rpmdb dapat menyebabkannya. Ini termasuk apa yang paling mungkin Anda lihat hari ini, sinar kosmik acak membalik bit, atau seseorang yang terlalu bersemangat
kill -9
.Di RHEL 7, yum menjebak lebih banyak sinyal selama proses transaksi aktual, dan Anda akan melihat pesan itu
(shutdown inhibited)
. Ini harus membantu mencegah sebagian besar situasi di mana seseorang atau sesuatu mengganggu transaksi dan menyebabkan masalah ini.sumber