Wie entferne ich alte Kernel vom Terminal?


7

Ich habe verschiedene Fragen zum Bereinigen alter Linux-Kernel durchlaufen. Sie scheinen alle unterschiedliche Antworten zu haben und sie sind alt, also muss jemand sagen, dass die Frage zu alt ist und einen neuen Beitrag beginnen. Hier ist es also:

Ich möchte Folgendes tun:

  1. Entfernen Sie alte Linux-Kernel manuell im Terminal.
  2. Entfernen Sie alle Konfigurationsdateien
  3. Entfernen Sie alle Header-Dateien
  4. Unnötige Inodes entfernen?
  5. Erklären Sie, warum dpkg -l | grep linux-image liefert nicht die gleichen Ergebnisse wie in meiner grub2-Liste während des Startvorgangs
  6. Erkläre rc vs ii im dpkg -l | grep linux-image auflistung
  7. Erläutern Sie die Diskrepanz zwischen Einträgen im Verzeichnis / usr / src (oder wo immer sich diese Dateien in anderen Ubuntu-Versionen befinden) und den beiden oben genannten Methoden zum Ermitteln überschüssiger Kernelversionen.
  8. Was sind die Konsequenzen einer vollständigen Bereinigung älterer Kernel? Muss ich mir Sorgen um Abhängigkeiten machen? Woher weiß ich, ob Apps auf meinem Computer von den Konfigurationsdateien älterer Kernel abhängig sind?

Was ich nicht will:

  • Links zu anderen Antworten, die Sie nicht persönlich getestet haben oder die nicht alle Probleme betreffen, die mit einer vollständigen Bereinigung verbunden sind.
  • Jede Antwort, die Sie nicht persönlich getestet haben.
  • Skripte, die versuchen, alles auf einmal automatisch zu bereinigen. Ich möchte dies nur manuell tun, bis ich alles, was vor sich geht, vollständig verstanden habe.

Lassen Sie uns bitte eine umfassende Lösung für das Problem des Kernelaufbaus erhalten. Ich spiele derzeit mit einer älteren Version von Ubuntu (10.04), bevor ich ein Upgrade durchführe, aber ich hatte das gleiche Problem mit Ubuntu 12.04. Wenn die Lösung für verschiedene Versionen unterschiedlich ist, geben Sie bitte die Version an, mit der Sie Ihre Lösung getestet haben.

Was funktioniert:

uname -r

Dadurch wird die aktuell verwendete Kernel-Version korrekt zurückgegeben.

Dinge, die nicht funktionieren:

sudo apt-get autoremove
sudo apt-get clean
sudo apt-get autoremove linux-image-x.x.xx-xx-generic

Was ich dachte, sollte funktionieren, tat es aber nicht:

sudo apt-get purge linux-image-x.x.xx-xx-generic

Dies hat dazu beigetragen, die Liste zu verkleinern, die generiert wurde durch dpkg -l | grep linux-image:

sudo dpkg --purge linux-image-x.x.xx-xx-generic

Auch hier ist ein Vorsprung zu diesem rc/iiThema:

iibedeutet "Es sollte installiert sein und es ist installiert", während rc"Es wurde entfernt / deinstalliert, aber die Konfigurationsdateien sind noch vorhanden" bedeutet.

Ich denke, dies behebt das Problem zwischen der Diskrepanz zwischen der Terminalliste und dem Menü grub2 beim Booten. Soweit ich mich erinnere, iistimmen die Auflistungen mit der Auflistung von grub2 überein. Die Frage hier ist, wie die iiEinträge überhaupt dorthin gekommen sind.



Hier einige weitere Informationen: Wenn Sie nicht neu starten möchten, um Ihre Grub-Einträge anzuzeigen, gehen Sie einfach zu: /boot/grub/grub.cfg. Ihre 'ii'-Einträge aus der dpkg-Liste sollten mit den Einträgen in grub.cfg übereinstimmen.
JamesH


Antworten:


7

Die Anhäufung alter Kernel, bis / boot voll ist, wodurch apt beschädigt wird , ist ein Fehler: LP # 1357093 , mit einem Fix, der in allen Versionen von Ubuntu 16.04 und neuer implementiert ist.

Die meisten Benutzer, die dieses Problem bemerken , haben die Verschlüsselung der gesamten Festplatte installiert, wodurch eine winzige unverschlüsselte / Boot-Partition erstellt wird. Da es winzig ist, füllt sich die Partition schnell und diese Benutzer bemerken das Problem viel früher als andere.

Wenn ein neuer Kernel installiert ist, die /etc/kernel/postinst.d/apt-auto-removal Skript markiert ältere Kernel als förderfähig für autoremoval ... aber nicht autoremove laufen. Das Fehlen einer automatischen Entfernung sollte ursprünglich einem Menschen ermöglichen, die Liste der entfernten Pakete zu überprüfen.

Der Bugfix für LP # 1357093 funktioniert für die meisten Benutzer. Wenn er für Sie nicht funktioniert, gibt es eine andere Ursache, die verhindert, dass alte Kernel-Pakete als für das automatische Entfernen geeignet gekennzeichnet werden. Suchen Sie in den Ubuntu-Supportkanälen nach persönlicher Hilfe.

