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.

Hans9876543210

Anmeldungsdatum:
2. Januar 2011

Beiträge: 3741

Moin,

wenn der Artikel sowieso schon angefasst wird, würde ich den Abschnitt Problembehebung - Kein Speicherplatz mehr frei auch gleich noch ergänzen, da gefühlt mehrmals pro Woche das Problem hier im Forum auftritt und ein Entfernen mit apt fehlschlägt.

Der relevante Abschnitt bisher:

Problembehebung

Kein Speicherplatz mehr frei

Es sollen Aktualisierungen installiert werden, aber auf der separaten /boot-Partition ist kein Speicherplatz mehr frei. Die Paketverwaltung meldet beim Versuch, einen älteren Kernel zu deinstallieren einen Fehler:

gzip: stdout: No space left on device

Nicht mehr benötigte Kernel sollten mit dpkg entfernt werden, um genügend Platz für den neu zu installierenden Kernel zu schaffen

Der relevante Abschnitt Vorschlag:

Problembehebung

Kein Speicherplatz mehr frei

Es sollen Aktualisierungen installiert werden, aber auf der separaten /boot-Partition ist kein Speicherplatz mehr frei bzw. es sind keine freien Inodes mehr vorhanden. Die Paketverwaltung apt meldet beim Versuch, einen älteren Kernel zu deinstallieren einen Fehler:

gzip: stdout: No space left on device

Nicht mehr benötigte Kernel sollten dann mittels dpkg entfernt werden. Dazu zunächst die nicht mehr benötigten Kernelversionen ermitteln:

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

Nach Prüfung können die Kernelversionen dann entfernt werden:

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

Anschließend sollte noch kontrolliert werden, ob ggf. fehlerhaft / unvollständig installierte Pakete vorhanden sind:

dpkg -l linux-* | grep -vE '^ii|^un' 

Diese sollten dann mittels:

sudo apt-get -f install 

nachinstalliert werden.

Je nachdem, wie lange bereits keine Aktualisierungen mehr eingespielt werden können, kann es vorkommen, dass nach der Aktualisierung erneut kein Speicherplatz zur Verfügung steht. Dann sollten die Schritte wiederholt werden.

kmu-net.ch

Avatar von kmu-net.ch

Anmeldungsdatum:
15. März 2010

Beiträge: 35

Wohnort: Zürich, Schweiz

Hallo black tencate

Danke für deine Rückmeldung. Daß nach jedem Löschen ein neuer grub geschrieben wird, stört mich auch. Wenn ich denn mal Zeit und Lust habe, könnte man ja mal im Handbuch von apt rumstöbern, ob man dass optional unterbinden könnte, um das grub-update abschliessend separat auszuführen.

Gruss, kmu-net.ch

black tencate schrieb:

Hej kmu-net.ch,

und willkommen im Forum.

Geprüft, soweit für gut befunden. Vielleicht noch ein Hinweis darauf, daß man die in

cat zu_entfernende_Kernel | xargs sudo apt-get -y purge; rm zu_entfernende_Kernel 

verwendete Datei bei Bedarf vorher noch editieren kann (weil man z. B. diesen oder jenen kernel eben nicht entfernen möchte).

Was mich persönlich beim Löschen stört, ist, daß nach jedem Löschen ein neuer grub geschrieben wird. Hat aber nichts mit dem hier gemachten Verbesserungsvorschlag zu tun (und da im Hintergrund laufend, eigentlich auch wumpe).

Gruß black tencate

kmu-net.ch

Avatar von kmu-net.ch

Anmeldungsdatum:
15. März 2010

Beiträge: 35

Wohnort: Zürich, Schweiz

Hallo aasche

Danke für deinen Vorschlag. Ich bin wie erwähnt mit den Abläufen (wer ist Maintainer, wann gehört was in die Baustelle, wann ist es gut geheissen, wer stellt es dann ein etc.) noch nicht so vertraut. Da du jedoch den Link zum Editor-Artikel bereits vorbereitet hast, gehe ich davon aus, dass ich die Ergänzung so nun einbringen kann. Ich hoffe, ich bin damit niemandem auf die Füsse getreten und falls doch, ist es ja nicht in Stein gemeisselt 😉

