ubuntuusers.de

Skripte/Alte_Kernel_entfernen

Status: Ungelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |
Dieses Thema ist die Diskussion des Artikels Skripte/Alte_Kernel_entfernen.

Benno-007

Anmeldungsdatum:
28. August 2007

Beiträge: 29240

Wohnort: Germany

1. steht der Befehl noch mehrmals unter weitere Möglichkeiten und zweitens weiß ich nicht, was das soll. Der Befehl funktioniert! Fragt alle Supporter, wenn ihr mir nicht glaubt. Bitte sehr, die Simulation auf meinem System:

$ apt-get -s autoremove
HINWEIS: Dies ist nur eine Simulation!
         apt-get benötigt root-Privilegien für die reale Ausführung.
         Behalten Sie ebenfalls in Hinterkopf, dass die Sperren deaktiviert
         sind, verlassen Sie sich also bezüglich des reellen aktuellen
         Status der Sperre nicht darauf!
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut.       
Statusinformationen werden eingelesen.... Fertig
Die folgenden Pakete werden ENTFERNT:
  libcuda1-331 linux-headers-3.13.0-55 linux-headers-3.13.0-55-generic
  linux-headers-3.13.0-57 linux-headers-3.13.0-57-generic
  linux-headers-3.13.0-58 linux-headers-3.13.0-58-generic
  linux-image-3.13.0-55-generic linux-image-3.13.0-57-generic
  linux-image-3.13.0-58-generic linux-image-extra-3.13.0-55-generic
  linux-image-extra-3.13.0-57-generic linux-image-extra-3.13.0-58-generic
  nvidia-opencl-icd-331
0 aktualisiert, 0 neu installiert, 14 zu entfernen und 0 nicht aktualisiert.
Remv libcuda1-331 [340.76-0ubuntu0.1]
Remv linux-headers-3.13.0-55-generic [3.13.0-55.94]
Remv linux-headers-3.13.0-55 [3.13.0-55.94]
Remv linux-headers-3.13.0-57-generic [3.13.0-57.95]
Remv linux-headers-3.13.0-57 [3.13.0-57.95]
Remv linux-headers-3.13.0-58-generic [3.13.0-58.97]
Remv linux-headers-3.13.0-58 [3.13.0-58.97]
Remv linux-image-extra-3.13.0-55-generic [3.13.0-55.94]
Remv linux-image-3.13.0-55-generic [3.13.0-55.94]
Remv linux-image-extra-3.13.0-57-generic [3.13.0-57.95]
Remv linux-image-3.13.0-57-generic [3.13.0-57.95]
Remv linux-image-extra-3.13.0-58-generic [3.13.0-58.97]
Remv linux-image-3.13.0-58-generic [3.13.0-58.97]
Remv nvidia-opencl-icd-331 [340.76-0ubuntu0.1]
$

Der Befehl gehört auf jeden Fall wieder rein. Das ist die übliche (und quasi einzige) Systempflege unter Linux. Damit werden schnell paar 100 MB oder gar GB frei. Ob da noch irgendwo eine 3KB-Konfigurationsdatei rumliegt, ist dabei Nebensache. Wenn, dann sollte --purge ergänzt werden. Aber erst, wenn das was bringt. Ich glaube, wir reden alle aneinander vorbei und du, Hans, verwechelst, was rc bedeutet. Das wurde korrekt entfernt, wenn dort rc steht.

Schau dir einfach die Dateiliste an:

dpkg -L linux-image-3.13.0-61-generic

Da bleibt nix übrig, da liegt auch nix in /etc an Konfigurationen. Genauso bei den Headern und Extras.

Fazit: Solange nicht das Gegenteil bewiesen ist, bleibt nix übrig. Unstrittig ist, dass autoremove entfernt. Ob --purge noch was bringt, kann ich gerne testen, allerdings ist die Ordnerüberwachung auf komplett / einschließlich /proc extrem langsam, daher lass ich das heute mal sein, wenn kein besserer Vorschlag kommt. autoremove jedenfalls haut hin, auch mit df -h überprüfbar.

Zusatz: Davon abgesehen, wir fanden letztens raus, dass autoremove mit --purge nachgeschoben werden kann. Ich teste das jetzt. Dann sehen wir, ob noch was übrig war:

Entfernt wurde ohne purge:

