Frage Wie entferne ich alte Kernel-Versionen, um das Boot-Menü zu bereinigen?


Jedes Mal, wenn ich einen neuen Linux-Kernel installiere, bleibt er in grub_config, wodurch das Boot-Menü jedes Mal länger wird.

Ich weiß, dass ich manuell die installierten Pakete durchsuchen und sie entfernen kann.

Bietet Ubuntu eine einfachere Möglichkeit, sie zu bereinigen oder zu verhindern, dass sie in der Startliste angezeigt werden?


658


Ursprung


Entferne nicht nur die alten Kernel, sondern entferne auch diese Zeile /etc/default/grub Wenn Sie die "Wiederherstellungs" -Einträge im Menü loswerden wollen: # GRUB_DISABLE_LINUX_RECOVERY = "true" - poolie
In den letzten Releases versteckt Ubuntu Kernel in Grubs Untermenü, so dass es nicht so aufdringlich ist. Es kann jedoch sinnvoll sein, zusätzliche Kernel zu entfernen, um Speicherplatz zu sparen, insbesondere wenn Sie eine separate kleine / boot-Partition haben. - jarno
Es gibt einen Ubuntu-Befehl, der "clean-old-kernels" genannt wird, um die Aufgabe zu erledigen. Sieh mein Antworten für mehr Informationen. - jarno
sudo apt-get autoremove sollte den Trick auf Ubuntu 14.04+ machen - hobs
Die Ansammlung alter Kernel ist ein Fehler, der behoben wird: bugs.launchpad.net/bugs/1357093 . Wenn der Fix freigegeben wird, werden ältere Kernel standardmäßig automatisch zurückgesetzt. - user535733


Antworten:


16.04 und neuere Versionen von Ubuntu

sudo apt autoremove

Dieser Befehl entfernt Pakete, die automatisch installiert wurden, um eine Abhängigkeit zu lösen, sind nun aber nicht mehr davon abhängig. Dies beinhaltet alte Versionen von linux-headers-* und linux-image-*. (Es ist auch schlau über diesen Prozess, eine Ersatzversion des Kerns als Fallback übrig!)

11.10 und neuere Versionen von Ubuntu

GRUB2 und seine Anzeige aller Kernel

Die neuesten Versionen von Grub2 installiert in Ubuntu zeigt automatisch den neuesten Kernel an und blendet die älteren Kernel aus, die Sie möglicherweise installiert haben.

GNU GRUB

Wenn du dein nicht siehst roden - Denken Sie daran, zu drücken Verschiebung während des Bootens.

Wie Sie sehen können, wird nur der neueste Kernel angezeigt.

Wenn Sie die angezeigte Option auswählen (drücken Sie Eingeben) dann werden alle alten Kernel sichtbar und verfügbar zum Booten von.

GNU GRUB Previous versions 

So löschen Sie ältere Kernel dauerhaft

Starten Sie zuerst mit dem neuesten verfügbaren Kernel.

Es gibt eine Reihe von Möglichkeiten, alte Kernel zu löschen. Persönlich würde ich nicht anfassen Computer Hausmeister da dies anerkannt ist, um Ihren Computer mit seinen Vorschlägen zu brechen.

synaptisch

Eine Alternative ist Synaptisch (sudo apt install synaptic)

suchen nach Linux-BildKlicken Sie mit der rechten Maustaste auf einen Kernel, wählen Sie die vollständige Entfernung und klicken Sie anschließend auf Sich bewerben Taste, um den Kernel zu löschen.

Synaptic Package Manager

Wiederholen Sie die Suche aber diesmal für Linux-Header - Sie können die zugehörigen Header für das zuvor ausgewählte Kernel-Image löschen.

Synaptisch Obwohl Sie nicht versuchen werden, zu verifizieren, was Sie entfernen möchten ... Sie könnten versehentlich Ihren neuesten Kernel löschen - oder sogar alle Ihre Kernel mit diesem Tool löschen, so dass Sie nicht mehr bootfähig sind Ubuntu!.

Denken Sie daran, zu überprüfen, welchen Kernel Sie verwenden:

uname -r

Das Ergebnis wäre ähnlich wie:

Terminal <uname -r>

Merken Sie sich das Ergebnis und die Nummer - stellen Sie sicher, dass Sie das entsprechende Bild oder die Kopfzeile nicht löschen.

Empfehlung

Meine Empfehlung ist es, mindestens zwei oder vorzugsweise drei Kernel einschließlich der neuesten zu halten. Der Grund für die Empfehlung ist, dass Sie mindestens einen / zwei andere Kernel zum Booten haben, wenn Sie aus irgendeinem Grund den neuesten Kernel nicht booten können oder eine regressive Fähigkeit wie kaputtes WLAN einführen können.


