Hallo allerseits! Also haben wir den nächsten, vierten Stream in Folge des
Linux Administrator- Kurses eröffnet, der sicher seine Nische neben dem Devopersky-Kurs einnimmt. Mehr
Lehrer , mehr Informationen und Stände. Nun, wie immer, interessantere Informationen, die die Lehrer aufgegriffen haben.
Lass uns gehen.
Haben Sie sich jemals gefragt, was Ihr System benötigt, um Anwendungen ausführen zu können?
Das Verständnis der Prozesse zum Laden des Kernels und Starten des Linux-Systems ist wichtig, um Linux zu konfigurieren und Startprobleme zu lösen. Dieser Artikel bietet einen Überblick über den Kernel-Boot-Prozess mit dem
GRUB2-Bootloader und den
vom Systemd-Initialisierungssystem ausgeführten Start.
Tatsächlich sind zwei Ereignisse erforderlich, um einen Linux-Computer in einen funktionsfähigen Zustand zu versetzen: Kernel-Boot (Boot) und Systemstart (Startup). Der Kernel-Startvorgang beginnt beim Einschalten des Computers und endet mit der Initialisierung und dem Start von systemd durch den Kernel. Danach beginnt der Prozess des Startens des Systems, und er ist es, der den Linux-Computer in einen funktionsfähigen Zustand versetzt.

