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.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13075

kmu-net.ch schrieb:

Vielleicht kann das ja mal jemand analysieren?

Das Hauptproblem: Ich hatte ein "!" übersehen, so dass ich dachte, alle Pakete sollten ausgegeben werden, die nicht installiert (Status "ii") sind und wo deshalb die Konfigurationsdateien entfernt werden können. Aber es geht scheinbar darum, alle auszugeben, die installiert sind. Dann also so:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
$ dpkg -l 'linux-image-*' 'linux-headers-*' | awk '/^ii/ && !/'"$(uname -r | sed 's#[^0-9]*$##')"'/ {print $2}' >| x3
$ !diff
diff -U3 <(sort x1) <(sort x3)
--- /dev/fd/63	2015-11-06 14:11:14.768880567 +0100
+++ /dev/fd/62	2015-11-06 14:11:14.768880567 +0100
@@ -4,9 +4,11 @@
 linux-headers-3.13.0-39-generic
 linux-headers-3.13.0-66
 linux-headers-3.13.0-66-generic
+linux-headers-generic
 linux-image-3.13.0-34-generic
 linux-image-3.13.0-39-generic
 linux-image-3.13.0-66-generic
 linux-image-extra-3.13.0-34-generic
 linux-image-extra-3.13.0-39-generic
 linux-image-extra-3.13.0-66-generic
+linux-image-generic

Die Datei "x1" enthält das Ergebnis des "alten" Skriptes mit sed. Das hat also zwei Pakete nicht ausgegeben.

Ganz generelle Anmerkung: wenn man alles löschen will, das nicht mehr benötigt wird, reicht i.d.R. folgendes:

1
dpkg-query -l | awk '/^rc/ {print $2}' | sudo xargs -d \\n apt-get purge

Das muss man gar nicht auf Kernel einschränken. Dann spart man auch mehr Platz. ☺

noisefloor Team-Icon

Anmeldungsdatum:
6. Juni 2006

Beiträge: 29567

Hallo,

IMHO sollte das Skript - wie auch immer es am Ende aussieht - in einen eigenen Artikel wie z.B. Skripte/alte Kernel entfernen ausgelagert werden und im Kernel Artikel wird darauf verlinkt.

  • ist es "sauberer" ("one topic, one thread")

  • ist es so einfacher, beide Artikel zu warten

Gruß, noisefloor

Hans9876543210

Anmeldungsdatum:
2. Januar 2011

Beiträge: 3741

rklm schrieb:

Aber es geht scheinbar darum, alle auszugeben, die installiert sind. Dann also so:

Ja und nein. Wenn man sich die Supportthreads zu den Themen Kernel, /boot, kein Speicherplatz etc durchliest, dann sind oftmals Kernelversionen bereits vorhanden, die teils installiert sind oder zur Installation vorgemerkt etc. Da kann womöglich nicht mehr der aktuellste und frisch installierte Kernel gebootet werden, weil es noch nicht vollständig installiert ist. Da trifft dann ii nicht mehr zu. Den Filter auf ii würde ich daher nicht unbedingt für sinnvoll halten. Letztlich ist es aber wie bei allen, man kann nicht alles regeln. Auch das beste Wiki / der beste Einzeiler nützt nichts, wenn es nicht gelesen wird. Den Punkt zur Problembehebung sehen viele gar nicht. Da wäre eine weitere Auslagerung des "Skriptes" auch egal. Nebenbei: Theoretisch könnte man eine ToDo Liste erstellen, so quasi: 5 Punkte die man nach einer Ubuntu Installation beachten sollte. Den Hinweis dann dick und fett im Portal anheften.

Ganz generelle Anmerkung: wenn man alles löschen will, das nicht mehr benötigt wird, reicht i.d.R. folgendes:

dpkg-query -l | awk '/^rc/ {print $2}' | sudo xargs -d \\n apt-get purge

Das muss man gar nicht auf Kernel einschränken. Dann spart man auch mehr Platz. ☺

