News Linux-Wissen: Die Rolle des Init-Systems im Bootprozess

Sehr guter und leicht verständlicher Artikel. Hoffe das wird eine Serie die auch Anfängern Linux nahe bringt
 
Super Artikel!

um ganz ehrlich zu sein, ich war etwas überrascht so einen Grundlagenartikel auf Computerbase zu lesen. Aber er ist wirklich super geschrieben und sehr interessant.

Das schon ein Folgeartikel versprochen wird freut mich sehr. :D Super und weiter so! :)

Wenn noch Themen vorschläge entgegengenommen werden: Ich finde das Thema Dateisysteme unter Linux sehr spannend. Alles ist dort ja eine Datei, und man hat die Qual der Wahl des Passenden Dateisystems. Es müsste ja genug Stoff für ein bis zwei Artikel da sein mit Ext4/BTRFS, dmraid, lvm dmcrypt und dmcache... ;););)
 
@fethomm

Danke, ist interessant. Könnte mMn nur noch mehr in die Tiefe gehen.


@thrawnx

Für Anfänger sollten sich Betriebssysteme dadurch auszeichnen, dass sich um den Kernel, also in diesem Fall Linux und das ini-System kein Kopf gemacht werden muss. Insofern sind die Artikel eher für Jene geeignet, die sich rein optional mit den Interna beschäftigen wollen.
 
Super Artikel! Verständlich auch für Nicht-Linux User. Für die Zukunft bitte mehr solcher Grundlagen-Artikel!
 
Danke klasse Artikel. Habe eigentlich wenig mit Linux am Hut, aber es hat Spaß gemacht zu lesen, und bin nu sogar etwas schlauer :)
 
Die Artikel von @fethomm sind seit einiger Zeit eine riesige Bereicherung für ComputerBase. Einfach klasse!
 
Kann ich nur zustimmen, echt top. Weiter so :).
 
Da nutze ich seit etwas über drei Jahren bereits Linux für alles außer Gaming und die Hälfte des Artikels ist mir neu. Coole Sache, schön verständlich gehalten, davon darf es gerne mehr sein :)
 
This man deserves a medal! Gebt dem Ferdi einen Orden! Jedes Mal ein Fest seine Artikel zu lesen! :king:
 
Ich schließe mich dem Lob mal an. Sehr lehrreich und interessant zu lesen. Weiter so =)
 
Der Artikel gibt einen guten Überblick, ist aber etwas "schlampig" in den Details.

  • Chainloading
    Zum Laden eines Linux- oder BSD-Kernels ist kein Chainload-Prozess notwendig. Grub kann diese Kernel laden, entpacken und starten. Als "Chainloading" bezeichnet man, wenn Grub einen anderen Bootloader lädt und startet. Das ist notwendig, wenn Grub nicht weiß, wie ein bestimmter Kernel zu behandeln ist (z.B. Windows oder Kernel auf CD-ROM). In diesem Falle lässt Grub die Arbeit von einem dafür vorgesehenen Bootloader (Windows-Bootloader, ISOLinux) erledigen.
  • SystemV-Init
    Das ist kein Init-System, sondern nur der erste Prozess, der gestartet wird. Der Vorteil von SystemV-Init ist, dass es extrem minimalistisch, fast trivial ist. Sein Job besteht darin, andere Programme zu starten und zu überwachen. Das ist dann im Normalfall das Init-System. Dieses hieß bisher auf vielen Linuxen "rc" oder ähnlich, war aber extrem spezifisch. Das Programm "rc" hat auch nicht viel gemacht, bis auf das Starten diverser Init-Skripts abhängig vom "Runlevel", welches von Init überliefert wurde. Ein Kritikpunkt an systemd ist, dass das minimalistische, absturzsichere SystemV-Init ersetzt wurde, statt "rc" auszutauschen. Gentoo ging z.B. den zweiten Weg, behielt SystemV-Init und führte OpenRC als Init-System ein.
  • inittab
    Da systemd das SystemV-Init entsorgt hat, hat es natürlich auch keine Verwendung für die inittab, welche ja die spezifische Konfiguration von SystemV-Init enthält.
 
Der mit Systemd ausgelieferte Logging-Daemon Journald startet wesentlich früher im Bootprozess, wodurch Fehler in frühen Bootprozess im Systemlog auftauchen und so leichter auffindbar sind.
Auch in den log-Dateien der herkömmlichen init-Prozesse steht angefangen vom Start der einzelnen CPU-Kerne alles drin. Alles, was davor schief geht, ist entweder BIOS- oder grub-abhängig und kann auch nicht von Systemd erfasst werden.

