Ein Full / Boot kann aufgrund nicht erfüllter Abhängigkeiten nicht bereinigt werden

43

Ich habe eine Fehlermeldung erhalten, die erklärt, dass mein / boot voll ist. Der Versuch, alte Imagedateien zu bereinigen, scheint immer aufgrund von Fehlern bei vollem Datenträger oder Abhängigkeitsfehlern zu scheitern. Könnte jemand erklären, wo ich falsch liege.

$ 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

ich benutzte

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

bekommen

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

Wählen Sie dann das erste zu entfernende Bild aus

$ 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
quelle
Bitte bearbeiten Sie Ihre Frage und die Ausgabe von sudo apt-get autoremoveund ls /boot.
muru
Versuchen Sie Phrogs Antwort. Verwenden Sie den uname -rBefehl, um Ihre aktuelle Kernel-Version zu ermitteln, und versuchen Sie, einen anderen Kernel als diesen zu entfernen.
muru

Antworten:

64

In diesem Fall würde ich das dpkgTool verwenden, um das Entfernen einiger Kernelpakete zu erzwingen. Dies wird nicht für die allgemeine Verwendung empfohlen und ist ein bisschen gefährlich . In diesem Fall können jedoch nicht erfüllte Abhängigkeiten hilfreich sein.

Suchen Sie zunächst den Kernel, in dem das System gestartet wird. Die aktuell geladene. Öffnen Sie ein Terminal (STRG + ALT + T) und geben Sie den folgenden Befehl ein

uname -r

Es wird Ihnen den geladenen Kernel anzeigen. Sie sollten NICHT versuchen, diesen zu entfernen.

Geben Sie dann den Befehl aus

ls /boot 

Es werden alle installierten Images zurückgegeben. Wähle eins oder zwei und versuche sie zu entfernen. Versuchen Sie, sie mit Gewalt zu entfernen / zu reinigen. Zum Beispiel

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

Sie können dasselbe für andere Bilder tun, um Speicherplatz freizugeben.

Dann können Sie versuchen, die fehlenden Pakete zu installieren, oder

sudo apt-get install -f 

um zu versuchen, die Abhängigkeiten aufzulösen.

Geben Sie abschließend den Befehl "Alte Kernel bereinigen" ein

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

Mit dem obigen Befehl werden ALLE Kernel mit Ausnahme des derzeit geladenen Kernels entfernt.

Da Sie über eine separate / boot-Partition verfügen, müssen Sie deren Speicherplatz nachverfolgen und häufig bereinigen (die Häufigkeit hängt vom Speicherplatz von / boot ab).

NickTux
quelle
1
Hallo, wenn ich versuche, sie zu entfernen, erhalte ich eine Fehlermeldung sudo dpkg --force-all -P abi-3.13.0-32-generic dpkg: Warnung: Ignorieren der Anforderung zum Entfernen von abi-3.13.0-32-generic, was nicht der Fall ist installiert
Philip Howard
9
Dies funktionierte für mich mit einer Modifikation: Nachdem dpkgich Kernel-Images mit entfernt hatte , musste ich laufen, sudo apt-get -f autoremoveum mich nicht apt-getmehr über nicht erfüllte Abhängigkeiten zu beschweren. Ansonsten wurde sudo apt-get -f installanscheinend immer wieder versucht, alle Kernel-Images, die ich entfernt hatte dpkg, neu zu installieren , was sich offensichtlich gerade wieder füllte /boot.
mdunsmuir
4
Nach dem apt-get -f autoremoveerzwungenen Löschen und dem obigen Kommentar in @mdunsmuir möchten Sie weiterhin alle alten Kernel während der oben beschriebenen Bereinigungsvorgänge installieren. Gibt es eine Möglichkeit, es einfach anzuweisen, nicht verwandte Abhängigkeiten zu ignorieren und einen einzelnen, vollständigen alten Kernel zu entfernen?
NKijak
3
Ich möchte hinzufügen, dass ich auch die Extras mit deinstallieren musste sudo dpkg --force-all -P linux-image-extra-3.13.0-32-generic. Andernfalls hängen diese Extras immer noch vom tatsächlichen Image ab, und das -fFlag würde dazu führen, dass das Image erneut installiert wird und nicht mehr genügend Speicherplatz zur Verfügung steht.
Ghostkeeper
1
@LonnieBest Ich stimme zu. Im Gegensatz dazu behält Arch Linux nur einen Fallback bei. Auch Fedora scheint dieses Problem nicht zu haben.
Franklin Yu
5

Dies ist, was für mich auf Ubuntu 16.04 gearbeitet hat.

sudo apt autoremove --purge
sudo apt autoremove
sudo apt-get -f install
sudo apt-get upgrade
msa
quelle
Diese Methode hat bei mir funktioniert.
Bok
2

Alle Kernel auflisten:

dpkg --list 'linux-image*'

Aktuellen Kernel anzeigen:

uname -r

Listen Sie alle Kernel AUSSER dem aktuellen auf:

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

Stellen Sie sicher, dass Ihr aktueller Kernel nicht auf dieser Liste steht.

Entferne alle Kernel AUSSER dem aktuellen:

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

Andere Sachen löschen:

sudo apt-get autoremove
Hemant Thorat
quelle
Wenn der Fehler beim Installieren / Deinstallieren von Dateien weiterhin auftritt, entfernen Sie direkt eines der alten Images aus dem Verzeichnis / boot. Ls -lh /boot/*-3.13.0-119*; rm /boot/*-3.13.0-119*; HINWEIS: Bitte überprüfen Sie das aktuelle Kernel-Image erneut, bevor Sie ein Image löschen.
Hemant Thorat
Dennoch beklagt sich, dass es nicht erfüllte Abhängigkeiten haben
Matiss Jurgelis