Gruss, kmu-net.ch

aasche schrieb:

kmu-net.ch schrieb:

...

Der Inhalt der Hinweisbox ist nicht wiki-konform: im Wiki werden generell keine Smileys verwendet und welcher Editor verwendet wird, liegt allein in der Verantwortung des Nutzers. Korrekturvorschlag:

Hinweis:

Möchte man mehrere der aufgelisteten Kernel behalten, weil man z.B. im Notfall auf bestimmte stabil laufende Kernel zurückgreifen will, öffnet man die erzeugte Liste mit einem Editor [2] und entfernt dort die Einträge derjenigen Kernel-Versionen, welche man behalten möchte. Hierbei ist darauf zu achten, dass zu einer Kernel-Version zwei Einträge gehören, also sowohl linux-image-[VERSION] wie auch linux-headers-[VERSION].

Enthält die Liste schließlich nur noch Kernel-Versionen, welche man entfernen möchte, speichert man sie und verlässt den Editor.

Zur Ermittlung der zu entfernenden Kernel kann ich nichts beitragen - das muessten andere ueberpruefen.

Hans9876543210

Anmeldungsdatum:
2. Januar 2011

Beiträge: 3741

Moin,

aus gegebenen Anlass (hier oder hier) ein Test:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
~ > uname -r
3.13.0-59-generic
~ > dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d'
linux-headers-3.13.0-58
linux-headers-3.13.0-58-generic
linux-image-3.13.0-58-generic
linux-image-extra-3.13.0-58-generic
~ > dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' | xargs sudo dpkg -P
(Lese Datenbank ... 263923 Dateien und Verzeichnisse sind derzeit installiert.)
Entfernen von linux-headers-3.13.0-58-generic (3.13.0-58.97) ...
Entfernen von linux-image-extra-3.13.0-58-generic (3.13.0-58.97) ...
run-parts: executing /etc/kernel/postinst.d/apt-auto-removal 3.13.0-58-generic /boot/vmlinuz-3.13.0-58-generic
run-parts: executing /etc/kernel/postinst.d/dkms 3.13.0-58-generic /boot/vmlinuz-3.13.0-58-generic
run-parts: executing /etc/kernel/postinst.d/initramfs-tools 3.13.0-58-generic /boot/vmlinuz-3.13.0-58-generic
update-initramfs: Generating /boot/initrd.img-3.13.0-58-generic
run-parts: executing /etc/kernel/postinst.d/pm-utils 3.13.0-58-generic /boot/vmlinuz-3.13.0-58-generic
run-parts: executing /etc/kernel/postinst.d/update-notifier 3.13.0-58-generic /boot/vmlinuz-3.13.0-58-generic
run-parts: executing /etc/kernel/postinst.d/zz-update-grub 3.13.0-58-generic /boot/vmlinuz-3.13.0-58-generic
Grub-Konfigurationsdatei wird generiert …
Linux-Abbild gefunden: /boot/vmlinuz-3.13.0-59-generic
initrd-Abbild gefunden: /boot/initrd.img-3.13.0-59-generic
Linux-Abbild gefunden: /boot/vmlinuz-3.13.0-58-generic
initrd-Abbild gefunden: /boot/initrd.img-3.13.0-58-generic
erledigt
Löschen der Konfigurationsdateien von linux-image-extra-3.13.0-58-generic (3.13.0-58.97) ...
Entfernen von linux-headers-3.13.0-58 (3.13.0-58.97) ...
Entfernen von linux-image-3.13.0-58-generic (3.13.0-58.97) ...
Examining /etc/kernel/prerm.d.
Examining /etc/kernel/postrm.d .
run-parts: executing /etc/kernel/postrm.d/initramfs-tools 3.13.0-58-generic /boot/vmlinuz-3.13.0-58-generic
update-initramfs: Deleting /boot/initrd.img-3.13.0-58-generic
run-parts: executing /etc/kernel/postrm.d/zz-update-grub 3.13.0-58-generic /boot/vmlinuz-3.13.0-58-generic
Grub-Konfigurationsdatei wird generiert …
Linux-Abbild gefunden: /boot/vmlinuz-3.13.0-59-generic
initrd-Abbild gefunden: /boot/initrd.img-3.13.0-59-generic
erledigt
The link /vmlinuz.old is a damaged link
Removing symbolic link vmlinuz.old 
 you may need to re-run your boot loader[grub]
