[[Vorlage(Getestet, general)]] {{{#!vorlage Wissen [:Pakete_installieren: Installation von Programmen] [:Editor:Einen Editor verwenden] optional [:Terminal: Ein Terminal öffnen] }}} [[Inhaltsverzeichnis()]] [[Bild(Wiki/Icons/tux.png, 64, left)]] Aus der [wikipedia:Betriebssystemkern:Wikipedia]: ''Ein Betriebssystemkern oder Systemkern (englisch kernel [ˈkɝːnəl]) ist der zentrale Bestandteil eines Betriebssystems. In ihm ist die Prozess- und Datenorganisation festgelegt, auf der alle weiteren Softwarebestandteile des Betriebssystems aufbauen. Er bildet die unterste Softwareschicht des Systems und hat direkten Zugriff auf die Hardware. Gängige Anforderungen an einen Systemkern sind Parallelverarbeitung verschiedener Aufgaben (Multitasking), Einhaltung zeitkritischer Grenzen, Offenheit für unterschiedlichste Anwendungen und Erweiterungen.'' Den von [wikipedia:Linus_Torvalds:Linus Torvalds] und vielen anderen entwickelten Linux-Kernel gibt es bei Ubuntu mit eigenen Anpassungen und in verschiedenen Konfigurationen. Hauptsächlich sind dies: * Desktop-Kernel oder generischer Kernel * Kernel für virtuelle Maschinen * OEM-Kernel * Mainline-Kernel (nur Ubuntu-Konfiguration, ohne Anpassungen) * Echtzeitkernel Außer dem generischen Kernel hat nur noch der [#Echtzeitkernel Echtzeitkernel] bei Spezialanwendungen wie z.B. einem [:Tonstudio:] eine gewisse Bedeutung. Ubuntu Server nutzt ebenso den generischen Kernel. [[Anker(Installation)]] = Kernel installieren = Bei der Installation von Ubuntu wird automatisch ein Kernel installiert, denn ohne diesen wäre das ganze System nicht lauffähig. Unter Ubuntu werden Kernel wie normale Software über die Paketverwaltung installiert [1]. Die entsprechenden Paketnamen heißen immer * '''linux-image-VERSION-ABINUMMER-VARIANTE''' als konkretes Beispiel * '''linux-image-4.4.0-47-generic''' Dennoch sollte man einen Kernel besser über ein [:Metapakete:Metapaket] wie * '''linux-generic''' installieren, denn nur so wird gewährleistet, dass bei einer Systemaktualisierung ("Update") neben dem Kernel automatisch die passenden Module und Kernel-Header-Dateien installiert werden. Bei der Installation eines Kernels wird dieser ebenfalls automatisch in den Bootmanager [:GRUB_2:] eingetragen, so dass beim nächsten Rechnerstart die neueste Kernel-Version gebootet wird. == Kernel neu installieren == Unter Umständen kann zur Reparatur des aktuell laufenden Kernels eine Neuinstallation nötig sein. Dies erfolgt einfach über den Befehl: {{{#!vorlage Befehl sudo apt-get install --reinstall linux-image-$(uname -r) }}} [[Anker(Deinstallation)]] = Kernel deinstallieren = {{{#!vorlage Hinweis Bei einer Aktualisierung des Kernels wird der alte Kernel niemals automatisch entfernt. Dadurch ist es möglich, noch mit dem Vorgänger-Kernel zu booten, falls es zu Problemen mit dem neueren Kernel kommen sollte. }}} Durch automatische Systemaktualisierungen (Updates) werden fehlerbereinigte Versionen des Kernels auf dem System installiert. Dies erkennt man z.B. beim Booten des Systems an mehreren Einträgen in [:GRUB_2:]. Seit [:Natty:Ubuntu 11.04] muss man das Untermenü ''"Erweiterte Optionen für Ubuntu"'' auswählen, um weitere bzw. ältere Kernel angezeigt zu bekommen. Das sieht dann beispielsweise so aus: {{{#!vorlage Tabelle <:>[[Bild(kernelauswahl_beim_booten-neu.png, x300)]] <:>[[Bild(kernelauswahl_beim_booten_2.png, x300)]] +++ <:>GRUB 2 Hauptmenü <:>Untermenü für ältere Kernel }}} Beim Vergleich der linken und der rechten Abbildung erkennt man, dass neben dem neuesten Kernel '''3.2.0-23-generic''' noch zwei ältere Kernel im System vorhanden sind: die Versionen '''3.2.0-22-generic''' und '''3.0.0-16-generic'''. Will man also im obigen Beispiel den älteren Kernel '''3.0.0-16-generic''' und die Header-Dateien deinstallieren, so sucht man in der Paketverwaltung [1] nach den Paketen * '''linux-image-3.0.0-16''' * '''linux-headers-3.0.0-16''' und deinstalliert sie. Dabei werden auch automatisch alle zugehörigen Kernel-Module entfernt, ebenso der Eintrag im Bootmanagern GRUB 2, um diesen Kernel zu booten. Da das bei Ubuntu und Xubuntu übliche [:Ubuntu Software:] alte, nicht mehr benötigte Kernel nicht anzeigt, installiert man für diese Aufgabe entweder die grafische Paketverwaltung [:Synaptic:] oder verwendet [:apt-get:] in einem Terminalfenster: {{{#!vorlage Befehl sudo apt-get remove --purge linux-image-3.0.0-16-generic linux-headers-3.0.0-16-generic }}} == Weitere Möglichkeiten == Betreibt man ein Ubuntu-System über einen längeren Zeitraum, so sind in der Regel mehrere Kernel-Versionen vorhanden. Da ein Kernel zusammen mit Header-Dateien und Kernel-Modulen einiges an Platz auf der Festplatte belegen kann (ca. 200 MiB), sollte man im Rahmen der [:Systempflege:] bei Gelegenheit ältere Kernelversionen, die man nicht mehr nutzt, deinstallieren. Besonders wichtig ist das bei verschlüsselten Systemen, die für '''/boot''' eine eigene Partition nutzen: ist diese voll belegt, können Kernel-Aktualisierungen nicht mehr automatisch installiert werden. Dazu kann der folgende Befehl verwendet werden: {{{#!vorlage Befehl sudo apt-get autoremove --purge }}} Dadurch werden alle alten Kernel bis auf die beiden neuesten Kernel entfernt (situationsabhängig ist es auch möglich, dass manchmal drei Kernel verbleiben). Eine weitere Methode ist im Artikel [:Skripte/Alte_Kernel_entfernen:] beschrieben. Alternativ siehe auch folgende Möglichkeiten: * Skript [https://blog.dustinkirkland.com/2016/06/purge-old-kernels.html purge-old-kernels] {en} * ein grafischer [https://axebase.net/blog/2015/07/26/kernel-remover-aus-siduction-in-ubuntu/ kernel-remover] {de} * Mögliche Vorgehensweisen [https://kofler.info/ubuntu-probleme-mit-vollen-boot-partitionen/ Kofler 01/2017] {de} = LTS- und HWE-Kernel = Bei den Ubuntu-LTS-Versionen (also 20.04, 22.04, …) hat man die Auswahl zwischen zwei Kerneln: * Der LTS-Kernel ist der Linux-Kernel in der Version der ursprünglichen Veröffentlichung der Ubuntu-LTS-Version, der über den versprochenen Supportzeitraum (aktuell 5 Jahre) vom Ubuntu-Kernel-Team gepflegt wird. * Man kann :arrow: [:LTS_Enablement_Stacks:] (eine andere gebräuchliche Bezeichnung ist Hardware Enablement Stacks bzw. HWE) aktivieren und erhält dann für sein LTS-System bis zur Veröffentlichung der nächsten LTS-Version die Kernel der STS-Zwischenversionen als HWE-Kernel. Nachteil: Während der ursprüngliche Kernel bei LTS-Versionen immer bis zum Ende des Support-Zeitraums gepflegt wird, trifft das auf die neueren Kernel nicht unbedingt zu. = OEM-Kernel = In Sonderfällen kann die Installation des vom Ubuntu-Kernel-Team in regelmäßigen Entwicklungszyklen veröffentlichten OEM-Kernels sinnvoll sein. Siehe hierzu: [https://wiki.ubuntu.com/Kernel/OEMKernel] {en} = Mainline-Kernel = Seit März 2009 gibt es außerdem die Möglichkeit, einen Mainline-Kernel zu installieren. Damit wird man unabhängig von der über die offiziellen Paketquellen vorgegebenen Kernel-Version. Mehr Informationen finden sich im Artikel [:Mainline-Kernel:]. = Echtzeitkernel = Für manche Spezialanwendungen wird eine zuverlässig niedrige Reaktionszeit des Systems benötigt. Eine mögliche Anwendung sind z.B. Audio-Workstations mit extrem niedrigen Latenzen. Unter Umständen hat der normale Kernel eines Ubuntu-Systems diese Anforderung nicht hinreichend erfüllen können. Für solche Fälle hat es die früher von [:Ubuntu Studio:] bereitgestellten, auf Echtzeitverhalten optimierten Kernel, die das gesamte [https://mirrors.edge.kernel.org/pub/linux/kernel/projects/rt/ "Realtime-Patchset"] {en} von Ingo Molnár enthalten haben, gegeben. Mit Ubuntu 12.04 sind diese speziellen Funktionen teilweise in den Standard-Kernel integriert worden, wodurch man nun von einem "Low Latency"-Kernel spricht (siehe auch [ubuntu_doc:community/UbuntuStudio/RealTimeKernel:Realtime Kernel] {en}). Weitere Informationen zur Konfiguration eines Tonstudio-PCs findet man im Artikel [:Tonstudio/Konfiguration:]. Für reine Desktop-Systeme bringt ein Echtzeit- oder "Low Latency"-Kernel keinen Vorteil. Im Gegenteil, unter Umständen kann der Durchsatz sinken und der Stromverbrauch steigen. Die benötigten Pakete sind über die Ubuntu-Paketquellen verfügbar. {{{#!vorlage Paketinstallation linux-lowlatency }}} = Problembehebung = == Älteren Kernel starten == In sehr seltenen Fällen kann es vorkommen, dass nach einer Aktualisierung des Kernels bestimmte Dinge teilweise oder überhaupt nicht mehr funktionieren. Ist beispielsweise das WLAN danach ohne Funktion, kann man im Auswahlmenü des Bootmanagers GRUB 2 einen älteren Kernel starten (zur Handhabung siehe auch die Bilder „GRUB2 Hauptmenü“ und „Untermenü für ältere Kernel“ im Abschnitt [#Kernel-deinstallieren Kernel-deinstallieren]). Wie im Bild "GRUB2 Hauptmenü" dargestellt, wählt man mit den Pfeiltasten den Eintrag ''"Erweiterte Optionen für Ubuntu"'' und es öffnet das Bild „Untermenü für ältere Kernel“. Hier kann anschließend ein älteren Kernel ausgewählt werden. Die Reihenfolge ist in der Regel chronologisch, d.h. der älteste Kernel steht ganz unten in der Liste. Dann bestätigt man mit [[Vorlage(Tasten, Enter)]]. == Kein Speicherplatz mehr frei == Es sollen Kernel-Aktualisierungen installiert werden, aber auf der separaten [:Manuelle_Partitionierung#Vorueberlegungen:/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, folgenden Fehler: {{{ gzip: stdout: No space left on device }}} Nicht mehr benötigte Kernel sollten dann mittels [:dpkg:] entfernt werden. Mehr dazu im Artikel [:Skripte/Alte_Kernel_entfernen#Kein-Speicherplatz-mehr-frei:]. Sollte dies nicht möglich sein, muss manuell Platz geschaffen werden. Zur Analyse macht man folgende Abfragen: {{{#!vorlage Befehl df -h # Speicherplatz df -i # Inodes }}} Diese Abfrage ist auch angebracht, wenn ein neuer Kernel nicht vollständig installiert bzw. konfiguriert werden kann. Es kann u.U. sein, dass aus Platzmangel ein Paket nicht heruntergeladen werden kann und deshalb keine Konfiguration des neuen Kernels möglich ist. === 1. Fall - /boot-Partition ist voll. === Um Platz zu schaffen, löscht man die im Verzeichnis '''/boot''' vorhandenen Dateien des ältesten vorhandenen Kernels - das ist der mit der niedrigsten Nummer. Danach können die überflüssigen Kernel deinstalliert bzw. die Paketverwaltung repariert werden. {{{#!vorlage Hinweis Eine Anleitung zur Bereinigung der /boot-Partition findet man im Wiki-Artikel "[:Skripte/Alte Kernel entfernen:]" }}} === 2. Fall - keine Inodes mehr vorhanden und/oder kein freier Speicherplatz auf der Root-Partition === Um Platz zu schaffen bzw. Inodes frei zu machen, löscht man im Verzeichnis '''/usr/scr''' die Header-Dateien der ältesten vorhandenen Kernel - das sind die mit der niedrigsten Nummer. Die Dateien der beiden neusten Kernel werden nicht gelöscht! Danach können die überflüssigen Kernel deinstalliert bzw. die Paketverwaltung repariert werden. == Verkleinerung des initramfs-Images == Als weiterführende Maßnahme zur Reduzierung des generellen Speicherplatzbedarfs des initramfs-Images in der '''/boot'''-Partition kann über die Datei '''initramfs.conf''' eine Einschränkung der für den Bootvorgang relevanten Module vorgenommen werden. Um zu erreichen, dass nur die für die Rechnerarchitektur tatsächlich erforderlichen Module geladen werden, muss in der Datei '''/etc/initramfs-tools/initramfs.conf''' der Defaultwert `MODULES=most` in `MODULES=dep` geändert werden. Anschließend kann das initramfs-Image über {{{#!vorlage Befehl sudo update-initramfs -u #für den aktuellen Kernel oder sudo update-initramfs -uk 'all' #für alle vorhandenen Kernel }}} aktualisiert werden. Alternative Optionen zum Laden der Module sind in der Manpage der '''initramfs.conf''' aufgeführt. [[Anker(HT)]] == Hyper-Threading aktivieren == [wikipedia:Hyper-Threading:] (HT oder HTT) wird bei der Installation von Ubuntu Linux manchmal nicht automatisch aktiviert. Dies kann man jedoch mit ein paar Handgriffen schnell ändern. Zuerst muss sichergestellt sein, dass ein passender Kernel mit SMP-Unterstützung installiert ist. Bei Ubuntu ist dies der '''generic'''-Kernel. Um zu prüfen, ob die Installation den Prozessor erkannt hat, gibt man im Terminal [3] folgenden Befehl ein: {{{#!vorlage Befehl lscpu }}} Wird hier unter `Thread(s) per core:` mehr als `1` angezeigt, ist der nächste Schritt nicht notwendig. Mit dem Boot-Parameter `ht=on` oder `acpi=ht` aktiviert man die Funktion manuell. Das Vorgehen ist im Artikel [:Bootoptionen:] beschrieben. Nach dem Speichern der Änderungen und einem Neustart des Rechners ist Hyper-Threading aktiv. {{{#!vorlage Hinweis Nicht jeder Prozessor, bei dem mittels des Befehls {{{#!vorlage Befehl grep ht /proc/cpuinfo \}}} das Flag `ht` angezeigt wird, ist auch tatsächlich HTT-fähig. Hier muss diese Fähigkeit erst recherchiert werden. }}} = Links = == Intern == * [:Was_ist_Linux:Was ist Linux?] * [:Kernel/Linux-Versionsnummern:] * [:Livepatch:] - Patches für den laufenden Kernel ohne Neustart des Systems einspielen * [:Kernelmodule:] * [:Mainline-Kernel:] * [:Bootoptionen:] == Extern == * [ubuntu:Kernel:Kernel] {en} im Ubuntu-Wiki * [ubuntu:Kernel/FAQ: Kernel FAQ] {en} * [ubuntu:Kernel/Dev/KernelStableSupportMatrix:Kernel Basis] {en} der verschiedenen Ubuntu-Versionen * [ubuntu:Kernel/Release/Rolling: Kernel Rolling Release] {en} - Kernel-Rückportierung auf LTS-Versionen * [ubuntu:Kernel/LTSEnablementStack: LTS Enablement Stacks] {en} und unterstützte Kernelversionen * [https://liquorix.net/ Liquorix Kernel] {en} - Kernel für Desktop-Rechner, der speziell bei unter Last stehenden Systemen eine bessere Reaktionszeit verspricht * Wikipedia: [wikipedia:Linux_(Kernel):Linux Kernel] und [wikipedia_en:Linux_kernel:Linux Kernel] * [youtube:S-kg37u4tp8&t=8m28s:Der Kernel, ein Überblick in knapp 2½ min] {de} Sebastian Bator auf der Ubucon 2012 # tag: System, Tonstudio, Server, Kernel