Sprich alles, was sich im Status rc befindet, würde dann gepurged werden. Das betrifft i.d.R. aber bereits nur die Pakete, die bereits removed wurden und somit nur noch die Konfigurationsdateien. Ich mache das zwar auch immer ganz gerne, aber wirklich viel freien Platz schafft man dadurch nicht.

fusi1939

Anmeldungsdatum:
1. August 2015

Beiträge: Zähle...

user:kmu-net.ch schrieb

> Vielleicht kann das ja mal jemand analysieren?

Unter 'Weitere Möglichkeiten' ist die Befehlszeile für 'zu_entfernende_Kernel' weiter zu präzisieren. Um den verschiedenen Kernel-Update-Bezeichnungen gerecht zu werden, muß die Spalte 3 für die installierte Version hinzugezogen werden. Bei mehreren Betriebssystemen ist unbedingt grub an der richtigen Stelle neu zu konfigurieren, damit keine Updates verloren gehen.

Der Ablauf sieht dann so aus:

~$ sudo update-grub	

#im Hauptprogramm von grub (Ubuntu 14.04, wenn z.B. noch Ubuntu 12.04 als weitere Version verwendet wird)

~$ dpkg -l 'linux-[hi{,1}]*' |sed '/^ii/!d; /'"$(uname -r |sed 's/\([^-]*\)-\([0-9]*\).*$/\1[-.]\2/')"'/d;s/[^ ]*[ ]*\([^ ]*\).*$/\1/'|tee zu_entfernende_Kernel
~$ cat zu_entfernende_Kernel | xargs sudo apt-get -y purge

dazu Beispiel ubuntu 14.04

~$ dpkg -l 'linux-[hi{,1}]*' |sed '/^ii/!d; /'"$(uname -r |sed 's/\([^-]*\)-\([0-9]*\).*$/\1[-.]\2/')"'/d;s/[^ ]*[ ]*\([^ ]*\).*$/\1/'|tee zu_entfernende_Kernel
linux-headers-3.13.0-65
linux-headers-3.13.0-65-generic
linux-headers-3.13.0-66
linux-headers-3.13.0-66-generic
linux-image-3.13.0-65-generic
linux-image-3.13.0-66-generic
linux-image-extra-3.13.0-65-generic
linux-image-extra-3.13.0-66-generic


Gegenprobe bezüglich Eindeutigkeit der installierten Version, Spalte 3  (z.B. mit .67 oder -67):
~$ dpkg -l 'linux-[hi{,1}]*' |sed '/^ii/!d; /'"$(uname -r |sed 's/[^-]*-\([0-9]*\).*$/\1/')"'/!d;s/[^ ]*[ ]*\([^ ]*[ ]*\)\([^ ]*\).*$/#\1#\2/'|tee gegenwärtiger_Kernel  # inklusive installierter Version
#linux-headers-3.13.0-67                               #3.13.0-67.110
#linux-headers-3.13.0-67-generic                       #3.13.0-67.110
#linux-headers-generic                                 #3.13.0.67.73
#linux-image-3.13.0-67-generic                         #3.13.0-67.110
#linux-image-extra-3.13.0-67-generic                   #3.13.0-67.110
#linux-image-generic                                   #3.13.0.67.73

Nachbetrachtungen:
~$ sudo update-grub 	#im Hauptprogramm (Ubuntu 14.04) verwenden, um im Zweitprogramm (12.04) die aktuelle Kernelversion erreichen zu können
und um vorbereitete Kernel-Updates (bei 12.04) versehentlich nicht zu löschen
Weiterhin ändert sich wegen einer nicht eindeutigen Schreibweise .67 und -67 in Spalte 2 und 3 bei 'dpkg -l':
uname -r |sed 's/\([^-]*\)-\([0-9]*\).*$/\1[-.]\2/'
3.13.0[-.]67
Bevorzugen könnte man noch am Beginn der Kommandzeile
~$ dpkg -l 'linux-image-*' 'linux-headers-*' ...

aasche