The link /initrd.img.old is a damaged link
Removing symbolic link initrd.img.old 
 you may need to re-run your boot loader[grub]
Löschen der Konfigurationsdateien von linux-image-3.13.0-58-generic (3.13.0-58.97) ...
Examining /etc/kernel/postrm.d .
run-parts: executing /etc/kernel/postrm.d/initramfs-tools 3.13.0-58-generic /boot/vmlinuz-3.13.0-58-generi

Aus meiner Sicht ok und könnte daher in den Wiki Artikel aufgenommen werden.

fusi1939

Anmeldungsdatum:
1. August 2015

Beiträge: Zähle...

Unter Weitere Möglichkeiten ist folgende Befehlszeile angegeben:

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

Diese führt beim Löschen alter Kernel zu einer Fehlermeldung und sollte deshalb wie folgt verändert werden: '.*''[-0-9]*'

  • alt: .. uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/" ..

  • neu: .. uname -r | sed "s/\([-0-9]*\)-\([^0-9]\+\)/\1/" ..

neu komplett:

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

Beispiel: Ubuntu 12.04

~$ uname -r
3.2.0-88-generic-pae

~$ dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)- ...	#derzeitige Version
linux-headers-3.2.0-86
linux-headers-3.2.0-86-generic-pae
linux-headers-3.2.0-87
linux-headers-3.2.0-87-generic-pae
linux-headers-3.2.0-88		#hat hier nichts zu suchen
linux-image-3.2.0-86-generic-pae
linux-image-3.2.0-87-generic-pae

~$ cat zu_entfernende_Kernel | xargs sudo apt-get -y purge; rm zu_entfernende_Kernel
Paketlisten werden gelesen...
:
Die folgenden Pakete haben unerfüllte Abhängigkeiten:
 linux-headers-generic : Hängt ab von: linux-headers-3.2.0-88-generic soll aber nicht installiert werden
E: Fehler: Unterbrechungen durch pkgProblemResolver::Resolve hervorgerufen; dies könnte durch zurückgehaltene Pakete verursacht worden sein.

Moderiert von aasche:

Syntax repariert, um Beitrag verstehen zu koennen.

aasche

(Themenstarter)

Anmeldungsdatum:
30. Januar 2006

Beiträge: 14259

fusi1939 schrieb:

Diese führt beim Löschen alter Kernel zu einer Fehlermeldung und sollte deshalb wie folgt verändert werden:

Danke fuer den Hinweis - erledigt.

aasche

(Themenstarter)

Anmeldungsdatum:
30. Januar 2006

Beiträge: 14259

Hans9876543210 schrieb:

wenn der Artikel sowieso schon angefasst wird, würde ich den Abschnitt Problembehebung - Kein Speicherplatz mehr frei auch gleich noch ergänzen

Und, passiert da noch etwas?

Hans9876543210

Anmeldungsdatum:
2. Januar 2011

Beiträge: 3741

aasche schrieb:

Und, passiert da noch etwas?

Hatte auf Feedback gewartet 😉 Habe jetzt den entsprechenden Wiki Abschnitt ergänzt.

kmu-net.ch

Avatar von kmu-net.ch

Anmeldungsdatum:
15. März 2010

Beiträge: 35

Wohnort: Zürich, Schweiz

Danke allerseits für die rege Beteiligung, speziell auch fusi1939 für die Korrektur des regulären Ausdrucks für den StreamEDitor.

Nun muss ich meinen eigenen Beitrag überarbeiten, da er so nicht korrekt ist 😉

So wies ich darauf hin, dass jeweils ZWEI EINTRÄGE pro Kernel-Version zu berücksichtigen seien. I.d.R. betrifft es jedoch mehr als zwei Einträge,