Das Szenario, in dem der Anwender einen hängengebliebenen Bootscreen abfotografiert, um in Foren oder im IRC Hilfe zu bekommen, gehört damit größtenteils der Vergangenheit an.
Ganz im Gegenteil: bisher brauchte ich nur irgendein OS, was mit dem Dateisystem etwas anfangen konnte. Die bisherigen log-Dateien waren und sind dann absolut OS-unabhängig schon mit "cat - less - more" oder etwas wie "notepad - ed -vi" les- und auswertbar. Zukünftig braucht man, wenn das Systejm nicht mehr hochkommt, irgendein OS mit laufendem systemd oder anderweitiger Spezialsoftware, die mit den Binärdateien des Systemd etwas anfangen kann.

Die Probleme dagegen, die auftauchen, wenn das OS einmal läuft, sind eh immer mit Boardmitteln zu lösen.


lightfoot schrieb:
[*]Chainloading
Zum Laden eines Linux- oder BSD-Kernels ist kein Chainload-Prozess notwendig. Grub kann diese Kernel laden, entpacken und starten. Als "Chainloading" bezeichnet man, wenn Grub einen anderen Bootloader lädt und startet. Das ist notwendig, wenn Grub nicht weiß, wie ein bestimmter Kernel zu behandeln ist (z.B. Windows oder Kernel auf CD-ROM). In diesem Falle lässt Grub die Arbeit von einem dafür vorgesehenen Bootloader (Windows-Bootloader, ISOLinux) erledigen.
Absolut richtig. Der Witz war ja, dass Bootloader dieser Art nur zur Umgehung der Beschränkungen des herkömmlichen BIOS (BS-Start von beliebigen Partitionen, mehrere parallel installierte BS) notwendig waren. LiLo machte genau das und lief. grub kann neben dem Starten des Kernel auch Bootanimationen, Klingeltöne u.ä., aber wie erfolgreich schon das Chainloading bei etwas komplexeren Konfigurationen ist, sieht man an den Beiträgen in den entsprechenden Foren. Die Forenbetreiber freuen sich bestimmt schon auf Systemd, der ähnliches mit dem nächsten Schritt des Startprozesses vorhat.
 
Zuletzt bearbeitet:
Da ich beruflich mit Linux zu tun habe und mich mit der Thematik befasst habe, finde ich den Artikel nicht so gut und ich finde, dass er ein (zumindest in Teilen) falsches Bild vermittelt. Ich wiederhole hier zwar ein paar Dinge die vor mir schon gepostet wurden, das stört mich aber nicht :)

Das beginnt recht weit oben, wo nur auf MBR, nicht jedoch das bei modernen Systemen eingesetzte GPT eingegangen wird. Gravierender: Grub zeigt basierend auf seiner Konfiguration einen Auswahlbildschirm und (entpackt und) startet dannach den ausgewählten Kernel, der dann optional seine initrd entpackt und ausführt. Der Artikel springt vom Kernel wieder in Grub zurück, was schlicht falsch ist.
Grub selbst übergibt auch nichts an das init-system, allenfalls eine Direktive an den zu startenden Kernel, der diesem explizit ein bestimmtes Programm als als erstes zu startendes vorgibt (init=/bin/bash für eine Rescue-Shell, init=/sbin/init für das normale init-system).

Runlevel sind nicht universell durchnummeriert. Init-systeme wie OpenRC (ich verwende das gerne für meine Debian-Rechner) haben benamte Runlevel wie "boot", "default" oder "shutdown", das ist aber an dieser Stelle nicht so wichtig.

Auch wenn SysV Init nicht parallel Dienste starten kann, so gibt es auch hier Alternativen die das können. Bei OpenRC (als SysV Init Aufsatz) ist das zwar als experimentell markiert, funktioniert aber sehr gut. Was mir sehr fehlt ist, dass es nicht zwingend am parallelen Starten von Diensten liegt, wie schnell ein System verfügbar ist. Die schiere Menge an Diensten die beim Start moderner Linux-Systeme hochgefahren werden ist erdrückend, vieles davon wird von den allermeisten nicht oder nur selten benötigt (und kann dann bei Bedarf bspw. über Abhängigkeiten gestartet werden).
Die Methode, alles was der Benutzer brauchen "könnte" zu starten führt dazu, dass sequentielle init-systeme ins Hintertreffen geraten, eine Reduktion der Dienste oder Starten derselben bei Bedarf ist jedoch auch mit den klassischen Systemen möglich. Selbst mit streng sequentiellem Starten kann man mit minimalen Eingriffen die Bootzeiten eines alten Core 2 Duo-Laptops von Start des Kernels (also Auswahl eines Eintrags in Grub) bis zum Anmeldebildschirm von bspw. KDE auf einstellige Sekundenwerte kommen. Dienste on-demand starten ist kein Hexenwerk, es macht sich mW. nur keiner die Mühe dass mal umzusetzen, sodass beispielsweise CUPS erst startet wenn man den ersten Drucken-Dialog aufmacht.