Die folgenden Pakete werden ENTFERNT:
  libcuda1-331 linux-headers-3.13.0-55 linux-headers-3.13.0-55-generic
  linux-headers-3.13.0-57 linux-headers-3.13.0-57-generic
  linux-headers-3.13.0-58 linux-headers-3.13.0-58-generic
  linux-image-3.13.0-55-generic linux-image-3.13.0-57-generic
  linux-image-3.13.0-58-generic linux-image-extra-3.13.0-55-generic
  linux-image-extra-3.13.0-57-generic linux-image-extra-3.13.0-58-generic
  nvidia-opencl-icd-331

Auch bzr aus etckeeper warnt dabei, dass keine Konfiguration zum Sichern vorhanden sei. Und wenn, Hans, warum schmeißt du denn den Befehl wirklich raus, wenn du doch der Meinung seist, dass er mit --purge zusammen optimal sei? Oder was macht er denn dann deiner Meinung nach?

Interessant, es blieb das übrig:

$ sudo apt-get autoremove --purge
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut.       
Statusinformationen werden eingelesen.... Fertig
Die folgenden Pakete werden ENTFERNT:
  linux-headers-3.13.0-59* linux-headers-3.13.0-59-generic*
  linux-image-3.13.0-59-generic* linux-image-extra-3.13.0-59-generic*
0 aktualisiert, 0 neu installiert, 4 zu entfernen und 0 nicht aktualisiert.
Nach dieser Operation werden 271 MB Plattenplatz freigegeben.
Möchten Sie fortfahren? [J/n]

Die kommen oben aber gar nicht vor. Das sind auch nicht uralte Kernel aus einer anderen Reihe. Fakt ist, dass der erste Befehl mir 813 MB frei machte, mit purge sind es 271 mehr. Auf meinem Rechner. Ihr könnt ja selber mal testen.

Also sollte der Befehl wieder rein, aber mit --purge. Warum also flog er raus? Das verstehe, wer will. aasche kann hier nur managen, aber Hans, wie kommst du zu der Aussage, dass der Befehl nix taugt und wenn das so ist, wieso hast du nicht einfach das purge ergänzt, damit er was taugt? Jetzt kann man ja nicht mal mehr den Großteil entfernen, bringt niemandem was, das rausgeworfen zu haben. Aber diskutieren wir das hier ruhig aus, bevor es einen Edit War gibt...

Grüße, Benno

Benno-007

Anmeldungsdatum:
28. August 2007

Beiträge: 29240

Wohnort: Germany

Ergänzung: Ich bin noch etwas weiter:

$ dpkg -l | grep linux-image-3.13.0-57
rc  linux-image-3.13.0-57-generic                         3.13.0-57.95                                        amd64        Linux kernel image for version 3.13.0 on 64 bit x86 SMP
$ dpkg -l | grep linux-image-3.13.0-59
$

Die ohne purge entfernten sind mit rc vermerkt, die mit purge ohne. purge entfernt also auch den Eintrag aus der Status-Datenbank, dass es mal installiert WAR. Dieser Eintrag heißt NICHT, dass Konfigurationen übrigbleiben, wenn keine vorhanden waren. Es unterscheidet sich hier nur im Status-Eintrag. Das ist normal und gewünscht. Dennoch sollte purge zu dem Befehl dazu, da offenbar manche Kernel ohne das "hängenbleiben". Ihr könnt ja bei euch auch mal testen. Vielleicht haben die auch nur bei den 59-er-Kerneln irgendwas anders verpackt, was sich dann nicht ohne purge autoremoven lies. Das betrifft nur den einen Kernel bei mir. Wie ist es bei euch? Simulation:

apt-get -s autoremove --purge

Aber eigentlich viel Wind und Aufwand um nichts. Immerhin kann der Befehl nun bestätigt und mit purge optimiert werden.

Benno-007

Anmeldungsdatum:
28. August 2007

Beiträge: 29240

Wohnort: Germany

Ich glaub, ich hab's. Ich hatte auch immer drei Kernel. Nun sind es nur noch zwei. Achtet mal drauf, ob autoremove generell drei übrig lässt und mit purge zusammen nur zwei. Das ist vermutlich sogar mehr ein Feature als ein Bug.

Hans9876543210

Anmeldungsdatum:
2. Januar 2011

Beiträge: 3741

Moin,

Benno-007 schrieb:

1. steht der Befehl noch mehrmals unter weitere Möglichkeiten und zweitens weiß ich nicht, was das soll. Der Befehl funktioniert!

Es ging auch lediglich um oben aufgeführten Satz...

Der Befehl gehört auf jeden Fall wieder rein.