(Themenstarter)

Anmeldungsdatum:
30. Januar 2006

Beiträge: 14259

noisefloor schrieb:

IMHO sollte das Skript - wie auch immer es am Ende aussieht - in einen eigenen Artikel wie z.B. Skripte/alte Kernel entfernen ausgelagert werden und im Kernel Artikel wird darauf verlinkt.

  • ist es "sauberer" ("one topic, one thread")

  • ist es so einfacher, beide Artikel zu warten

+1 und hiermit erledigt.

apt-ghetto

Anmeldungsdatum:
3. Juni 2014

Beiträge: 2943

Meiner Meinung nach müsste man

dpkg -l 'linux-[ih]*'  

zu

dpkg -l 'linux-[ihs]*'  

abändern, damit der Befehl auch mit EFI-Installationen funkioniert.

Allerdings:

  • weiss ich nicht, ob auch die Teile mit sed angepasst werden müssen

  • weiss ich nicht, wie es mit EFI-Systemen und deaktiviertem Secure Boot aussieht

noisefloor Team-Icon

Anmeldungsdatum:
6. Juni 2006

Beiträge: 29567

Hallo,

weiss ich nicht, wie es mit EFI-Systemen und deaktiviertem Secure Boot aussieht

Auf meine Systemen mit EFI aber deaktiviertem Secure Boot werden standardmäßig beide Kernel installiert - also der normale und der signed-Kernel.

Gruß, noisefloor

apt-ghetto

Anmeldungsdatum:
3. Juni 2014

Beiträge: 2943

Da keine weiteren Kommentare dazu kamen, habe ich es mal angepasst.

BillMaier Team-Icon

Supporter

Anmeldungsdatum:
4. Dezember 2008

Beiträge: 6492

mittlerweile macht das ja

apt-get autoremove

oder?

Xeno Team-Icon

Ehemalige

Anmeldungsdatum:
6. April 2005

Beiträge: 2595

Wohnort: Schweiz

BillMaier schrieb:

mittlerweile macht das ja

apt-get autoremove

oder?

Nein, das stimmt in der Form nicht. Wird der Befehl ohne Paketname verwendet, wird alles vom System geworfen, was so herumtrümmert, also alle alten Kernel, aber auch noch alle anderen nicht mehr benötigten Pakete.

Natürlich kann man den Befehl auch dazu verwenden, nur bestimmte alte Kernel zu entfernen. Dann muss man aber ganz genau wissen, wie die (ihre Pakete) heissen. Der Artikel gibt aber auch noch an, wie man überhaupt herausfindet, welche Kernel auf dem System sind, und das weiss man mithin keineswegs "einfach so". Und oft will man eben nicht alle alten Kernel deinstallieren, sondern nur gewisse.

Unterm Strich ist der Befehl nicht redundant zu den Infos des Artikels.

Lg X.

BillMaier Team-Icon

Supporter

Anmeldungsdatum:
4. Dezember 2008

Beiträge: 6492

Ok, verstehe. Habe jetzt auch die erste Diskussionsseite dazu gelesen, die Frage kam ja schon mehrfach auf.

Es ist natürlich immer die Frage, wie man auf diesen Artikel stößt bzw. was man will.

In meinem Fall sind mehrfach Server von meinen Vorgängern oder Kunden mit LVM paritioniert - nach den Grundeinstellungen bei Ubuntu mit separater und (imho) zu kleiner /boot - Partition.

Also muss man alte Kernels löschen. Dafür tut es dann das autoremove.

Nur noch als Vorschlag: Könnte man das an den Anfang des Artikels stellen mit einem entsprechenden Hinweis - und die alternativen Möglichkeiten nach hinten, quasi als Spezialanforderung?

Oder was sind die Gründe, weshalb jemand nach diesem Artikel sucht? Was braucht die so gerne angeführte "Zielgruppe"? 😉

aasche

(Themenstarter)

Anmeldungsdatum:
30. Januar 2006

Beiträge: 14259