DBus-Nachrichten werden nicht vom Kernel gepuffert (zumindest bis KDBUS es in den Kernel schafft), sondern allenfalls vom DBus-Daemon der als normaler Dienst auf dem Rechner läuft. Was mir hier auch fehlt: klassische init-systeme nutzen den DBus im allgemeinen wenig bis garnicht, im Artikel wird nicht explizit zwischen systemd und SysV Init unterschieden.

Ein frühes starten des syslog-daemons kann man auch anders als mit systemd erreichen. Alternativ können init-systeme wie OpenRC bei Bedarf selbst logs schreiben. Wenn mein System beim Booten hängen bleibt und ich es nicht mehr starten kann, kann ich auch erstmal keine syslog-Meldungen ausgeben lassen, das ist universell bei allen Systemen so und hier kann systemd auch nichts an den Tatsachen ändern. Die binären Logfiles von systemd gereichen denn auch zum Nachteil, wenn ich ein minimalistisches System habe, oder gar von windows (bei ext bspw) auf die Partitionen zugreife: ich kann die Dateien nicht öffnen. Dazu kommt dass sie aufgrund der binären Struktur anfälliger für Korruption bei diversen Fehlerfällen sind.

Das Starten der Dienste muss nach dem Einhängen der Partitionen passieren, gerade systemd benötigt eine gemountete /usr-Partition _bevor_ es selbst starten kann. Viele Dienste benötigen sowieso Daten aus allen Teilen des Systems und deswegen werden die Partitionen auch entsprechend früh eingehängt.
 
Zuletzt bearbeitet:
fuyuhasugu schrieb:
Ganz im Gegenteil: bisher brauchte ich nur irgendein OS, was mit dem Dateisystem etwas anfangen konnte. Die bisherigen log-Dateien waren und sind dann absolut OS-unabhängig schon mit "cat - less - more" oder etwas wie "notepad - ed -vi" les- und auswertbar. Zukünftig braucht man, wenn das Systejm nicht mehr hochkommt, irgendein OS mit laufendem systemd oder anderweitiger Spezialsoftware, die mit den Binärdateien des Systemd etwas anfangen kann.

Ja, ich habe z.B. immer eine Boot-Partition, wo neben Grub und ein paar Kerneln samt initrd auch noch eine Busybox liegt (früher hatte ich dafür sash, war aber zu anstrengend ;-) Wenn ich nach irgendwelchen Experimenten das System nicht mehr gestartet bekomme, hat die Boot-Partition bisher immer gereicht, alles wieder zu reparieren. Schöne neue journald-Welt! Aber es startet ja zum Glück viel früher als mein metalog-Job, nämlich schon kurz vor dem eigentlichen Kernel ;-)

Ich habe übrigens systemd auf ein paar ArchLinux-Systemen laufen und es gefällt mir ganz gut - wenn alles funktioniert. Aber nach ein paar sehr ernüchternden Erlebnissen von systemd unter Gentoo werde ich meine zwei Gentoo-Rechner auf OpenRC belassen, ist viel einfacher wartbar.
 
Zuletzt bearbeitet:
Danke für den Artikel und die berichtigenden/erweiternden Kommentare. Ein #Linux-Wissen Stichwort wäre schön, um diese Artikel auf einer Übersichtsseite anzeigen zu können (#Linux enthält zuviel andere Artikel).
 
enzephalograph schrieb:
Die binären Logfiles von systemd gereichen denn auch zum Nachteil, wenn ich ein minimalistisches System habe, oder gar von windows (bei ext bspw) auf die Partitionen zugreife: ich kann die Dateien nicht öffnen. Dazu kommt dass sie aufgrund der binären Struktur anfälliger für Korruption bei diversen Fehlerfällen sind.

Das werde ich auch nicht verstehen, wieso man bei einem Binär-Log-Format keine Transaktionen benutzt, so dass eine korrupte Logdatei immer auf einen konsistenten Stand gebracht werden kann. Da systemd so toll modular ist, sollte man möglichst bald journald durch ein textbasiertes Logsystem ersetzen. Oder hat das schon jemand gemacht?
 
Finde ich toll das jetzt mal wieder verstärkt über linux berichtet wird. Weiter so!
 
Ein guter Artikel. Allerdings denke ich, dass der nächste Bericht über den Linux-Grafikstack noch mehr gelesen wird, weil Grafik nun mal in der Praxis noch wichtiger (oder viel wichtiger) ist, als das Booten.
 
Schöner Artikel, war wie die letzten auch für jemanden, der mit Linux eher wenig am Hut hat, gut zu verstehen.
 
Zurück
Oben