ข้อผิดพลาด yum: rpmdb ที่เปิดล้มเหลว


42

ฉันกำลังพยายามเรียกใช้yum updateและฉันกำลังเรียกใช้ข้อผิดพลาดนี้:

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

ฉันตรวจสอบหน้าเว็บเช่นนี้แล้วแต่การรันyum clean allรันข้อผิดพลาดเดียวกัน

ฉันจะแก้ปัญหานี้ได้อย่างไร

คำตอบ:


84

นี่คือวิธีที่ฉันแก้ไขปัญหาของฉัน

นี่เป็นสถานการณ์ที่ค่อนข้างยุ่ง คุณสามารถแก้ไขได้โดยล้างฐานข้อมูลรอบต่อนาที เพื่อลดความเสี่ยงให้ทำการสำรองไฟล์ในการ/var/lib/rpm/ใช้cpคำสั่ง:

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

หากต้องการแก้ไขปัญหานี้ให้ลอง:

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

ตรวจสอบว่าข้อผิดพลาดได้หายไปด้วยคำสั่ง yum ต่อไปนี้

# yum update

วิธีนี้ดูเหมือนว่าจะทำงานกับ dnf แทน yum เช่นกัน
unhammer

ฉันได้รับ "การทำธุรกรรมที่ยังไม่เสร็จ .. " หลังจากทำสิ่งนี้ทั้งหมดและแพ็คเกจที่เสียหายที่สร้างปัญหายังคงบล็อกการติดตั้งในอนาคต สำหรับเรื่องนั้นเหตุใดผู้ใช้ปลายทางจึงต้องเห็น / ทำสิ่งนี้ หาก yum-db มีปัญหาก็ควรทำความสะอาด / แก้ไขตัวเองโดยอัตโนมัติ - ด้วยพรอมต์ ay / n ที่สุดซึ่งผู้ใช้ os-tinkerer อาจต้องการยกเลิก พบการแก้ไขสำหรับกรณีของฉัน - ทำข้างต้นจากนั้นทำ "yum-complete-transaction --cleanup-only"
JosephK

8
ทำไมไม่เป็นเช่นนั้นcd /var/lib/rpm; db_recover? ในกรณีส่วนใหญ่นั้นมีตัวเลือกน้อยกว่านิวเคลียร์
Craig Ringer

3
ฉันพบsudo rpm --rebuilddbคนเดียวแก้ปัญหากรณีของฉัน อย่างไรก็ตามการสำรองข้อมูล/var/lib/rpmเพื่อความปลอดภัยเสมอ
alick

สำหรับผู้ที่ยังคงเห็นข้อความถูกฆ่าเมื่อติดตั้งยัมเพียงรีสตาร์ทเซิร์ฟเวอร์ของคุณ ใช่มันยากที่จะรีสตาร์ทเพื่อให้ได้สิ่งพื้นฐานเช่นนี้ แต่มันเป็นสิ่งเดียวที่เหมาะกับฉัน
Nirmal

0

ขอบคุณอเล็กซ์คำตอบของคุณใช้ได้กับฉันนอกเหนือจากการเปลี่ยนแปลงเล็กน้อยที่ฉันต้องทำ

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

ส่งคืนข้อผิดพลาด

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

ดังนั้นฉันจึงต้องชดใช้ด้วย

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

2
สิ่งเหล่านั้นไม่ควรเป็นไดเรกทอรี หากคุณเห็นว่าเป็นเช่นนั้นคุณอาจต้องการเรียกใช้fsckบนพาร์ติชันของคุณเพื่อให้แน่ใจว่าคุณไม่มีไฟล์เสียหาย
docwhat

0

ฉันลองข้างต้นมันใช้งานไม่ได้

ด้านล่างใช้งานได้ดี

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

หมายเหตุ: การสำรองข้อมูล tar นี้สามารถใช้หากความพยายามในการกู้คืนฐานข้อมูล RPM มีปัญหา

ตรวจสอบความถูกต้องของไฟล์แพคเกจ:

# 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 อีกครั้ง:

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

0

สิ่งที่ฉันต้องทำคือลบไฟล์ทั้งสองด้วยนามสกุล ".lock" และไฟล์ทั้งสามที่ขึ้นต้นด้วย "__db"

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

หลังจากนั้นก็yum updateทำงาน

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