Im Allgemeinen ist das Laden des Kernels und Starten des Linux-Systems recht einfach. Es besteht aus den folgenden Schritten, die in den folgenden Abschnitten ausführlicher beschrieben werden:
- BIOS POST;
- Laden des Kernels (GRUB2);
- Kernel-Initialisierung;
- Ausführen von systemd, dem übergeordneten Element aller Prozesse.
Bitte beachten Sie, dass sich dieser Artikel mit GRUB2 und systemd befasst, da sie das Kernel-Loader- und Initialisierungsprogramm für die meisten Distributionen sind. Bisher wurden andere Optionen verwendet, die manchmal in einigen Distributionen noch vorhanden sind.
Kernel-Boot-ProzessDer Kernel-Boot-Prozess kann auf verschiedene Arten initiiert werden. Wenn der Computer ausgeschaltet ist, wird durch Einschalten des Computers der Startvorgang gestartet. Zweitens kann der Benutzer den Kernel-Startvorgang programmgesteuert über die GUI oder die Befehlszeile zum Neustart initiieren, wenn bereits ein lokaler Benutzer auf dem Computer ausgeführt wird, einschließlich des Root-Benutzers und des nicht privilegierten Benutzers. Durch einen Neustart wird der Computer zuerst ausgeschaltet und erst dann neu gestartet.
BIOS POST
Der erste Schritt im Bootprozess des Linux-Kernels hat nichts mit Linux zu tun. Dies ist der Hardware-Teil des Prozesses, der für alle Betriebssysteme gleich ist. Wenn der Computer mit Strom versorgt wird, wird als erstes POST (Power On Self Test) gestartet, das Teil des BIOS (Basic I / O System, Basic Input / Output System) ist.
Als IBM 1981 seinen ersten Personal Computer auf den Markt brachte, wurde das BIOS zur Initialisierung von Hardwarekomponenten entwickelt. POST ist Teil des BIOS, dessen Aufgabe es ist, den ordnungsgemäßen Betrieb der Computerausrüstung sicherzustellen. Wenn der POST fehlschlägt, funktioniert der Computer möglicherweise nicht richtig und der Startvorgang wird nicht fortgesetzt.
Der BIOS-POST überprüft die Grundleistung der Hardware und verursacht dann einen BIOS-
Interrupt - INT 13H, der die Bootsektoren des Kernels auf allen verbundenen Geräten mit der Fähigkeit zum Booten findet. Der erste gefundene Sektor, der einen gültigen Startdatensatz enthält, wird in den RAM geladen, wonach die Steuerung vom Startsektor auf den Code übertragen wird.
Der Bootsektor ist nur die erste Stufe. Die meisten Linux-Distributionen verwenden eine von drei Bootloader-Optionen: GRUB, GRUB2 und LILO. GRUB2 ist das neueste und wird jetzt viel häufiger verwendet als ältere Versionen.
GRUB2GRUB2 steht für "GRand Unified Bootloader, Version 2" und ist jetzt der Haupt-Bootloader für die meisten modernen Linux-Distributionen. GRUB2 ist ein Programm, das einen Computer so intelligent macht, dass er den Kernel des Betriebssystems finden und in den Speicher laden kann. Da es einfacher ist, nur GRUB zu sprechen und zu schreiben als GRUB2, werde ich in diesem Artikel wahrscheinlich den Begriff GRUB verwenden, aber GRUB2 implizieren, sofern nicht anders angegeben.
GRUB ist mit
der Multiboot-Spezifikation kompatibel, mit
der verschiedene Versionen von Linux und anderen Betriebssystemen geladen werden können. Es kann auch die Startaufzeichnung von proprietären Betriebssystemen in einer Kette starten.
Mit GRUB kann der Benutzer auch aus mehreren möglichen Kernel-Downloads für jede bereitgestellte Linux-Distribution auswählen. Dies ermöglicht das Herunterladen der vorherigen Version des Kernels, wenn die aktualisierte Version nicht korrekt gestartet werden kann oder mit einem wichtigen Teil der Software nicht kompatibel ist. GRUB kann in der Datei
/boot/grub/grub.conf
konfiguriert werden.
GRUB1 gilt heute als veraltet und wird in den meisten modernen Distributionen durch GRUB2 ersetzt, die neu geschriebene Version. Red Hat-basierte Distributionen, die um Fedora 15 und CentOS / RHEL 7 auf GRUB2 aktualisiert wurden. GRUB2 verfügt über die gleiche Startfunktionalität wie GRUB1, bietet jedoch zusätzlich Mainframe-ähnliche, befehlsbasierte Umgebungen vor dem Betriebssystem und mehr Flexibilität in der Phase vor dem Start. GRUB2 ist in
/boot/grub2/grub.cfg
konfiguriert.
Die Hauptaufgabe von GRUB besteht darin, den Linux-Kernel in den Speicher zu laden und auszuführen. Beide Versionen von GRUB funktionieren in drei Schritten ähnlich, aber in diesem Artikel werde ich GRUB2 verwenden, um zu beschreiben, wie GRUB funktioniert. Das Konfigurieren von GRUB und GRUB2 und die Verwendung von GRUB2-Befehlen geht über den Rahmen dieses Artikels hinaus.
Obwohl GRUB2 offiziell keine Schrittnummerierung verwendet, werde ich sie der Einfachheit halber in diesem Artikel verwenden.
Stufe 1Wie bereits im Abschnitt BIOS-POST erwähnt, sucht das BIOS am Ende des POST nach Boot-Datensätzen auf angeschlossenen Datenträgern, die sich normalerweise im Master-Boot-Datensatz (MBR) befinden. Anschließend lädt es den ersten gefundenen Datensatz in den Speicher und beginnt mit der Ausführung. Der Bootstrap-Code, dh die erste Stufe von GRUB2, nimmt nur sehr wenig Speicherplatz ein, da er zusammen mit der Partitionstabelle in den ersten 512-Byte-Sektor auf der Festplatte passen muss. Der Gesamtspeicherplatz für den Bootstrap-Code selbst im
Standard-MBR beträgt 446 Byte. Die 446-Byte-Datei für Stufe 1 heißt boot-img und enthält keine Partitionstabelle - sie wird separat zum Boot-Datensatz hinzugefügt.
Da der Startdatensatz so klein sein sollte, ist er nicht sehr „intelligent“ und versteht die Struktur des Dateisystems nicht. Daher besteht der einzige Zweck von Schritt 1 darin, Schritt 1.5 zu erkennen und zu laden. Um dies zu erreichen, muss sich Schritt 1.5 von GRUB im Bereich zwischen dem Startdatensatz selbst und der ersten Partition auf der Festplatte befinden. Nach dem Laden von Stufe 1.5 GRUB in den RAM überträgt Stufe 1 die Steuerung auf Stufe 1.5.
Stufe 1.5Wie oben erwähnt, sollte Schritt 1.5 von GRUB zwischen dem Startdatensatz und der ersten Partition auf der Festplatte liegen. Historisch gesehen bleibt dieser Raum aus technischen Gründen ungenutzt. Die erste Partition auf der Festplatte startet in Sektor 63, und unter Berücksichtigung des MBR in Sektor 0 gibt es 62 512-Byte-Sektoren - 31744 Byte -, in denen Sie die Datei core.img speichern können - Stufe 1,5 GRUB. Die Datei core.img wiegt 25389 Byte. Dies ist genug Speicherplatz, um sie zwischen dem MBR und der ersten Festplattenpartition zu speichern.
Da für Schritt 1.5 mehr Code verwendet werden kann, kann es ausreichen, mehrere gängige Dateisystemtreiber zu enthalten, z. B. Standard-EXT- und andere Linux-Dateisysteme, FAT und NTFS. core.img in GRUB2 ist komplexer und funktionaler als in Schritt 1.5 von GRUB1. Dies bedeutet, dass sich Stufe 2 von GRUB2 möglicherweise in einem Standard-EXT-Dateisystem befindet, jedoch nicht in einem logischen Volume. Daher ist der Standardspeicherort für Dateien der Stufe 2 das Dateisystem
/boot
bzw.
/boot/grub2
.
Beachten Sie, dass sich das Verzeichnis / boot im von GRUB unterstützten Dateisystem befinden muss. Nicht alle Dateisysteme unterstützen diese Funktion. Die Aufgabe von Stufe 1.5 besteht darin, mit den erforderlichen Dateisystemtreibern zu beginnen, um nach Dateien der Stufe 2 im / boot-Dateisystem zu suchen und die erforderlichen Treiber zu laden.
Stufe 2Alle GRUB Stage 2-Dateien befinden sich im
/boot/grub2
und in mehreren Unterverzeichnissen. GRUB2 verfügt nicht über eine Image-Datei wie in den Schritten 1 und 2. Stattdessen besteht sie hauptsächlich aus Laufzeit-Kernel-Modulen, die nach Bedarf aus dem
/boot/grub2/i386-pc
geladen werden.
Die Aufgabe von GRUB2 Stufe 2 besteht darin, den Linux-Kernel zu erkennen und in den RAM zu laden und die Steuerung der Computersteuerung auf den Kernel zu übertragen. Der Kernel und die zugehörigen Dateien befinden sich im Verzeichnis
/boot
. Kernel-Dateien sind leicht zu erkennen, da ihre Namen mit vmlinuz beginnen. Sie können den Inhalt des Verzeichnisses
/boot
auflisten, um die aktuell auf Ihrem System installierten Kernel anzuzeigen.
GRUB2 unterstützt wie GRUB1 das Laden eines von mehreren Linux-Kerneln. Das Red Hat-Paketverwaltungssystem unterstützt das Speichern mehrerer Versionen des Kernels, sodass Sie bei Problemen mit der neuesten Version die alte Version des Kernels laden können. Standardmäßig bietet GRUB ein vorinstalliertes Menü installierter Kernel, einschließlich der Rettungsoption und nach der Konfiguration der Wiederherstellungsoption.
Stufe 2 GRUB2 lädt den ausgewählten Kernel in den Speicher und überträgt die Kontrolle über die Computersteuerung auf den Kernel.
Der KernAlle Kerne haben ein selbstextrahierendes, komprimiertes Format, um Platz zu sparen. Die Kernel befinden sich zusammen mit dem ursprünglichen RAM-Image und einer Liste der Partitionen auf den Festplatten im Verzeichnis
/boot
.
Nachdem der ausgewählte Kernel in den Speicher geladen wurde und mit der Ausführung beginnt, muss er sich zunächst selbst aus der komprimierten Version der Datei extrahieren, bevor er nützliche Arbeiten ausführen kann. Sobald die Extraktion erfolgt ist, wird
systemd geladen , das das alte
SysV-Init- Programm ersetzt, und die Steuerung an dieses übertragen.
Dies ist das Ende des Kernel-Boot-Prozesses. Zu diesem Zeitpunkt werden der Linux-Kernel und systemd ausgeführt, können jedoch keine nützlichen Aufgaben für den Endbenutzer ausführen, da nichts anderes zu tun ist.
SystemstartprozessDer Systemstartprozess folgt dem Kernel-Boot-Prozess und bringt den Linux-Computer zum Laufen.
systemdsystemd ist das übergeordnete Element aller Prozesse, die dafür verantwortlich sind, den Linux-Host in einen effizienten Zustand zu versetzen. Einige seiner Funktionen, die umfangreicher sind als die im alten Initialisierungsprogramm vorgestellten, sollten viele Aspekte des laufenden Linux-Hosts verwalten, einschließlich des Bereitstellens des Dateisystems, des Startens und Verwaltens von Systemdiensten, die für ein effizientes Arbeiten des Linux-Hosts erforderlich sind. Alle systemd-Aufgaben, die nicht mit dem Systemstartprozess zusammenhängen, werden in diesem Artikel nicht behandelt.
Zunächst stellt systemd Dateisysteme wie in
/etc/fstab
definiert bereit, einschließlich aller Auslagerungsdateien und Partitionen. Zu diesem Zeitpunkt kann er auf die Konfigurationsdateien in
/etc
zugreifen, einschließlich seiner eigenen. Es verwendet seine eigene Konfigurationsdatei
/etc/systemd/system/default.target
, um das Ziel zu bestimmen, für das der Host geladen werden soll. Die Datei default.target ist nur ein Symlink zur realen Zieldatei. Bei einer Desktop-Workstation ist dies normalerweise ein grafisches Ziel, das Runlevel 5 im alten SystemV-Initialisierer entspricht. Für den Server ist der Standardwert wahrscheinlich multi-user.target, ähnlich wie bei Runlevel 3 in SystemV. Emergency.Target ähnelt dem Einzelbenutzermodus.
Beachten Sie, dass Ziele und Dienste Systemeinheiten sind.
Die folgende Tabelle 1 zeigt einen Vergleich aller systemd-Ziele mit den alten Runlevels in SystemV. Systemd-Zielaliasnamen werden aus Gründen der Abwärtskompatibilität von systemd bereitgestellt. Ziel-Aliase ermöglichen es Skripten - und vielen Systemadministratoren, einschließlich mir -, SystemV-Befehle wie init3 zu verwenden, um die Ausführungsebenen zu ändern. Natürlich werden die SystemV-Befehle von systemd zur Interpretation und Ausführung geleitet.
Tabelle 1: Vergleich der SystemV-Kontrollstufen mit systemd-Zielen und einigen Zielaliasen.Jedes Ziel verfügt über eine Reihe von Abhängigkeiten, die in der Konfigurationsdatei beschrieben sind. systemd führt die notwendigen aus. Diese Abhängigkeiten sind die Dienste, die zum Ausführen eines Linux-Hosts mit einer bestimmten Funktionalität erforderlich sind. Wenn alle in den Zielkonfigurationsdateien aufgeführten Abhängigkeiten geladen und gestartet wurden, arbeitet das System auf dieser Zielebene.
systemd durchsucht auch veraltete SystemV-Initialisierungsverzeichnisse nach Startdateien. Wenn dies der Fall ist, verwendet systemd sie als Konfigurationsdateien, um die in den Dateien beschriebenen Dienste auszuführen. Ein veralteter Netzwerkdienst ist ein gutes Beispiel für einen Dienst, der weiterhin SystemV-Startdateien in Fedora verwendet.
Abbildung 1 unten wird direkt von der Start
-Hauptseite kopiert. Es zeigt die allgemeine Abfolge der Ereignisse während des Starts von systemd und die grundlegenden Anforderungen, um den Erfolg sicherzustellen.
Die Ziele sysinit.target und basic.target können beim Systemstart als Prüfpunkte betrachtet werden. Obwohl eines der Ziele von systemd darin besteht, Systemdienste parallel auszuführen, müssen einige Dienste und Funktionsziele vor anderen gestartet werden. Diese Kontrollpunkte können erst übergeben werden, wenn alle erforderlichen Dienste und Ziele abgeschlossen sind.
Somit ist sysinit.target erreicht, wenn alle Einheiten, von denen es abhängt, abgeschlossen sind. Alle folgenden Einheiten sollten abgeschlossen sein: Mounten von Dateisystemen, Einrichten von Auslagerungsdateien, Starten von udev, Festlegen des Anfangszustands des Zufallszahlengenerators, Initialisieren von Diensten auf niedriger Ebene, Einrichten von Kryptografiediensten, wenn mindestens ein Dateisystem verschlüsselt ist. In sysinit.target können sie parallel ausgeführt werden.
sysinit.target führt alle Dienste und Einheiten auf niedriger Ebene aus, die für die Mindestfunktionalität des Systems erforderlich sind, sowie diejenigen, die für den Wechsel zu basic.target erforderlich sind.
Abbildung 1. Systemd-StartzuordnungNach der Ausführung von sysinit.target startet systemd basic.target, beginnend mit allen Einheiten, die zur Ausführung erforderlich sind. Das Basisziel bietet zusätzliche Funktionen, indem die für das nächste Ziel erforderlichen Einheiten gestartet werden, einschließlich des Festlegens von Pfaden zu verschiedenen ausführbaren Verzeichnissen, Kommunikationssockets und Timern.
Schließlich können Sie mit der Initialisierung von Zielen auf Benutzerebene beginnen: multi-user.target oder graphical.target. Es ist zu beachten, dass multi-user.target erreicht werden muss, bevor die Abhängigkeiten des Grafikziels ausgeführt werden.
Die in Abbildung 1 unterstrichenen Ziele sind typische Startziele. Der Systemstart endet, wenn einer von ihnen erreicht ist. Wenn multi-user.target das Standardziel ist, wird in der Konsole die Anmeldung im Textmodus angezeigt. Wenn graphical.target standardmäßig angegeben ist, wird eine grafische Anmeldung angezeigt. Die Benutzeroberfläche des Anmeldebildschirms hängt vom verwendeten Bildschirmmanager ab.
Die ProblemeIch musste kürzlich den Standard-Boot-Kernel auf einem Linux-Computer ändern, der GRUB2 verwendete. Ich habe festgestellt, dass einige Befehle nicht mehr richtig funktionieren oder dass ich sie irgendwie falsch verwendet habe. Ich weiß immer noch nicht, was das Problem war, es wird mehr Zeit brauchen, um es zu untersuchen.
Der Befehl grub2-set-default hat den Standard-Kernel-Index in der Datei
/etc/default/grub
falsch konfiguriert, sodass der gewünschte alternative Kernel nicht geladen wurde. Ich habe
/etc/default/grub GRUB_DEFAULT=saved
manuell geändert.
/etc/default/grub GRUB_DEFAULT=saved
in
GRUB_DEFAULT=2
, wobei 2 der Index des installierten Kernels ist, den ich ausführen wollte. Dann habe ich den
grub2-mkconfig > /boot/grub2/grub.cfg
ausgeführt, um eine neue Grub-Konfigurationsdatei zu erstellen. Dieser Trick hat funktioniert und ein alternativer Kernel wurde gestartet.
SchlussfolgerungenGRUB2 und das Systemd-Initialisierungssystem sind Schlüsselkomponenten für die Kernel-Boot- und Systemstartphasen der meisten modernen Linux-Distributionen. Trotz der Widersprüche, insbesondere in Bezug auf systemd, arbeiten diese beiden Komponenten gut zusammen, um den Kernel zu laden und alle Systemdienste auszuführen, die zum Erstellen eines funktionierenden Linux-Systems erforderlich sind.
Obwohl ich GRUB2 und systemd insgesamt als komplexer betrachte als ihre Vorgänger, sind sie nicht schwieriger zu beherrschen und zu verwalten. Die Handbücher enthalten viele Informationen zu systemd, und auf freedesktop.org wird die Liste der Seiten vollständig dargestellt. Weitere Informationen finden Sie unter den folgenden Links:
Das ist alles. Wir warten hier auf Fragen und Kommentare oder sie können direkt in
einer offenen Lektion gestellt werden .