ทำไมดัชนียัมเสียหาย?


10

แคชของยำเป็นครั้งคราวได้รับความเสียหายและเราเห็นข้อผิดพลาดเช่นนี้:

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

วิธีแก้ปัญหาคือrm -f /var/lib/rpm/__db*แล้วคำสั่ง "yum" ถัดไปจะสร้างข้อมูลใหม่

คำถามของฉันคืออะไรที่ทำให้เกิดสิ่งนี้ มีงานทั่วไปที่ละเว้นการล็อกหรือมีปัญหาอื่นที่ทำให้เกิดปัญหานี้หรือไม่?

เรามีเครื่อง CentOS หลายร้อยเครื่องและไม่มีรูปแบบที่เห็นปัญหานี้ อาจเป็นปัญหา "หนึ่งในล้าน" ซึ่งมีขนาดใหญ่มักจะเห็น

หมายเหตุ: ฉันรู้ว่านี่เป็นคำถามที่ "เปิดกว้าง" แต่ถ้าคำตอบพบสาเหตุฉันจะย้อนกลับและเปลี่ยนคำถามเป็นสิ่งที่ยอมรับได้มากกว่าซึ่งเกี่ยวข้องโดยตรงกับปัญหาเฉพาะ


ฉันดูเหมือนจะจำได้ว่าปีที่ผ่านมามีข้อบกพร่องบางอย่างที่ทำให้เรื่องนี้ เครื่องจักรทันสมัยหรือไม่?
Michael Hampton

เครื่อง CentOS หลายร้อยเครื่อง นี่สำหรับ Stackexchange หรือไม่ ฉันไม่คิดว่าพวกเขามีระบบลีนุกซ์จำนวนมาก
Zoredache

@Zoredache ส่วนใหญ่เป็นเสมือนจริง หลายคนไม่ได้อยู่ในสายการร้องขอการให้บริการโดยตรง
TomOnTime

คำตอบ:


6

ในกรณีทั่วไปสิ่งนี้จะเกิดขึ้นเมื่อ rpm (หรือ yum) ล่มเมื่ออัปเดต rpmdb ซึ่งเป็นที่เก็บคีย์ - ค่า Berkeley DB และมีความอ่อนไหวมาก เมื่อเกิดความผิดพลาดขึ้น rpmdb จะอยู่ในสถานะไม่สอดคล้องกันและเกิดข้อผิดพลาดนี้ขึ้น ไฟล์อื่น ๆ ทั้งหมด/var/lib/rpmมีข้อมูลเดียวกันแม้ว่าจะอยู่ในรูปแบบที่มีประสิทธิภาพน้อยกว่าดังนั้นฐานข้อมูลจึงถูกสร้างใหม่ได้อย่างง่ายดาย

ข้อบกพร่องที่น่าทึ่งสองประการที่คุณอาจพบในระบบ CentOS รุ่นเก่าอาจทำให้เกิดปัญหานี้ได้ ขนาดใหญ่เป็น "การแข่งขันที่น่ารังเกียจและลึกซึ้งในที่ใช้ร่วมกัน writeback หน้า mmap'ed" ตามที่ปรากฏในการเปลี่ยนแปลงที่ถูกคงเงียบ ๆ ในการปรับปรุงเคอร์เนลในปี 2007 สิ่งนี้นำเสนอตัวเองแตกต่างจากรายงานของคุณเล็กน้อย

หนึ่งที่คุณอาจจะเห็นจาก 2009ที่เกิดขึ้นเมื่อ PackageKit จะฆ่า yum ในช่วงเวลาที่ไม่เหมาะสมและยังได้รับการแก้ไข สิ่งนี้น่าจะส่งผลต่อระบบเดสก์ท็อปหรือเซิร์ฟเวอร์ด้วย GUI มากกว่า

ข้อบกพร่องทั้งหมดนี้มีมาก่อนสำหรับ EL 6 และคุณแทบจะไม่เคยเห็นสิ่งนี้เกิดขึ้นกับ EL 6 หรือ 7 และคุณไม่ควรดูว่าระบบ EL 5 ของคุณเป็นรุ่นล่าสุดหรือไม่ (ฉันไม่มีความคิดเกี่ยวกับ EL 4 ถ้าคุณมีหนึ่งให้ฆ่ามันก่อนที่มันจะแพร่กระจาย) ที่กล่าวว่าอะไรที่ทำให้ yum หรือ rpm ตายในขณะที่ทำงานกับ rpmdb อาจทำให้เกิด kill -9ซึ่งรวมถึงสิ่งที่คุณมักจะมองเห็นวันนี้รังสีคอสมิกสุ่มพลิกบิตหรือคนที่ได้รับความขยันด้วย

ใน RHEL 7 yum (shutdown inhibited)ดักสัญญาณมากขึ้นในช่วงระยะการทำธุรกรรมที่เกิดขึ้นจริงและคุณจะเห็นข้อความ สิ่งนี้จะช่วยป้องกันสถานการณ์ส่วนใหญ่ที่บางคนหรือบางสิ่งขัดขวางธุรกรรมและทำให้เกิดปัญหานี้


2
เดิมพันของฉันคือปัญหาคือใช้ "ฆ่า -9" overzealous ขอบคุณ!
TomOnTime
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.