Nur ein kurzer Hinweis zur Entstehungsgeschichte: der Inhalt war Bestandteil des Artikels Kernel und soll eine Problemloesung fuer diejenigen sein, die mit den "normalen", dort weiterhin aufgefuehrten Methoden scheitern. Da sich herausgestellt hat, dass gerade die Problemkinder regelmaessig einen enormen Diskussionsbedarf ausgeloest haben, der aber nichts mit dem sonstigen Inhalt des Kernel-Artikels zu tun hatte, wurde der Abschnitt in einen eigenen Artikel + Diskussion ausgelagert.

BillMaier schrieb:

Nur noch als Vorschlag: Könnte man das an den Anfang des Artikels stellen mit einem entsprechenden Hinweis - und die alternativen Möglichkeiten nach hinten, quasi als Spezialanforderung?

IMHO nicht - die erstgenannten, "normalen" Methoden reichen in der Regel aus, um alte Kernel zu entfernen. Erst wenn diese scheitern, kann das vorgestellte Skript als Alternative zum Einsatz kommen.

horstpenner

Anmeldungsdatum:
7. Februar 2016

Beiträge: 364

Der Artikel bedarf der Überarbeitung.

  • Das Skript funktioniert nicht wie beschrieben.

root@PC:/home/user# dpkg -l 'linux-[ihs]*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\([-0-9]*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d'
linux-image-4.8.0-1-amd64
linux-image-amd64
root@PC:/home/user# uname -r
4.8.0-1-amd64

Das ist jetzt zwar nicht von einem Ubuntu- Rechner aus passiert, aber es sollte keinen Unterschied machen...

  • Die Vorgehensweise ist potenziell fehleranfällig gegenüber autoremove und der sicheren Deinstallation auf normalem Weg und das wird nicht erwähnt.

  • Selbst wenn das Skript den Kernel nicht auflisten würde, der aktuell in Verwendung ist, würde die Beschreibung, dass es "alte" Kernels aufliste, falsch sein.

Siehe Aktuellen Kernel durch Skript gelöscht

Frieder108

Avatar von Frieder108

Anmeldungsdatum:
7. März 2010

Beiträge: 9320

Sorry, aber ich kann deine Zweifel nicht bestätigen - das Skript scheint zu funktionieren

frieder@T410:~$ dpkg -l | grep linux-image* | grep ii
ii  linux-image-4.8.0-27-generic                    4.8.0-27.29                                 amd64        Linux kernel image for version 4.8.0 on 64 bit x86 SMP
ii  linux-image-4.8.0-28-generic                    4.8.0-28.30                                 amd64        Linux kernel image for version 4.8.0 on 64 bit x86 SMP
ii  linux-image-extra-4.8.0-27-generic              4.8.0-27.29                                 amd64        Linux kernel extra modules for version 4.8.0 on 64 bit x86 SMP
ii  linux-image-extra-4.8.0-28-generic              4.8.0-28.30                                 amd64        Linux kernel extra modules for version 4.8.0 on 64 bit x86 SMP
ii  linux-image-generic                             4.8.0.28.37                                 amd64        Generic Linux kernel image
frieder@T410:~$ uname -r
4.8.0-28-generic
frieder@T410:~$ sudo dpkg -l 'linux-[ihs]*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\([-0-9]*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d'
linux-headers-4.8.0-27
linux-headers-4.8.0-27-generic
linux-image-4.8.0-27-generic
linux-image-extra-4.8.0-27-generic
frieder@T410:~$ 

Der Fehler in deinem verlinkten Thread dürfte woanders liegen

noisefloor Team-Icon

Anmeldungsdatum:
6. Juni 2006

Beiträge: 29567

Hallo,

Das ist jetzt zwar nicht von einem Ubuntu- Rechner aus passiert, aber es sollte keinen Unterschied machen...

Hier ist ein Ubuntu-Wiki. Was nicht Nicht-*buntu Systemen passiert, ist für's Wiki nicht relevant.

Gru0ß, noisefloor