568



Entfernen alter "linux-image *" Pakete mit synaptic, funktionierte auch mit 10.04 gut. (Ich erwähne es, weil der Titel darauf hindeutet, dass es nur für 11.10 und höher sein könnte) - mivk
das -ywechseln Sie am Ende der apt-get Zeile ist notwendig, sonst fragt apt-get nur nach Bestätigung und da die Eingabe eine Pipe ist, bricht sie einfach ab. Also sollte es enden in: | xargs sudo apt-get purge -y - Josh
Entfernen von etwa 20 alten Versionen linux-image und linux-headers 4,5 GB Speicherplatz auf meinem Rechner freigemacht. - Andrew Mao
Diese Methode funktioniert gut, aber die Löschung jedes Kernels regeneriert übermäßig grub.cfg, was Zeit braucht. Gibt es eine Möglichkeit, dies für das Löschen von Stapeln zu deaktivieren und es dann einmal zu regenerieren? - spacediver
Ich bezweifle die Frage von @spacediver - das ist ein verrückter-langsamer Prozess, wenn Sie 38 unnötige Kernel haben, da, wenn jeder deinstalliert wird, er durch alle anderen geht, während er eine neue grub.cfg erzeugt. Das nennen wir eine N ^ 2-Operation - sie verarbeitet einen Kernel etwa (38 ^ 2/2) = 722-mal und ist sehr langsam. Sicher kann sich Ubuntu etwas besseres einfallen lassen .... - nealmcb


Starten Sie zunächst Ihr System neu, um sicherzustellen, dass es den neuesten Kernel verwendet. Dann öffne das Terminal und überprüfe deinen aktuellen Kernel:

uname -r 

ENTFERNEN SIE DIESEN KERN NICHT!

Geben Sie als Nächstes den folgenden Befehl ein, um alle installierten Kernel auf Ihrem System anzuzeigen / aufzulisten.

dpkg --list | grep linux-image 

Finde alle Kernel, die niedriger sind als dein aktueller Kernel. Wenn Sie wissen, welcher Kernel entfernt werden soll, fahren Sie fort, um ihn zu entfernen. Führen Sie die folgenden Befehle aus, um den ausgewählten Kernel zu entfernen.

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

Führen Sie abschließend die folgenden Befehle aus, um grub2 zu aktualisieren

sudo update-grub2 

Starten Sie Ihr System neu.


365



In 10.04 und 12.04 habe ich festgestellt, dass update-grub während des Löschvorgangs automatisch ausgeführt wurde. - aidan
Bashs Klammer Erweiterung kann verwendet werden, z.B. sudo apt-get purge linux-image-3.2.0-3{0..5}-generic (entfernt 30,31, .., 35) - ajo
Kein Neustart des Systems erforderlich. In der Tat sollten Sie das System neu starten Vor Führen Sie diese Schritte aus, um sicherzustellen, dass Sie die neueste Kernel-Version verwenden, die Sie wahrscheinlich gerade heruntergeladen und installiert haben (Sie haben zuvor ein apt-get update && apt-get upgrade durchgeführt, richtig?) - Ricket
Vielleicht möchten Sie auch die linux-signed-image Pakete, die in UEFI-Systemen installiert werden können: sudo apt-get purge linux-signed-image-3.11.0-{12,14,24}-generic was würde 12, 14 und 24 entfernen - devius
@jarno Ich weiß nicht, ob ich einen signierten Kernel benutze oder nicht, aber uname -r hat keine signed Zeichenfolge auf meinem System. Ich habe anscheinend ein signiertes Bild installiert und die Ausgabe davon ls Befehl ist: /boot/vmlinuz-3.19.0-16-generic.efi.signed. - devius


Mein Einzeiler um alte Kernel zu entfernen (dadurch wird auch Speicherplatz frei)

dpkg --list | grep linux-image | awk '{ print $2 }' | sort -V | sed -n '/'`uname -r`'/q;p' | xargs sudo apt-get -y purge

Erklärung (erinnere dich, | verwendet die Ausgabe des vorherigen Befehls als Eingabe für den nächsten Befehl)

  • dpkg --list listet alle installierten Pakete auf
  • grep linux-image sucht nach den installierten Linux-Images
  • awk '{ print $2 }' gibt nur die 2. Spalte aus (was der Paketname ist)
  • sort -V legt die Artikel in der Reihenfolge nach der Versionsnummer ab
  • sed -n '/'`uname -r`'/q;p' druckt die Zeilen vor dem aktuellen Kernel
  • xargs sudo apt-get -y purge löscht die gefundenen Kernel

