Nie można wyczyścić pełnego / rozruchu z powodu niespełnionych zależności

43

Otrzymałem komunikat o błędzie wyjaśniający, że mój / boot jest pełny. próba oczyszczenia starych plików obrazów zawsze wydaje się nieudana z powodu błędów pełnego dysku lub błędów zależności. Czy ktoś mógłby wyjaśnić, gdzie się mylę.

$ sudo apt-get autoremove
Reading package lists... Done
Building dependency tree       
Reading state information... Done
You might want to run ‘apt-get -f install’ to correct these.
The following packages have unmet dependencies.
 linux-image-extra-3.13.0-44-generic : Depends: linux-image-3.13.0-44-generic but it is not installed
 linux-image-extra-3.13.0-45-generic : Depends: linux-image-3.13.0-45-generic but it is not installed
 linux-image-generic : Depends: linux-image-3.13.0-45-generic but it is not installed
E: Unmet dependencies. Try using -f.

$ ls /boot
abi-3.13.0-32-generic         initrd.img-3.13.0-43-generic
abi-3.13.0-36-generic         lost+found
abi-3.13.0-37-generic         memtest86+.bin
abi-3.13.0-39-generic         memtest86+.elf
abi-3.13.0-40-generic         memtest86+_multiboot.bin
abi-3.13.0-43-generic         System.map-3.13.0-32-generic
config-3.13.0-32-generic      System.map-3.13.0-36-generic
config-3.13.0-36-generic      System.map-3.13.0-37-generic
config-3.13.0-37-generic      System.map-3.13.0-39-generic
config-3.13.0-39-generic      System.map-3.13.0-40-generic
config-3.13.0-40-generic      System.map-3.13.0-43-generic
config-3.13.0-43-generic      vmlinuz-3.13.0-32-generic
grub                          vmlinuz-3.13.0-36-generic
initrd.img-3.13.0-32-generic  vmlinuz-3.13.0-37-generic
initrd.img-3.13.0-36-generic  vmlinuz-3.13.0-39-generic
initrd.img-3.13.0-37-generic  vmlinuz-3.13.0-40-generic
initrd.img-3.13.0-39-generic  vmlinuz-3.13.0-43-generic
initrd.img-3.13.0-40-generic

użyłem

kernelver=$(uname -r | sed -r 's/-[a-z]+//')
dpkg -l linux-{image,headers}-"[0-9]*" | awk '/ii/{print $2}' | grep -ve $kernelver

dostać

linux-headers-3.13.0-32
linux-headers-3.13.0-32-generic
linux-headers-3.13.0-36
linux-headers-3.13.0-36-generic
linux-headers-3.13.0-37
linux-headers-3.13.0-37-generic
linux-headers-3.13.0-39
linux-headers-3.13.0-39-generic
linux-headers-3.13.0-40
linux-headers-3.13.0-40-generic
linux-headers-3.13.0-44
linux-headers-3.13.0-44-generic
linux-headers-3.13.0-45
linux-headers-3.13.0-45-generic
linux-image-3.13.0-32-generic
linux-image-3.13.0-36-generic
linux-image-3.13.0-37-generic
linux-image-3.13.0-39-generic
linux-image-3.13.0-40-generic

Następnie wybierz pierwszy obraz do usunięcia

$ sudo apt-get purge linux-image-3.13.0-32-generic
Reading package lists... Done
Building dependency tree       
Reading state information... Done
You might want to run 'apt-get -f install' to correct these:
The following packages have unmet dependencies.
 linux-image-extra-3.13.0-32-generic : Depends: linux-image-3.13.0-32-generic but it is not going to be installed
 linux-image-extra-3.13.0-44-generic : Depends: linux-image-3.13.0-44-generic but it is not going to be installed
 linux-image-extra-3.13.0-45-generic : Depends: linux-image-3.13.0-45-generic but it is not going to be installed
 linux-image-generic : Depends: linux-image-3.13.0-45-generic but it is not going to be installed
E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).
Philip Howard
źródło
Edytuj swoje pytanie oraz dane wyjściowe sudo apt-get autoremovei ls /boot.
muru
Spróbuj odpowiedzi Phroga. Użyj uname -rpolecenia, aby znaleźć swoją bieżącą wersję jądra i spróbuj usunąć jądro inne niż to.
muru

Odpowiedzi:

64

W takim przypadku użyłbym tego dpkgnarzędzia do wymuszenia usunięcia niektórych pakietów jądra. Nie jest to zalecane do powszechnego użytku i jest nieco niebezpieczne , ale w takim przypadku pomocne mogą być niezaspokojone zależności.

