Wyszukiwanie w witrynie

Jak odbudować uszkodzoną bazę danych RPM w CentOS


Baza danych RPM składa się z plików znajdujących się w katalogu /var/lib/rpm/ w CentOS i innych dystrybucjach Linuksa dla przedsiębiorstw, takich jak RHEL, openSUSE, Oracle Linux i nie tylko.

Jeśli baza danych RPM jest uszkodzona, RPM nie będzie działać poprawnie, w związku z czym nie będzie można zastosować aktualizacji w systemie. Podczas aktualizacji pakietów w systemie za pomocą menedżera pakietów YUM pojawiają się błędy. Najgorszym scenariuszem jest niemożność pomyślnego uruchomienia jakichkolwiek poleceń RPM i yum.

Przeczytaj także: 20 praktycznych przykładów polecenia RPM w systemie Linux

Istnieje wiele czynników, które mogą prowadzić do uszkodzenia bazy danych RPM, takich jak niekompletne poprzednie transakcje, instalacja określonego oprogramowania stron trzecich, usunięcie określonych pakietów i wiele innych.

W tym artykule pokażemy, jak odbudować uszkodzoną bazę danych RPM; w ten sposób możesz odzyskać dane po uszkodzeniu bazy danych RPM w CentOS. Wymaga to uprawnień użytkownika root. W przeciwnym razie użyj polecenia sudo, aby uzyskać te uprawnienia.

Odbuduj uszkodzoną bazę danych RPM w CentOS

Najpierw zacznij od utworzenia kopii zapasowej bieżącej bazy danych RPM, a następnie kontynuuj (możesz jej potrzebować w przyszłości), używając następujących poleceń.

mkdir /backups/
tar -zcvf /backups/rpmdb-$(date +"%d%m%Y").tar.gz  /var/lib/rpm

Następnie sprawdź integralność pliku metadanych pakietu głównego /var/lib/rpm/Packages; jest to plik wymagający przebudowania, ale najpierw usuń pliki /var/lib/rpm/__db*, aby zapobiec przestarzałym blokadom, używając następujących poleceń.

rm -f /var/lib/rpm/__db*		
/usr/lib/rpm/rpmdb_verify /var/lib/rpm/Packages

Jeżeli powyższa operacja się nie powiedzie, co oznacza, że nadal będziesz napotykać błędy, powinieneś zrzucić i załadować nową bazę danych. Sprawdź także integralność świeżo załadowanego pliku Packages w następujący sposób.


cd /var/lib/rpm/
mv Packages Packages.back
/usr/lib/rpm/rpmdb_dump Packages.back | /usr/lib/rpm/rpmdb_load Packages
/usr/lib/rpm/rpmdb_verify Packages

Teraz, aby sprawdzić nagłówki bazy danych, wykonaj zapytanie do wszystkich zainstalowanych pakietów przy użyciu flag -q i -a i spróbuj uważnie obserwować wszelkie błędy wysyłane do stderror.


rpm -qa >/dev/null	#output is discarded to enable printing of errors only

Na koniec odbuduj bazę danych RPM za pomocą następującego polecenia. Opcja -vv pozwala wyświetlić wiele informacji debugowania.

rpm -vv --rebuilddb

Użyj narzędzia dcrpm do wykrycia i skorygowania bazy danych RPM

Odkryliśmy także narzędzie wiersza poleceń dcrpm (wykryj i popraw obroty na minutę), służące do identyfikowania i naprawiania dobrze znanych problemów związanych z uszkodzeniem bazy danych RPM. Jest to proste i łatwe w użyciu narzędzie, które można uruchomić bez opcji. Aby zapewnić efektywne i niezawodne użytkowanie, należy go regularnie uruchamiać poprzez cron.

Możesz zainstalować go ze źródła; pobierz drzewo źródłowe i zainstaluj je za pomocą pliku setup.py (który powinien również pobrać zależność psutil z pypi), jak pokazano.

git clone https://github.com/facebookincubator/dcrpm.git
cd dcrpm
python setup.py install

Po zainstalowaniu dcrpm uruchom go jak pokazano.

dcrpm

Na koniec spróbuj ponownie uruchomić nieudane polecenie RPM lub yum, aby sprawdzić, czy wszystko działa poprawnie.

repozytorium dcrpm Github: https://github.com/facebookincubator/dcrpm
Więcej informacji można znaleźć na stronie odzyskiwania bazy danych RPM.

To wszystko! W tym artykule wyjaśniliśmy, jak odbudować uszkodzoną bazę danych RPM w CentOS. Aby zadać pytania lub podzielić się przemyśleniami na temat tego przewodnika, skorzystaj z poniższego formularza opinii.