Lỗi yum: không thể mở được


42

Tôi đang cố chạy yum updatevà tôi đang chạy lỗi này:

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

Tôi đã kiểm tra trang như thế này nhưng chạy yum clean allchạy cùng một lỗi.

Làm sao tôi có thể giải quyết việc này?

Câu trả lời:


84

Đây là cách tôi khắc phục vấn đề của mình.

Đây là tình huống khá lộn xộn. Bạn có thể khắc phục điều này bằng cách dọn dẹp cơ sở dữ liệu vòng / phút. Để giảm thiểu rủi ro, hãy tạo một bản sao lưu các tệp /var/lib/rpm/bằng cách sử dụng cplệnh:

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

Để khắc phục sự cố này, hãy thử:

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

Xác minh rằng lỗi đã xảy ra với lệnh yum sau đây

# yum update

Giải pháp này dường như cũng hoạt động với dnf thay vì yum.
unhammer

Tôi nhận được "các giao dịch chưa hoàn thành còn lại .." sau khi thực hiện tất cả điều này và các gói bị hỏng tạo ra sự cố tiếp tục chặn bất kỳ cài đặt nào trong tương lai. Đối với vấn đề đó, tại sao người dùng cuối cần phải xem / thực hiện bất kỳ điều này? Nếu yum-db có vấn đề, nó sẽ tự động xóa / sửa lỗi - với nhiều nhất là dấu nhắc ay / n mà một os-tinkerer có thể muốn từ chối. Tìm thấy bản sửa lỗi cho trường hợp của tôi - thực hiện các thao tác trên, sau đó thực hiện "yum-hoàn thành giao dịch - chỉ thanh toán"
JosephK

8
Tại sao không chỉ cd /var/lib/rpm; db_recover? Trong hầu hết các trường hợp, đó là một lựa chọn hạt nhân ít hơn nhiều.
Craig Ringer

3
Tôi tìm thấy sudo rpm --rebuilddbmột mình giải quyết trường hợp của tôi. Tuy nhiên luôn luôn sao lưu /var/lib/rpmcho an toàn.
alick

Đối với những người vẫn thấy thông báo bị giết khi cài đặt yum, chỉ cần khởi động lại máy chủ của bạn. Vâng, thật tệ khi khởi động lại để có được thứ gì đó cơ bản như thế này hoạt động, nhưng đó là điều duy nhất làm việc cho tôi.
Nertal

0

Cảm ơn Alex, câu trả lời của bạn đã làm việc cho tôi ngoài một thay đổi nhỏ mà tôi phải thực hiện.

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

trả lại lỗi

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

vì vậy tôi đã phải tái diễn với

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

2
Những người không nên là thư mục. Nếu bạn thấy điều đó, thì bạn có thể muốn chạy fscktrên phân vùng của mình để đảm bảo bạn không bị hỏng tập tin.
docwhat

0

Tôi đã thử cái ở trên nó không hoạt động

dưới đây hoạt động tốt

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

Lưu ý: Bản sao lưu tar này có thể được sử dụng nếu nỗ lực khôi phục cơ sở dữ liệu RPM có vấn đề.

Xác minh tính toàn vẹn của tệp Gói:

# 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

Một lần nữa xác minh cơ sở dữ liệu RPM:

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

0

Tất cả những gì tôi phải làm là xóa hai tệp có phần mở rộng ".lock" và ba tệp bắt đầu bằng "__db".

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

Sau đó, yum updatelàm việc.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.