Najpierw zlokalizuj jądro, w którym system jest uruchamiany. Ten, który jest aktualnie załadowany. Otwórz terminal (CTRL + ALT + T) i wydaj następujące polecenie

uname -r

Wyświetli się załadowane jądro, NIE powinieneś próbować go usuwać.

Następnie wydaj polecenie

ls /boot 

zwróci wszystkie zainstalowane obrazy. Wybierz jeden lub dwa i spróbuj je usunąć. Spróbuj wymusić ich usunięcie / wyczyszczenie. Na przykład

sudo dpkg --force-all -P linux-image-3.13.0-32-generic

Możesz zrobić to samo dla innych obrazów, aby zwolnić miejsce.

Następnie możesz spróbować zainstalować brakujące pakiety lub

sudo apt-get install -f 

spróbować rozwiązać zależności.

Na koniec wydaj polecenie „wyczyść stare jądra”

 sudo apt-get purge $(dpkg -l linux-{image,headers}-"[0-9]*" | awk '/ii/{print $2}' | grep -ve "$(uname -r | sed -r 's/-[a-z]+//')")

Powyższe polecenie usunie WSZYSTKIE jądra oprócz tego, który jest aktualnie załadowany.

Ponieważ masz osobną partycję / boot, pamiętaj, że będziesz musiał często śledzić jej przestrzeń i często czyścić (częstotliwość zależy od przestrzeni / boot)

NickTux
źródło
1
Cześć, gdy próbuję je usunąć, pojawia się błąd sudo dpkg --force-all -P abi-3.13.0-32-generyczny dpkg: ostrzeżenie: ignorowanie żądania usunięcia abi-3.13.0-32-generic, które nie jest zainstalowany
Philip Howard
9
Ten pracował dla mnie, z jedną modyfikacją: po usunięciu jądra z obrazów dpkg, musiałem biec sudo apt-get -f autoremove, aby apt-getprzestać narzekać niespełnionych zależności. W przeciwnym razie sudo apt-get -f installnajwyraźniej próbowałem ponownie zainstalować wszystkie obrazy jądra, które usunąłem dpkg, które oczywiście po prostu /bootponownie się zapełniły .
mdunsmuir
4
Po wymuszonym czyszczeniu i apt-get -f autoremovepowyższym komentarzu w @mdunsmuir nadal chce zainstalować wszystkie stare jądra podczas dowolnej z powyższych operacji czyszczenia. Czy istnieje sposób, aby po prostu kazać mu ignorować niepowiązane zależności i usunąć pojedyncze, kompletne stare jądro?
NKijak
3
Chciałbym dodać, że musiałem również odinstalować dodatki sudo dpkg --force-all -P linux-image-extra-3.13.0-32-generic. W przeciwnym razie dodatki te nadal zależą od rzeczywistego obrazu, a -fflaga spowodowałaby ponowną instalację obrazu, a następnie zabrakło miejsca na dysku.
Ghostkeeper
1
@LonnieBest Zgadzam się. Dla kontrastu Arch Linux utrzymuje tylko jedną awarię. Wydaje się, że Fedora również nie ma tego problemu.
Franklin Yu
5

To działało dla mnie na Ubuntu 16.04.

sudo apt autoremove --purge
sudo apt autoremove
sudo apt-get -f install
sudo apt-get upgrade
msa
źródło
Ta metoda działała dla mnie.
Bok
2

Wyświetl wszystkie jądra:

dpkg --list 'linux-image*'

Wyświetl bieżące jądro:

uname -r

Wyświetl wszystkie jądra Z WYJĄTKIEM aktualnego:

dpkg -l linux-{image,headers}-"[0-9]*" | awk '/^ii/{ print $2}' | grep -v -e `uname -r | cut -f1,2 -d"-"` | grep -e '[0-9]'

Upewnij się, że twojego obecnego jądra nie ma na tej liście.

Usuń wszystkie jądra Z WYJĄTKIEM bieżącego:

dpkg -l linux-{image,headers}-"[0-9]*" | awk '/^ii/{ print $2}' | grep -v -e `uname -r | cut -f1,2 -d"-"` | grep -e '[0-9]' | xargs sudo apt-get -y purge

Wyczyść inne rzeczy:

sudo apt-get autoremove
Hemant Thorat
źródło
Jeśli nadal występuje błąd miejsca na dysku rozruchowym podczas instalowania / odinstalowywania plików, usuń bezpośrednio jeden ze starych obrazów z katalogu / boot, ls -lh /boot/*-3.13.0-119*; rm /boot/*-3.13.0-119*; UWAGA: Proszę ponownie przejrzeć bieżący obraz jądra przed usunięciem dowolnego obrazu.
Hemant Thorat,
Nadal narzeka, że ​​ma niespełnione zależności
Matiss Jurgelis