Der ist ja auch nachwievor drin, lediglich mit der Option "purge".

und du, Hans, verwechelst, was rc bedeutet. Das wurde korrekt entfernt, wenn dort rc steht.

Den Status setzt ja die Paketverwaltung 😉

Fakt ist, dass der erste Befehl mir 813 MB frei machte, mit purge sind es 271 mehr.

Darum steht im Wiki ja auch nachwievor drin:

1
sudo apt-get autoremove --purge 

Also sollte der Befehl wieder rein, aber mit --purge. Warum also flog er raus?

Es ist doch noch drin! Am besten du schaust dir die Versionshistorie des Wikiartikels an.

Aber eigentlich viel Wind und Aufwand um nichts. Immerhin kann der Befehl nun bestätigt und mit purge optimiert werden.

Ja!

Vorher:

Weitere Möglichkeiten

Ab Ubuntu 13.04 kann alternativ der folgende Befehl verwendet werden:

sudo apt-get -s autoremove --purge 

Hier wird vorher getestet (-s = simulieren), was das Paketsystem als unnötige Pakete definiert und deinstallieren würde. Enthält die Ausgabe nichts erhaltenswertes (praktisch also nur ältere Kernelversionen), schreitet man zur Tat:

sudo apt-get autoremove --purge 

Dadurch werden alle alten Kernel bis auf die beiden aktuellsten Kernel entfernt (situationsabhängig ist es auch möglich, dass manchmal drei Kernel verbleiben). Ab Ubuntu 13.10 reicht ein:

sudo apt-get autoremove 

Nachher:

Weitere Möglichkeiten

Ab Ubuntu 13.04 kann alternativ der folgende Befehl verwendet werden:

sudo apt-get -s autoremove --purge 

Hier wird vorher getestet (-s = simulieren), was das Paketsystem als unnötige Pakete definiert und deinstallieren würde. Enthält die Ausgabe nichts erhaltenswertes (praktisch also nur ältere Kernelversionen), schreitet man zur Tat:

sudo apt-get autoremove --purge 

Dadurch werden alle alten Kernel bis auf die beiden aktuellsten Kernel entfernt (situationsabhängig ist es auch möglich, dass manchmal drei Kernel verbleiben).

Benno-007

Anmeldungsdatum:
28. August 2007

Beiträge: 29240

Wohnort: Germany

Wie geil, das ist ja lustig: Kann den Link dank Ubuntu Phone noch immer nicht einfügen, aber im diff sah es echt so aus für mich, als ob das Rote rausflog. Dass drüber in Weiß bereits nochmal autoremove mit purge stand, ging mir dabei völlig unter. Das Grüne ohne autoremove hat meine Gedanken völlig gefesselt gehabt. Nun denn, dann ist ja nun alles so, wie es sein soll. Danke für die Erklärung.

kmu-net.ch

Avatar von kmu-net.ch

Anmeldungsdatum:
15. März 2010

Beiträge: 35

Wohnort: Zürich, Schweiz

Der reguläre Ausdruck für den Stream Editor im Abschnitt "Kernel deinstallieren - weitere Möglichkeiten" ist leider noch nicht ganz wasserdicht:

dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\([-0-9]*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d'
linux-headers-3.13.0-61
linux-headers-3.13.0-61-generic
linux-image-3.13.0-61-generic
linux-image-extra-3.13.0-61-generic
linux-libc-dev:i386

Der Eintrag "linux-libc-dev:i386" hat hier nichts verloren - wir wollen schliesslich nicht den Quellcode der Standard-C-Bibliothek deinstallieren. Das Suchmuster müsste wohl dahingehend geändert / erweitert werden, dass nur noch Zeilen mit den Kernel-typischen Versionsnummern gelistet werden (-\n\.\n\n\.\n-\n\n).

Vielleicht ist ja ein Regex-Crack unter uns, der das mal eben so aus dem Ärmel schüttelt... Ich schubse es mal auf meine Pendenzenliste. Vielleicht erledigt es sich ja in der Zwischenzeit 😉

Xeno Team-Icon

Ehemalige

Anmeldungsdatum:
6. April 2005

Beiträge: 2595

Wohnort: Schweiz

Hallo zusammen

Ich habe noch eine Frage zum Artikel: Er ist offiziell (Infobox oben) nur fürs angegraute 12.04 getestet, aber es finden sich im Artikel dann doch etliche Infos auch (und spezifisch) zu 14.04. Ab wann gilt der Status "getestet" auch für 14.04? Ist er hier eventuell schon (länger) erreicht? Dann sollte man das auch hineinschreiben. Falls aber ein spezifischer Prozessablauf fürs Testen vorgesehen ist und der hier (noch) nicht (vollständig) gemacht wurde, muss man es wohl so lassen (oder natürlich jemand macht die Tests). Mit Bezug auf den Inhalt des Artikels ist der Punkt aber im Ist-Zustand etwas komisch.

Im Übrigen Dank an die Autoren.

Lg X.

EDIT: Wurde von guten Geistern aktualisiert, Subthema erledigt.

kmu-net.ch

Avatar von kmu-net.ch

Anmeldungsdatum:
15. März 2010

Beiträge: 35

Wohnort: Zürich, Schweiz

'-\d\.\d\d\.\d-\d\d' oder so würde das Suchmuster natürlich heissen, '\d' für "digit" nicht '\n', was ja für "newline" steht 😕

Hans9876543210

Anmeldungsdatum:
2. Januar 2011

Beiträge: 3741

kmu-net.ch schrieb:

Vielleicht ist ja ein Regex-Crack unter uns, der das mal eben so aus dem Ärmel schüttelt...

Bin ich zwar nicht, aber müsste es nicht so klappen:

dpkg -l linux-[hi]* | sed '/^ii/!d;/'"$(uname -r | sed "s/\([-0-9]*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d'

kmu-net.ch

Avatar von kmu-net.ch

Anmeldungsdatum:
15. März 2010

Beiträge: 35

Wohnort: Zürich, Schweiz

Hans9876543210 schrieb:

Bin ich zwar nicht, aber müsste es nicht so klappen:

dpkg -l linux-[hi]* | sed '/^ii/!d;/'"$(uname -r | sed "s/\([-0-9]*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d'

Danke und Verzeihung der langen Antwortzeit wegen, ich stehe momentan bei der Arbeit ziemlich unter Druck. Den Ansatz, schon vor der Übergabe an den Stream-Editor zu filtern, finde ich gut. Ich werde das Ganze gelegentlich in einer VM prüfen, vor allem daraufhin, ob mit den Begriffen 'headers' und 'image' alles Notwendige abgedeckt ist, oder ob da noch etwas zu den Kernel-Paketen Gehörendes durchfällt. Danach könnte man die Befehlszeile eigentlich einpflegen.

kmu-net.ch

Avatar von kmu-net.ch

Anmeldungsdatum:
15. März 2010

Beiträge: 35

Wohnort: Zürich, Schweiz

Vorschlag: Freigabe / Übernahme des SED-Scripts von Hans9876543210

Fall niemand Einwände hat, kann man das Script wohl übernehmen, anlässlich der jüngsten Säuberungs-Aktion auf meinem Hauptrechner hat es sämtliche Einträge gefunden, hier am Beispiel der 0-44-er-Inkarnation:

1
2
3
4
5

linux-headers-3.13.0-44
linux-headers-3.13.0-44-generic
linux-image-3.13.0-44-generic
linux-image-extra-3.13.0-44-generic

Leichen hinterlässt die Methode dennoch, was natürlich nichts mit dem SED-Script zu tun hat, so beschwert sich z.B. dpkg:

1
dpkg: Warnung: Während Entfernens von linux-image-3.13.0-65-generic ist Verzeichnis »/lib/modules/3.13.0-65-generic« nicht leer, wird daher nicht gelöscht

und hinterlässt dann prompt noch zwei Module für den vmware player, welche dann, der Korrektheit halber, noch händisch entfernt werden müssten.

Dennoch, die hier geschilderte Methode schafft pro Monat schon mal so ein Gigabyte Plattenplatz frei, was vor allem dann relevant ist, wenn man eine separate, knapp dimensionierte /boot-Partition eingerichtet hat und bietet trotzdem die Möglichkeit, gezielt bestimmte Kernel zu behalten.

Letztlich wünschenswert wäre wohl ein gut funktionierendes Bash-Script, welches man mit einem grafischen Dialog noch ein wenig aufpeppen könnte, wie ja bereits erwähnt unter http://axebase.net/blog/2015/07/26/kernel-remover-aus-siduction-in-ubuntu/

Dieses Script habe ich mir jedoch bisher weder angeschaut noch es getestet.

Bilder

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13075

kmu-net.ch schrieb:

Vorschlag: Freigabe / Übernahme des SED-Scripts von Hans9876543210

Wenn ich das richtig sehe, soll das dazu dienen alte Kernel zu entfernen. Das macht bei mir aber sudo apt-get autoremove schon. Warum braucht man dann das Skript?

kmu-net.ch

Avatar von kmu-net.ch

Anmeldungsdatum:
15. März 2010

Beiträge: 35

Wohnort: Zürich, Schweiz

Hallo rklm

Du siehst es richtig, es geht letztlich darum, alte Kernel samt ihren Quellen zu entfernen.

Während apt-get autoremove, welches ja im Kernel-Artikel bereits beschrieben ist, sämtliche Kernel bis auf den letzten entfernt, bieten die alternativen Methoden eben die Möglichkeit, gezielt bestimmte Kernel zu behalten.

Kernel sind inzwischen riesige Ungetüme mit unzähligen Aufgaben und Funktionen. Oft vergeht geraume Zeit, bist Du feststellst, dass mit dem aktuellen Kernel irgendwas nicht mehr funktioniert. Dieses Fehlverhalten ist dann oft auch schon in der unmittelbar vorhergehenden Kernel-Version enthalten.

Dann schätzt Du Dich glücklich, wenn Du auf eine weiter zurück liegende Version zurück greifen kannst, insbesondere dann, wenn Du spezielle Dinge als Module eingebunden hast, wie in meinem Fall z.B. ein ZFS-Dateisystem, auf welches Du sonst nicht mehr zugreifen kannst.

Alles schon erlebt 😐

Gruss & happy hacking...

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13075

kmu-net.ch schrieb:

Du siehst es richtig, es geht letztlich darum, alte Kernel samt ihren Quellen zu entfernen.

Während apt-get autoremove, welches ja im Kernel-Artikel bereits beschrieben ist, sämtliche Kernel bis auf den letzten entfernt, bieten die alternativen Methoden eben die Möglichkeit, gezielt bestimmte Kernel zu behalten.

Das Skript soll nur die Liste der installierten Kernel liefern, die man dann manuell deinstallieren kann. Danke für die Aufklärung!^

Wenn ich das richtig sehe, kann man die numerische Version des Kernels aber auch einfacher aus uname -r extrahieren (Zeile 3):

1
2
3
4
$ uname -r | sed "s/\([-0-9]*\)-\([^0-9]\+\)/\1/"
3.13.0-66
$ uname -r | sed 's#[^0-9]*$##'
3.13.0-66

Wenn ich alle Zusammenhänge richtig sehe, wäre dies eine Alternative zu dem gezeigten Skript:

1
dpkg -l 'linux-image-*' 'linux-headers-*' | awk '/^rc/ && !/'"$(uname -r | sed 's#[^0-9]*$##')"'/ {print $2}'

kmu-net.ch

Avatar von kmu-net.ch

Anmeldungsdatum:
15. März 2010

Beiträge: 35

Wohnort: Zürich, Schweiz

Hallo rklm

Danke für Deinen Beitrag - ein interessanter Ansatz - mit awk bin ich leider nicht so vertraut.

Spannend ist, dass die beiden Ansätze auf meinem Arbeitsrechner zu unterschiedlichen Resultaten führen:

1
2
3
4
5
6
7
8
9
dpkg -l 'linux-[ih]*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\([-0-9]*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d'
linux-headers-3.11.0-13
linux-headers-3.11.0-13-generic
linux-headers-3.13.0-66
linux-headers-3.13.0-66-generic
linux-image-3.11.0-13-generic
linux-image-3.13.0-66-generic
linux-image-extra-3.11.0-13-generic
linux-image-extra-3.13.0-66-generic
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
dpkg -l 'linux-image-*' 'linux-headers-*' | awk '/^rc/ && !/'"$(uname -r | sed 's#[^0-9]*$##')"'/ {print $2}'
linux-image-3.11.0-12-generic
linux-image-3.11.0-17-generic
linux-image-3.11.0-18-generic
linux-image-3.11.0-22-generic
linux-image-3.8.0-31-generic
linux-image-extra-3.11.0-12-generic
linux-image-extra-3.11.0-17-generic
linux-image-extra-3.11.0-18-generic
linux-image-extra-3.11.0-22-generic
linux-image-extra-3.8.0-31-generic

Das eine Skript findet, was das andere "nicht sieht" - Mann kann natürlich nun die beiden Skripte kombiniert einsetzen, doch wirklich sauber ist das nicht 😕

Vielleicht kann das ja mal jemand analysieren?