Beispiel:

linux-headers-3.13.0-30
linux-headers-3.13.0-30-generic
linux-image-3.13.0-30-generic
linux-image-extra-3.13.0-30-generic

Man könnte nun argumentieren, die Paketverwaltung kümmere sich dann schon um die nicht explizit aufgeführten Einträge, da wir hier jedoch eine Löschliste übergeben, besteht die Gefahr, dass gerade eines versehentlich verbliebenen Eintrags wegen ein Kernel deinstalliert wird, den man eigentlich hätte behalten wollen.

Wie wichtig der Rückgriff auf einen früheren Kernel sein kann, habe ich kürzlich wieder erfahren, als mit dem 3.13.0-58er mein mittels WINE abstrahierter portabler Mail-Client nicht mehr lief. Da war ich froh, unter dem 0-57er weiter arbeiten zu können, bis dann der 0-59er nachgereicht wurde.

So, nun mein konkreter Vorschlag für den Abschnitt "weitere Möglichkeiten".

Der relevante Abschnitt bisher:

... Hierbei ist darauf zu achten, dass zu einer Kernel-Version zwei Einträge gehören, also sowohl linux-image-[VERSION] wie auch linux-headers-[VERSION].

Enthält die Liste schließlich nur noch Kernel-Versionen, welche man entfernen möchte, speichert man sie und verlässt den Editor.

Der relevante Abschnitt, Vorschlag:

... Hierbei ist darauf zu achten, dass zu einer Kernel-Version in der Regel mehrere Einträge gehören. Diese nun manuell in einem Editor zu entfernen, kann bei vielen Einträgen in echte Arbeit ausarten. Eleganter ist es, sich dazu der Kommandozeile zu bedienen.

Ein Beispiel:

Es sollen alle Einträge der Kernel-Versionen 3.13.0-35, 3.13.0-40 und 3.13.0-45 aus der Liste entfernt werden:

cat zu_entfernende_Kernel | grep -v '3.13.0-35\|3.13.0-40\|3.13.0-45' > tmp; mv tmp zu_entfernende_Kernel 

Hat man nur wenige Einträge in der Liste, reichen auch weniger Zeichen für ein eindeutiges Suchmuster, also hier etwa

cat zu_entfernende_Kernel | grep -v '0-35\|0-40\|0-45' > tmp; mv tmp zu_entfernende_Kernel 

Mittels

cat zu_entfernende_Kernel | more 

kontrolliert man nochmals, ob die Liste nun nur noch Versionen enthält, welche man Deinstallieren möchte. Danach leitet man die Deinstallation wie oben beschrieben ein.

Ende des Vorschlags.

Mittlerweile sind der Shell-Kommandos etwas viele und es ist wohl allmählich an der Zeit, ein passendes Script oder ein Editor-Plugin zu schreiben, welches die Sache etwas benutzerfreundlicher angeht. Zum Beispiel könnte man einen Texteditor so konfigurieren, dass er beim Wählen einer Zeile die übrigen zur selben Version gehörenden gleich mit markiert. Ich schreib's mir mal auf die Pendenzenliste...

Hans9876543210

Anmeldungsdatum:
2. Januar 2011

Beiträge: 3741

Damit würde der Wiki Artikel weiter aufgebläht werden. I.d.R. funktioniert

sudo apt-get autoremove --purge

ganz gut und ist m.E. auch absolut ausreichend. Der Einzeiler ist für "Notfälle" / Problembehebungen und dann sollte man schon wissen, welche Kerneldateien /-versionen man braucht. So oft kommt das ja auch nicht vor.

Deinen Satzvorschlag:

... Hierbei ist darauf zu achten, dass zu einer Kernel-Version in der Regel mehrere Einträge gehören.

würde ich aber schon ändern.

Nebenbei der Abschnitt:

Ab Ubuntu 13.10 reicht ein:

sudo apt-get autoremove 

ist nur bedingt zu gebrauchen, weil dann immer noch die Konfigdateien zurückbleiben.

Benno-007

