Mengapa indeks yum rusak?

10

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.

TomOnTime
sumber
Saya ingat beberapa tahun yang lalu ada beberapa bug yang menyebabkan ini. Apakah mesin-mesin tersebut mutakhir?
Michael Hampton
Ratusan mesin CentOS? Apakah ini untuk Stackexchange? Saya tidak berpikir mereka memiliki banyak sistem Linux.
Zoredache
@Zoredache kebanyakan virtual. Banyak yang tidak sejalan dengan permintaan melayani, tetapi banyak yang.
TomOnTime

Jawaban:

6

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/rpmdalamnya 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.

Michael Hampton
sumber
2
Taruhan saya adalah bahwa masalahnya adalah penggunaan "kill -9" yang terlalu bersemangat. Terima kasih!
TomOnTime