In älteren Versionen von Ubuntu müssen Sie alte Unkraut-Kernel reparieren, um Speicherplatz manuell zu sparen. Wie Sie es manuell beheben, hängt davon ab, ob Ihr / boot voll ist oder nicht. Die meisten Benutzer bemerken das Problem erst, wenn / boot voll ist, und sie erhalten apt- und dpkg-Fehler, bei denen kein Speicherplatz mehr auf dem Gerät vorhanden ist.

Wenn / boot nicht voll ist und apt ordnungsgemäß funktioniert, ist dies einfach

sudo apt-get autoremove      ## Ubuntu 14.04 and older
sudo apt autoremove          ## Ubuntu 16.04 and newer

sollte alle Kernel-Pakete entfernen, die für die automatische Entfernung berechtigt sind.

Wenn / boot voll ist und apt-Aktionen mit dem dpkg-Fehler "Kein Speicherplatz mehr auf dem Gerät" fehlschlagen, ist es zu spät, die automatische Entfernung zu verwenden.

Es ist zu spät, da Aptdaemon Paketaktionen in die Warteschlange stellt. Autoremove befindet sich am Ende der Warteschlange und apt bricht die gesamte verbleibende Warteschlange ab, wenn eine Aktion fehlschlägt ... einschließlich Platzmangel. (Dies ist wohl ein Fehler in apt / aptdaemon)

Die beste Vorgehensweise besteht darin, mit 'uname' und 'dpkg' einen oder zwei alte Kernel zu entfernen, um Speicherplatz freizugeben, damit apt die Aktionen in der Warteschlange ausführen kann. Dann funktioniert das automatische Entfernen.

Beispiel:

$ uname -r
3.16.0-36-generic    ## This is kernel you MUST NOT remove.

$ dpkg -l | grep linux-image
rc  linux-image-3.16.0-23-generic    ## 'rc' means already removed
rc  linux-image-3.16.0-28-generic    ## 'rc' can be safely ignored
rc  linux-image-3.16.0-29-generic
ii  linux-image-3.16.0-30-generic    ## 'ii' means installed. Removable
ii  linux-image-3.16.0-31-generic    ## Removable
ii  linux-image-3.16.0-33-generic    ## Removable
ii  linux-image-3.16.0-34-generic    ## Backup working kernel. Don't remove
ii  linux-image-3.16.0-36-generic    ## Current kernel. DO NOT REMOVE

## Use dpkg to remove one older kernel, freeing enough space for apt to work
$ sudo dpkg --remove linux-image-3.16.0-30-generic
$ sudo apt-get autoremove     ## Ubuntu 14.04 and older
$ sudo apt autoremove         ## Ubuntu 16.04 and newer

Wenn Sie das Problem schon lange ignoriert haben , gibt es Effekte zweiter Ordnung, wie z. B. Linux-Image-Generic, das auf die falsche Kernel-Version verweist, und passende Abhängigkeitsfehler. Es gibt keine einzige Möglichkeit, alle diese Probleme gleichzeitig zu beheben.

Im Allgemeinen besteht die einfache Möglichkeit, die meisten dieser Probleme zu beseitigen, darin, die alten Pakete aus Ihrem lokalen Paketcache zu bereinigen, Ihre Paketdatenbank zu aktualisieren und die fehlerhaften Pakete aus den Ubuntu-Repositorys neu zu installieren (anstelle Ihres lokalen Caches).

$ sudo apt-get update       ## Refresh the package database (14.04 and older)
$ sudo apt update           ##                              (16.04 and newer)

$ sudo apt-get autoclean    ## Delete the obsolete packages from your local cache (14.04 and older)
$ sudo apt autoclean        ##                                                    (16.04 and newer)

$ sudo apt-get install --reinstall <packagename>     ## Reinstall the offending package with the latest version in the Ubuntu repositories (14.04 and older)
$ sudo apt install --reinstall <packagename>         ##                (16.04 and newer)

Wenn Sie immer noch auf apt- und / oder dpkg-Fehler stoßen, wenden Sie sich an die Ubuntu-Supportkanäle.


1

Sie können diese Befehle ausprobieren, um alte Konfigurationsdateien und alte Kernel zu entfernen:

exec sudo -i

CONFOLD=$(dpkg -l | grep '^rc' | awk '{print $2}')

KERNELCUR=$(uname -r | sed 's/-*[a-z]//g' | sed 's/-386//g')

PKGLINUX="linux-(image|headers|ubuntu-modules|restricted-modules)"

METAPKGLINUX="linux-(image|headers|restricted-modules)-(generic|i386|server|common|rt|xen)"

KERNELSOLD=$(dpkg -l | awk '{print $2}' | grep -E "$PKGLINUX" | grep -vE "$METAPKGLINUX" | grep -v "$KERNELCUR")

apt-get purge "$CONFOLD"

apt-get purge "$KERNELSOLD"

update-grub

0

Sie können den folgenden Befehl ausführen, um die Liste der installierten Kernel zu finden.

U / min -q Kernel

Nachdem Sie die Liste der Kernel gefunden haben, führen Sie den folgenden Befehl aus, um die Kernel zu entfernen.

sudo apt-get entfernen linux-image-xxxx-generic

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.