Anmeldungsdatum:
28. August 2007

Beiträge: 29240

Wohnort: Germany

Welche Konfigurationsdateien sollten denn bei Kerneln anfallen?

Hans9876543210

Anmeldungsdatum:
2. Januar 2011

Beiträge: 3741

Moin Benno-007

siehe hier:

~ > lsb_release -a
lsb_release -a
Distributor ID:	Ubuntu
Description:	Ubuntu 15.04
Release:	15.04
Codename:	vivid

~ > dpkg -l linux-* | grep ^ii | awk '{print $2}'
linux-firmware
linux-generic
linux-headers-3.19.0-22
linux-headers-3.19.0-22-generic
linux-headers-3.19.0-23
linux-headers-3.19.0-23-generic
linux-headers-3.19.0-25
linux-headers-3.19.0-25-generic
linux-headers-generic
linux-image-3.19.0-22-generic
linux-image-3.19.0-23-generic
linux-image-3.19.0-25-generic
linux-image-extra-3.19.0-22-generic
linux-image-extra-3.19.0-23-generic
linux-image-extra-3.19.0-25-generic
linux-image-generic
linux-libc-dev:amd64
linux-sound-base

~ > sudo apt-get autoremove
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut.       
Statusinformationen werden eingelesen.... Fertig
Die folgenden Pakete werden ENTFERNT:
  linux-headers-3.19.0-22 linux-headers-3.19.0-22-generic linux-image-3.19.0-22-generic linux-image-extra-3.19.0-22-generic
0 aktualisiert, 0 neu installiert, 4 zu entfernen und 0 nicht aktualisiert.
[Schnipp]
Linux-Abbild gefunden: /boot/vmlinuz-3.19.0-25-generic
initrd-Abbild gefunden: /boot/initrd.img-3.19.0-25-generic
Linux-Abbild gefunden: /boot/vmlinuz-3.19.0-23-generic
initrd-Abbild gefunden: /boot/initrd.img-3.19.0-23-generic
erledigt

~ > dpkg -l linux-* | grep ^rc
rc  linux-image-3.19.0-20-generic       3.19.0-20.20         amd64        Linux kernel image for version 3.19.0 on 64 bit x86 SMP
rc  linux-image-3.19.0-22-generic       3.19.0-22.22         amd64        Linux kernel image for version 3.19.0 on 64 bit x86 SMP
rc  linux-image-extra-3.19.0-20-generic 3.19.0-20.20         amd64        Linux kernel extra modules for version 3.19.0 on 64 bit x86 SMP
rc  linux-image-extra-3.19.0-22-generic 3.19.0-22.22         amd64        Linux kernel extra modules for version 3.19.0 on 64 bit x86 SMP

rc =

  • r für entfernen (Konfigurationsdateien behalten)

  • c für Konfigurationsdateien verbleibend

Welche Dateien das jetzt konkret sind, habe ich nicht ermittelt.

aasche

(Themenstarter)

Anmeldungsdatum:
30. Januar 2006

Beiträge: 14259

Hans9876543210 schrieb:

Nebenbei der Abschnitt:

Ab Ubuntu 13.10 reicht ein:

sudo apt-get autoremove 

ist nur bedingt zu gebrauchen, weil dann immer noch die Konfigdateien zurückbleiben.

Dann loesche bitte diesen Satz und den Befehl. Keine Ahnung, wer dieses Verhalten kontrolliert hat und dem Artikel hinzugefuegt hat.

Benno-007

Anmeldungsdatum:
28. August 2007

Beiträge: 29240

Wohnort: Germany

Ist schon korrekt - er wollte nur mit purge optimieren, was den Befehl aber komplizierter für die regelmäßige Pflege macht und nicht viel oder gar nichts bringt. Könnte man aber ergänzen und wer es nicht purgen mag, lässt purge halt weg.

Hans9876543210

Anmeldungsdatum:
2. Januar 2011

Beiträge: 3741

Hab den Satz jetzt erstmal rausgenommen, hoffe es ist ok. Das purge eine ganz normale Option ist, sollte ja den Lesern klar sein.