Usunąłem niektóre pliki /var/lib/dpkg/
, a mianowicie:
/var/lib/dpkg/status
/var/lib/dpkg/available
/var/lib/dpkg/info/*
Rozumiem, że Debian używa tych plików do przechowywania niektórych informacji o zainstalowanych pakietach. Teraz, gdy to zrobię apt-get update
, pojawia się następujący błąd:
Reading package lists... Error!
E: Could not open file /var/lib/dpkg/status - open
(2: No such file or directory)
E: The package lists or status file could not be parsed or opened.
Jak rozumiem FHS , pliki w nim zlokalizowane /var
nie powinny mieć krytycznego znaczenia dla systemu. W dalszej kolejności powinny to być pliki tymczasowe, dzienniki, pamięci podręczne i tym podobne.
Czy istnieje zatem sposób na odtworzenie usuniętych plików?
apt
package-management
directory-structure
dpkg
Martin Vegter
źródło
źródło
/var/lib/dpkg/info
są również dość ważne. Źle zrozumiałeś FHS i AFAIK jedynymi ścieżkami odzyskiwania są (a) przywrócenie z kopii zapasowej lub (b) ponowna instalacja.Odpowiedzi:
Jeśli spojrzysz na cel / var podany w Hierarchii Standardów Systemu Plików , powie:
Pamiętaj, że pliki „przejściowe i tymczasowe” to tylko jedna z rzeczy, które zawiera. Zawiera także „katalogi i pliki buforowania” oraz „dane administracyjne i rejestrujące”. Usunąłeś krytyczne „dane administracyjne”.
Następnie wyjaśnia, dlaczego
/var
istnieje:To jest najważniejsze
/var
: zmiany w nim danych, w przeciwieństwie do/usr
(które zmieniają się tylko po dodaniu / usunięciu / aktualizacji oprogramowania).Dalsze sekcje wyjaśniają różne podkatalogi
/var
; na przykład/var/lib
(gdzie pliki, które usunąłeś, były obecne) zawierają „informacje o stanie dotyczące aplikacji lub systemu”, zdefiniowane jako „dane, które programy modyfikują podczas działania i które dotyczą jednego określonego hosta”.Ty naprawdę nie należy usuwać pliki, nie wiedząc, co jest specyficzne dla pliku. Z plikami usunięte, chyba że masz kopię zapasową tych plików, myślę, że jedyną rzeczą do zrobienia jest zrobić kopię zapasową
/home
,/etc
itd. I ponownie zainstalować. Dopóki tego nie zrobisz, nie będziesz mógł używaćdpkg
(i APT itp.). Poza tym system powinien nadal działać.źródło
apt-get update
odbuduje dostępne, jak sądzę. Informacje / rzeczy pochodzą z każdego zainstalowanego pakietu, ale także odzwierciedlają historię, przynajmniej w przypadku starych plików conf ... ale prawdopodobnie można uniknąć kopiowania z tego samego komputera z pakietami)/var/lib
Informacje o stanie. Trwałe dane modyfikowane przez uruchamiane programy, np. Bazy danych, metadane systemu pakowania itp.”Nie można „odtworzyć”
/var/lib/dpkg/status
w tym sensie, że wystarczy uruchomić polecenie, a plik pojawia się magicznie. Nie. Musisz użyć kopii zapasowej pliku i nauczyć się, jak nie usuwać elementów/var/lib
katalogu:To da ci status paczki z dnia poprzedniego. Zacznijcie modlić się, żeby nie złamało to nic innego.
źródło
/var/backups
, istnieje wiele kopii./var/backups/dpkg.status.0
?Pliki znajdujące się w
/var
są bardzo krytyczne dla systemu. Na przykład,/var/mail
czy/var/spool/mail
zawiera e-mail użytkowników; nie usunąłbyś tego więcej niż rozpaliłbyś ogień w skrzynce pocztowej sąsiada. Są to tylko pliki w niektórych podkatalogach,/var
które zawierają pliki, które są mniej lub bardziej przejściowe: pliki dziennika/var/log
, pamięci podręczne, które zwykle można odtworzyć/var/cache
, pliki tymczasowe (których nie należy usuwać, gdy są używane!)/var/tmp
.Dane wejściowe
/var/lib
mogą być dość krytyczne. Na przykład MySQL jest zwykle skonfigurowany do/var/lib/mysql
domyślnego przechowywania baz danych : jeśli go usuniesz, wyczyścisz bazy danych. Dpkg również umieszcza własne bazy danych/var/lib
;/var/lib/dpkg/status
jest jeden./var/lib/dpkg/status
zawiera informacje o zainstalowanych pakietach. Jeśli to wyczyściłeś, powinieneś przywrócić go z kopii zapasowej. Jeśli twoja kopia zapasowa nie jest w pełni aktualna, sprawdź dzienniki ostatnich manipulacji pakietami pod/var/log/apt
i wewnątrz/var/log/dpkg.log
. Najpierw musisz utworzyć ten plikdpkg
./var/lib/dpkg/available
jest zbudowany z danych pobranych z Internetu.apt-get update
powinien go odbudować./var/lib/dpkg/info
zawiera pliki dostarczane z pakietami Debiana. Możesz przywrócić te pliki po prostu ponownie instalując pakiety. Oczywiście potrzebujesz do tego listy zainstalowanych pakietów. Po przywróceniu/var/lib/dpkg/status
możesz wyodrębnić stamtąd listę pakietów.Jeśli się zgubiłeś
/var/lib/dpkg/status
, możesz być w stanie odtworzyć go, tworząc pusty plik, a następnie uruchamiając goapt-get install --reinstall
na liście pakietów. Jednym z miejsc, w których zapisywana jest również lista pakietów, jest to/var/lib/apt/extended_states
, przynajmniej jeśli kiedykolwiek używałeś APT do instalowania pakietów (w przeciwieństwie dodpkg
bezpośredniego) - użyj tego pliku zamiast/var/lib/dpkg/status
int powyższej komendy. Jeśli to również usunąłeś, możesz odbudować przybliżoną listę pakietów$(cd /usr/share/doc && ls)
, ponieważ większość pakietów tworzy wpis w/usr/share/doc
. Jest chyba kilka wyjątków.Nie proś o pomoc dotyczącą zarządzania pakietami w tym systemie. Odzyskiwanie po usunięciu plików krytycznych dla systemu nie jest nauką ścisłą. Jeśli nie można przywrócić z kopii zapasowych, należy jak najszybciej zainstalować nowy, czysty system.
źródło
/var/lib/dpkg/available
Mogą być odtworzone z danych apt. Najłatwiejszy sposób, w jaki to zrobiłem, to użyciedselect
i wybranie aktualizacji. Spodziewam się, że to zadziała tylko, jeśli wybrałeś jako metodę aktualizacji. Wydaje się,dselect
że:Zauważ jednak, że rzeczy mogły się zmienić od czasu Debiana sarge.
Istnieją sztuczki do odtworzenia w
/var/lib/dpkg/status
oparciu o fakt, że każdy pakiet jest wymagany, aby dodać katalog do/usr/share/doc
katalogu. Zobacz post na http://linuxmafia.com/faq/Debian/package-database-rebuild.html . Przedstawiono skrypt, który używa przefiltrowanej listy / usr / share / doc do utworzenia listy zainstalowanych pakietów, a następnie ponownie je wszystkie instaluje.źródło
Przypuszczam, że możesz odtworzyć plik pusty, a następnie zrobić apt-get install długą listę, zakładając, że wiesz, co zainstalowałeś po raz pierwszy.
Mam starożytny skrypt, który robi to w zasadzie z najmniejszego zestawu pakietów, które można uruchomić apt-get. Podczas korzystania z niego ostatecznie zgłosiłem dziesiątki niezadeklarowanych zależności.
Jeśli nie wiesz wszystkiego, co zainstalowałeś, zainstaluj ponownie system.
źródło
W Linux Mint 17 napotkałem podobny problem z brzmieniem. Usunąłem pliki i znalazłem się w sytuacji, w której „Administracja -> Menedżer aktualizacji” po prostu nie wyglądał na szczęśliwego .......
Rozwiązaniem, które działało dla mnie, było utworzenie katalogu o nazwie „dpkg” zgodnie z komunikatem o błędzie i utworzenie w nim pustego pliku o nazwie „status”.
Następnie uruchomiłem Menedżera aktualizacji.
To zadziałało dla mnie :-)
źródło
Jeśli masz inne konta użytkowników niż „roo”, możesz spróbować apt-get dist-upgrade z jednego z nich. Apt pobierze archiwa, ale opóźni się przy instalacji z powodu niektórych brakujących katalogów w / var /. Katalogi zostaną wyświetlone. utwórz je i uruchom ponownie apt-get dist-upgrade. incase ich utworzenie kończy się niepowodzeniem z alternatywnego dziennika konta z powrotem do katalogu głównego n stwórz katalog stamtąd, a następnie uruchom ponownie apt. zostaniesz zapytany o konfigurację logrotate i kilka innych konfiguracji po prostu wpisz Y n kontynuuj do końca, a następnie uruchom ponownie po zakończeniu apt dist-upgrade. wszystko powinno teraz wrócić do normy.
źródło
Przepraszam za opóźnienie. Briam, ręcznie utwórz katalogi i pliki ręcznie, a następnie zaktualizuj repozytorium (
mkdir
itouch
zgodnie z wymaganiami wyświetlanego błędu) i użyjdpkg --configure -a
.Twój system działałby dobrze, ale ważne jest, aby zainstalować ponownie, aby upewnić się, że nie jest uszkodzony; poprzedni to tylko czas, aby zaplanować ponowną instalację ... i zająć się usuwaniem
/var/lib/*
plików.źródło
Jeśli kupiłeś Raspberry Pi 3 i napotkałeś problem i pojawił się błąd „nie można otworzyć pliku / var / lib / dpkg / status przeanalizowanego lub otwartego” to jest obejście, które zadziałało dla mnie:
Jak odtworzyć plik „/ var / lib / dpkg / status”? Tylko dlatego, że nie jest to niepotrzebny plik, jest to bardzo ważny plik, który przechowuje pewne informacje o zainstalowanych pakietach w twoim systemie operacyjnym Raspbian, więc oto jak odtworzyłem :
Wykonaj wget w swoim systemie Raspbian:
Przyznaj uprawnienia:
Przeanalizuj folder dokumentacji w systemie i ponownie wygeneruj plik statusu:
po zakończeniu pobierz plik i przeczytaj uważnie. Postępuj zgodnie z instrukcjami opisanymi w pliku:
źródło
recover1.sh
zniszczy Twój prąd/var/lib/dpkg/status
bez testowania, jeśli jest już w porządku. Następnie wykona mieszany zestaw sztuczek, aby spróbować odbudować nieco działającą wersję. Nigdy nie uruchamiaj powyższego skryptu, chyba że całkowicie brakuje Ci pliku / var / lib / dpkg / status. W przeciwnym raziestrings /var/lib/dpkg/status
może być lepszym sposobem na rozpoczęcie odbudowywania uszkodzonego pliku.