Das Aufwickeln des sed Aufruf:

  • -n erzählt sed leise sein
  • `uname -r` gibt die aktuell installierte Kernel - Version aus - wir fügen sie in Backticks ein, so dass die Ausgabe als Teil des Befehls enthalten ist (Sie können dies auch als $(uname -r) 
  • /something/q sagt halt, wenn du 'etwas' anpassest (in diesem Fall wird etwas ausgegeben von uname -r) - das / Umranden Sie einen regulären Ausdruck
  • p ist drucken
  • das ; ist der Befehl separtor, also /something/q;p sagt beenden, wenn Sie etwas übereinstimmen, sonst drucken

insgesamt, sed -n '/'`uname -r`'/q;p' druckt die Zeilen, bis sie mit dem aktuellen Kernel-Namen übereinstimmen.

Wenn du paranoid bist (wie ich), kannst du den letzten Teil machen xargs echo sudo apt-get -y purge Damit der Befehl zum Bereinigen der alten Kernel gedruckt wird, können Sie vor der Ausführung prüfen, ob nichts Unerwartetes enthalten ist.


Geändert Version um Header zu entfernen:

dpkg --list | grep 'linux-image' | awk '{ print $2 }' | sort -V | sed -n '/'"$(uname -r | sed "s/\([0-9.-]*\)-\([^0-9]\+\)/\1/")"'/q;p' | xargs sudo apt-get -y purge
dpkg --list | grep 'linux-headers' | awk '{ print $2 }' | sort -V | sed -n '/'"$(uname -r | sed "s/\([0-9.-]*\)-\([^0-9]\+\)/\1/")"'/q;p' | xargs sudo apt-get -y purge

Beachten Sie das sed Aufruf wird geändert. "$(uname -r | sed "s/\([0-9.-]*\)-\([^0-9]\+\)/\1/")" extrahiert nur die Version (z. B. "3.2.0-44"), ohne "-generisch" oder ähnliches aus uname -r


All-in-One-Version zum Entfernen von Bildern und Kopfzeilen (kombiniert die beiden obigen Versionen):

echo $(dpkg --list | grep linux-image | awk '{ print $2 }' | sort -V | sed -n '/'`uname -r`'/q;p') $(dpkg --list | grep linux-headers | awk '{ print $2 }' | sort -V | sed -n '/'"$(uname -r | sed "s/\([0-9.-]*\)-\([^0-9]\+\)/\1/")"'/q;p') | xargs sudo apt-get -y purge

261



Beachten Sie, dass es wenig gefährlich ist, die aktuelle Kernel-Version als regulären Ausdruck wie folgt zu verwenden: Punkte stimmen mit jedem Zeichen überein und 3.1.2-23 entspricht 3.1.2-2 (oder anders herum). Siehe auch mein Antworten. - jarno
Hier ist eine abgestimmte All-in-One-Version: sudo apt-get purge $(for tag in "linux-image" "linux-headers"; do dpkg-query -W -f'${Package}\n' "$tag-[0-9]*.[0-9]*.[0-9]*" | sort -V | awk 'index($0,c){exit} //' c=$(uname -r | cut -d- -f1,2); done) Siehe auch mein Antworten. - jarno
@jarno das hat mir sehr geholfen ... Kudos zu deinem One Liner - Clain Dsilva
Aufgrund nicht erfüllter Abhängigkeiten musste ich es mit verwenden dkpg -Pstattdessen. Hier ist die Vollversion: dpkg --list | grep 'linux-headers' | awk '{ print $2 }' | sort -V | sed -n '/'"$(uname -r | sed "s/\([0-9.-]*\)-\([^0-9]\+\)/\1/")"'/q;p' | xargs sudo dpkg -P - Sebastian Sastre
Nein, tu das nicht! "Dieser Oneliner sieht ein wenig gefährlich aus, aber sicher können sich 220 Wähler nicht irren!" Dachte ich mir und kopierte blind. Rebooted, direkt zu GRUB. Dieser Befehl löschte alle meine Kernel, einschließlich der, die ich benutzte. Vielleicht habe ich einen Echtzeit-Kernel laufen lassen, kann mich nicht erinnern. Derzeit suche ich in meinem Haus nach einem USB Stick um Ubuntu Live CD zu installieren :( - Andreas Jansson


Ubuntu 16.04+:

$ sudo apt autoremove
...
The following packages will be REMOVED:
  linux-headers-4.4.0-57 linux-headers-4.4.0-57-generic linux-image-4.4.0-57-generic linux-image-extra-4.4.0-57-generic linux-tools-4.4.0-57 linux-tools-4.4.0-57-generic

Ubuntu 15.10 und niedriger:

Ich finde das der einfachste und schnellste Weg. Es behält den neuesten Kernel sowie zwei weitere:

sudo apt-get install bikeshed
sudo purge-old-kernels

So ändern Sie die Anzahl der zusätzlichen Kernel, die beibehalten werden:

sudo purge-old-kernels --keep 3

55



Dieser Befehl ist ein Shell-Skript, dessen Speicherort Sie finden können which purge-old-kernels. - jarno
Froh, dass sie das 16.04. Viel einfacher gemacht haben! Hoffe, diese Antwort geht immer weiter nach oben ... - Toby J
Auf Ubuntu 16.04 habe ich purge-old-kernels ohne Fahrradschuppen (zufällige nützliche Werkzeuge, die noch kein dauerhaftes Zuhause haben) Paket oder ein bestimmtes. Vermeiden Sie mit apt-get -y Option, ist wie die Augen zu schließen und zu hoffen, dass alles gut wird. Ebenfalls Hier es ist wie Autoremove entscheidet, wie viele alte Kernel zu halten sind. - Pablo Bianchi
In 16.04 wird durch das byobu-Package pure-old-kernels bereitgestellt (Hinweis: apt-file search purge-old-kernels). Einigten sich auf apt-get -yIch werde es entfernen. - bmaupin
@Dan da ich keine Nicht-LTS Versionen nutze war ich mir nicht sicher wann genau es angefangen hat. Aber ich kann das sicher sagen sudo apt-get autoremove entfernt keine Kernel in 14.04. Fühlen Sie sich frei, die Antwort mit der spezifischen Version zu aktualisieren, wenn Sie wissen, was es ist! - bmaupin


Einträge aus Grub entfernen 2 Einträge sollten entfernt werden, indem Dateien im Ordner /etc/grub.d bearbeitet oder entfernt werden. Die Datei /boot/grub/grub.cfg ist schreibgeschützt und sollte normalerweise nicht bearbeitet werden müssen.

Zu viele Kernel? 

  • Wenn Sie nicht sicher sind, welchen Kernel Sie gerade verwenden, in einem Terminaltyp uname -r.

  • Kernel, die über APT entfernt werden (Synaptic, "apt-get remove" usw.), aktualisieren grub.cfg automatisch und es ist keine Benutzeraktion erforderlich.

  • Ein großartiges Tool zum Entfernen von Kernen (und Menüeinträgen) ist Ubuntu-Tweak, eine sichere und einfach zu bedienende GUI-App.

  • Installiere Ubuntu-Optimierung

  • Ubuntu-Tweak wird unter Anwendungen> Systemtools verfügbar sein.

Entfernen Sie ältere Kernel-Einträge

  • Wählen Sie "Package Cleaner" auf der linken Seite und "Clean Kernel" auf der rechten Seite.

  • Drücke den "Entsperren" -Button unten rechts und gib dein Passwort ein.

  • Wählen Sie aus der angezeigten Liste die Kernel-Images und Header aus, die Sie entfernen möchten. Der verwendete Kernel ist nicht aufgelistet.

  • Klicken Sie auf die Schaltfläche "Bereinigen" unten rechts, um die ausgewählten Kernel-Images und Header zu entfernen.

Entfernen Sie Betriebssysteme aus dem Grub-Menü

  • Andere Betriebssysteme, die vom Computer entfernt wurden, werden ebenfalls aus dem Menü entfernt, sobald "update-grub" als root ausgeführt wird.

  • Menüpunkte werden über Skripte auf das Grub2-Menü gesetzt. Wenn Sie nicht möchten, dass andere Betriebssysteme in das Menü eingegeben werden, deaktivieren Sie /etc/grub.d/30_osprober

  • Führen Sie diesen Befehl aus, um die Ausführung des Skripts zu stoppen
    sudo chmod -x /etc/grub.d/30_os-prober 

  • DISABLE_30_OS-PROBER = 'wahr' in / etc / default / grub

Entferne Memtest86 + aus dem Grub-Menü
sudo chmod -x /etc/grub.d/20_memtest86+

  • Führen Sie den Befehl update-grub aus, damit die Änderungen in grub.cfg übernommen werden können

Quelle 

Hinweis: Nach den Kernel-Updates wird ein neuer Eintrag zum GRUB-Menü hinzugefügt. Wenn Sie möchten, können Sie den älteren Eintrag entfernen. Die meisten erfahrenen Benutzer raten Ihnen jedoch, mindestens einen Ersatzeintrag für den Fall zu behalten, dass bei einem Upgrade ein Fehler auftritt Booten Sie eine ältere Kernel-Version für die Fehlersuche.

Alternativer Weg zum Entfernen von Kernel-Einträgen (vor 10.04) 

für GRUB nicht GRUB2

Startup-Manager  Install startupmanager

Sie finden es unter System >> Administration >> alt text
alt text
Sie sehen im zweiten Screenshot, wie viele Kernel angezeigt werden sollen? Ich behalte es generell auf 1, aber wenn ich ein Kernel-Upgrade bekomme, ändere ich es immer vor dem Neustart auf 2, damit ich den älteren Kernel auswählen kann, wenn der neue Kernel Probleme mit meiner Hardware hat. Sobald ich weiß, dass der neue Kernel gut funktioniert, ändere ich ihn wieder auf 1.


41



Eigentlich gibt mir der Startupmanager ein Fenster wie dieses auf Ubuntu 10.04, stattdessen gab es nur ein Fenster mit zwei Tabs -> Boot options und Advanced .. und in fortgeschrittenen Versionen gibt es keine Möglichkeit die Anzahl der Kernel zu begrenzen. Also aktualisiere bitte die Antwort für Ubuntu 10.04 (Und deswegen habe ich das abgelehnt ..) - Sen
eine Idee, wie "Anzahl der zu haltenden Kernel" auf einer Maschine definiert werden kann, auf der keine GUI installiert ist (Server)? - sylvainulg
Startupmanager ist veraltet. Sehen Gruppenanpasser - muhasturk


Rein Befehlszeile, das wird alle außer dem aktuellen und zweitmeisten entfernen (über die "-2" im Kopf Befehl unten):

OLD=$(ls -tr /boot/vmlinuz-* | head -n -2 | cut -d- -f2- |
    awk '{print "linux-image-" $0 " linux-headers-" $0}' )
if [ -n "$OLD" ]; then
    apt-get -qy remove --purge $OLD
fi
apt-get -qy autoremove --purge

38



One-Liner aus Dort: dpkg -l linux-* | awk '/^ii/{ print $2}' | grep -v -e `uname -r | cut -f1,2 -d"-"` | grep -e [0-9] | xargs sudo apt-get -y purge - Dmitry Verkhoturov
@DmitryPascal, Sie sollten dies als neue Antwort hinzufügen. - saji89
@DmitryPascal Wie immer, kopiere nicht einfach diese, ohne sie zu verstehen. Auf meiner Maschine passt dieser Einliner auch linux-libc-dev:amd64 die nicht entfernt werden sollten. - jamesadney
@Kees Cook, sollte das awk-Argument nicht nur in einfachen Anführungszeichen stehen? Wenn Sie den linierten Leitungen "linux-image-" voranstellen möchten, scheint dies nur zu funktionieren, wenn Sie es verwenden awk '{print "linux-image-" $0}'. - Mark
das funktioniert bei mir nicht, es beinhaltet meinen benutzerdefinierten Kernel (Ubuntu 14.04 mit 3.17) - Alex R


Aktualisieren: purge-old-kernels ist veraltet heutzutage.

Ich habe ein Skript erstellt, um Kernel auch unter schwierigen Bedingungen zu säubern. Es wird genannt linux-purge und du kannst es finden Hier.

Wenn Sie nur die Kernel (und die zugehörigen Pakete) löschen möchten, die älter als der aktuell verwendete Kernel sind, können Sie verwenden, wenn das System nicht beschädigt ist Dieses Skript.

Es gibt auch eine Ubuntu-Dokumentationsseite, zu der ich beim Entfernen alter Kernel beigetragen habe Hier.


34



Sieht aus wie purge-old-kernels ist nicht in der genauen Version (1.22) von Bikeshed. Gibt es einen vernünftigen / sicheren Weg, um einen kürzeren Fahrradschuppen zu bekommen? Oder wäre es einfacher / sicherer, das Skript einfach zu installieren? Ich würde es jedoch vorziehen, trotz der langen Liste von Abhängigkeiten ein Repo zu verwenden. - drevicko
@drevicko Siehe Hier. - jarno
Noch eine leicht tangentiale Frage: Kann man nicht kurz zur Quelle gehen, um zu bestimmen, welche Befehle verfügbar werden, wenn man den Fahrradschuppen installiert? - drevicko
@ drevicko, sicher, dlocate -lsbin bikeshed - jarno
@drevicko, siehe auch eine andere Frage - jarno