Website-Suche

LFCS: So konfigurieren und beheben Sie den Grand Unified Bootloader (GRUB) – Teil 13


Aufgrund der jüngsten Änderungen der Ziele der LFCS-Zertifizierungsprüfung, die am 2. Februar 2016 in Kraft treten, fügen wir der hier veröffentlichten LFCS-Reihe die erforderlichen Themen hinzu. Zur Vorbereitung auf diese Prüfung empfehlen wir Ihnen dringend, auch die LFCE-Reihe zu absolvieren.

In diesem Artikel stellen wir Ihnen GRUB vor und erklären, warum ein Bootloader notwendig ist und wie er das System vielseitiger macht.

Der Linux-Startvorgang folgt von dem Zeitpunkt an, an dem Sie den Netzschalter Ihres Computers drücken, bis Sie ein voll funktionsfähiges System erhalten, dieser allgemeinen Reihenfolge:

  1. 1. Ein Prozess namens POST (Power-On Self Test) führt eine Gesamtprüfung der Hardwarekomponenten Ihres Computers durch.
  2. 2. Wenn POST abgeschlossen ist, übergibt es die Kontrolle an den Bootloader, der wiederum den Linux-Kernel in den Speicher lädt (zusammen mit initramfs). ) und führt es aus. Der am häufigsten verwendete Bootloader unter Linux ist der GRand Unified Bootloader, kurz GRUB.
  3. 3. Der Kernel überprüft und greift auf die Hardware zu und führt dann den anfänglichen Prozess aus (meistens bekannt unter dem generischen Namen „init“), der wiederum den Systemstart durch Starten abschließt Dienstleistungen.

In Teil 7 dieser Serie („SysVinit, Upstart und Systemd“) haben wir die Service-Management-Systeme und -Tools vorgestellt, die von modernen Linux-Distributionen verwendet werden. Möglicherweise möchten Sie diesen Artikel lesen, bevor Sie fortfahren.

Einführung des GRUB-Bootloaders

Zwei Hauptversionen von GRUB (v1, manchmal auch GRUB Legacy und v2 genannt) sind in modernen Systemen zu finden, allerdings in den meisten Distributionen verwenden in ihren neuesten Versionen standardmäßig v2. Nur Red Hat Enterprise Linux 6 und seine Derivate verwenden heute noch v1.

Daher konzentrieren wir uns in diesem Handbuch hauptsächlich auf die Funktionen von v2.

Unabhängig von der GRUB-Version ermöglicht ein Bootloader dem Benutzer Folgendes:

  1. 1). Ändern Sie die Art und Weise, wie sich das System verhält, indem Sie verschiedene zu verwendende Kernel angeben.
  2. 2). Wählen Sie zwischen alternativen Betriebssystemen zum Booten und
  3. 3). Fügen Sie Konfigurationszeilen hinzu oder bearbeiten Sie sie, um unter anderem Startoptionen zu ändern.

Heute wird GRUB vom GNU-Projekt gepflegt und ist auf deren Website gut dokumentiert. Wir empfehlen Ihnen, beim Durcharbeiten dieses Handbuchs die offizielle GNU-Dokumentation zu verwenden.

Beim Systemstart wird in der Hauptkonsole der folgende GRUB-Bildschirm angezeigt. Zunächst werden Sie aufgefordert, zwischen alternativen Kerneln zu wählen (standardmäßig startet das System mit dem neuesten Kernel) und können eine GRUB-Befehlszeile eingeben (mit c). oder bearbeiten Sie die Startoptionen (durch Drücken der Taste e).

Einer der Gründe, warum Sie das Booten mit einem älteren Kernel in Betracht ziehen sollten, ist ein Hardwaregerät, das früher ordnungsgemäß funktionierte und nach einem Upgrade anfing, „zu funktionieren“ (siehe diesen Link im AskUbuntu Foren für ein Beispiel).

Die GRUB v2-Konfiguration wird beim Booten von /boot/grub/grub.cfg oder /boot/grub2/grub.cfg gelesen, während /boot/grub/grub.conf oder /boot/grub/menu.lst werden in v1 verwendet. Diese Dateien dürfen NICHT manuell bearbeitet werden, sondern werden basierend auf dem Inhalt von /etc/default/grub und den in /etc/grub.d gefundenen Dateien geändert.

In einem CentOS 7 ist hier die Konfigurationsdatei, die bei der Erstinstallation des Systems erstellt wird:

GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="vconsole.keymap=la-latin1 rd.lvm.lv=centos_centos7-2/swap crashkernel=auto  vconsole.font=latarcyrheb-sun16 rd.lvm.lv=centos_centos7-2/root rhgb quiet"
GRUB_DISABLE_RECOVERY="true"

Zusätzlich zur Online-Dokumentation können Sie auch das GNU GRUB-Handbuch mit den folgenden Informationen finden:

info grub

Wenn Sie speziell an den für /etc/default/grub verfügbaren Optionen interessiert sind, können Sie den Konfigurationsabschnitt direkt aufrufen:

info -f grub -n 'Simple configuration'

Wenn Sie den obigen Befehl verwenden, werden Sie feststellen, dass GRUB_TIMEOUT die Zeit zwischen dem Erscheinen des Startbildschirms und dem Beginn des automatischen Systemstarts festlegt, sofern dieser nicht vom Benutzer unterbrochen wird. Wenn diese Variable auf -1 gesetzt ist, wird der Bootvorgang erst gestartet, wenn der Benutzer eine Auswahl trifft.

Wenn mehrere Betriebssysteme oder Kernel auf demselben Computer installiert sind, erfordert GRUB_DEFAULT einen ganzzahligen Wert, der angibt, welcher Betriebssystem- oder Kerneleintrag im GRUB-Startbildschirm standardmäßig zum Booten ausgewählt werden soll. Die Liste der Einträge kann nicht nur im oben gezeigten Begrüßungsbildschirm angezeigt werden, sondern auch mit dem folgenden Befehl:

In CentOS und openSUSE:

awk -F\' '$1=="menuentry " {print $2}' /boot/grub2/grub.cfg

Unter Ubuntu:

awk -F\' '$1=="menuentry " {print $2}' /boot/grub/grub.cfg

Wenn wir im Beispiel im Bild unten mit der Kernel-Version 3.10.0-123.el7.x86_64 (vierter Eintrag) booten möchten, müssen wir GRUB_DEFAULT festlegen bis 3 (Einträge werden intern beginnend mit Null nummeriert) wie folgt:

GRUB_DEFAULT=3

Eine letzte GRUB-Konfigurationsvariable, die von besonderem Interesse ist, ist GRUB_CMDLINE_LINUX, die zur Übergabe von Optionen an den Kernel verwendet wird. Die Optionen, die über GRUB an den Kernel übergeben werden können, sind in der Kernel-Parameterdatei und in man 7 bootparam gut dokumentiert.

Aktuelle Optionen auf meinem CentOS 7-Server sind:

GRUB_CMDLINE_LINUX="vconsole.keymap=la-latin1 rd.lvm.lv=centos_centos7-2/swap crashkernel=auto  vconsole.font=latarcyrheb-sun16 rd.lvm.lv=centos_centos7-2/root rhgb quiet"

Warum sollten Sie die Standardkernelparameter ändern oder zusätzliche Optionen übergeben? Einfach ausgedrückt kann es vorkommen, dass Sie dem Kernel bestimmte Hardwareparameter mitteilen müssen, die er möglicherweise nicht selbst bestimmen kann, oder die Werte überschreiben müssen, die er erkennen würde.

Das ist mir vor nicht allzu langer Zeit passiert, als ich Vector Linux, ein Derivat von Slackware, auf meinem 10 Jahre alten Laptop ausprobiert habe. Nach der Installation wurden nicht die richtigen Einstellungen für meine Grafikkarte erkannt, sodass ich die über GRUB übergebenen Kerneloptionen ändern musste, damit es funktionierte.

Ein weiteres Beispiel wäre, wenn Sie das System in den Einzelbenutzermodus versetzen müssen, um Wartungsaufgaben durchzuführen. Sie können dies tun, indem Sie das Wort single an GRUB_CMDLINE_LINUX anhängen und einen Neustart durchführen:

GRUB_CMDLINE_LINUX="vconsole.keymap=la-latin1 rd.lvm.lv=centos_centos7-2/swap crashkernel=auto  vconsole.font=latarcyrheb-sun16 rd.lvm.lv=centos_centos7-2/root rhgb quiet single"

Nachdem Sie /etc/defalt/grub bearbeitet haben, müssen Sie update-grub (Ubuntu) oder grub2-mkconfig -o /boot/grub2/grub ausführen. cfg (CentOS und openSUSE) anschließend, um grub.cfg zu aktualisieren (andernfalls gehen die Änderungen beim Booten verloren).

Dieser Befehl verarbeitet die zuvor erwähnten Boot-Konfigurationsdateien, um grub.cfg zu aktualisieren. Diese Methode stellt sicher, dass Änderungen dauerhaft sind, während Optionen, die beim Booten über GRUB übergeben werden, nur während der aktuellen Sitzung gültig sind.

Behebung von Linux GRUB-Problemen

Wenn Sie ein zweites Betriebssystem installieren oder Ihre GRUB-Konfigurationsdatei durch menschliches Versagen beschädigt wird, gibt es Möglichkeiten, Ihr System wieder auf die Beine zu stellen und neu starten zu können.

Drücken Sie im Startbildschirm c, um eine GRUB-Befehlszeile aufzurufen (denken Sie daran, dass Sie auch e drücken können, um die Standardstartoptionen zu bearbeiten) und verwenden Sie die Hilfe, um die verfügbaren Optionen anzuzeigen Befehle in der GRUB-Eingabeaufforderung:

Wir werden uns auf ls konzentrieren, das die installierten Geräte und Dateisysteme auflistet, und wir werden untersuchen, was es findet. Im Bild unten können wir sehen, dass es 4 Festplatten gibt (hd0 bis hd3).

Nur hd0 scheint partitioniert worden zu sein (wie durch msdos1 und msdos2 belegt, wobei 1 und 2 sind die Partitionsnummern und msdos ist das Partitionierungsschema).

Schauen wir uns nun die erste Partition auf hd0 (msdos1) an, um zu sehen, ob wir dort GRUB finden können. Dieser Ansatz ermöglicht es uns, Linux zu booten und dort andere High-Level-Tools zu verwenden, um die Konfigurationsdatei zu reparieren oder GRUB bei Bedarf komplett neu zu installieren:

ls (hd0,msdos1)/

Wie wir im hervorgehobenen Bereich sehen können, haben wir das Verzeichnis grub2 in dieser Partition gefunden:

Sobald wir sicher sind, dass sich GRUB in (hd0,msdos1) befindet, teilen wir GRUB mit, wo seine Konfigurationsdatei zu finden ist, und weisen ihn dann an, zu versuchen, sein Menü zu starten:

set prefix=(hd0,msdos1)/grub2
set root=(hd0,msdos1)
insmod normal
normal

Wählen Sie dann im GRUB-Menü einen Eintrag aus und drücken Sie die Eingabetaste, um damit zu booten. Sobald das System gestartet ist, können Sie den Befehl grub2-install /dev/sdX ausführen (ändern Sie sdX durch das Gerät, auf dem Sie GRUB installieren möchten). Anschließend werden die Boot-Informationen aktualisiert und alle zugehörigen Dateien wiederhergestellt.

grub2-install /dev/sdX

Weitere komplexere Szenarien sind zusammen mit den vorgeschlagenen Korrekturen im Ubuntu GRUB2-Fehlerbehebungshandbuch dokumentiert. Die dort erläuterten Konzepte gelten auch für andere Distributionen.

Zusammenfassung

In diesem Artikel haben wir Ihnen GRUB vorgestellt, angegeben, wo Sie Dokumentation online und offline finden können, und erklärt, wie Sie mit einem Szenario umgehen können, in dem ein System aufgrund eines Bootloader-Problems nicht mehr ordnungsgemäß startet.

Glücklicherweise ist GRUB eines der am besten dokumentierten Tools und Sie können Hilfe entweder in den installierten Dokumenten oder online mithilfe der in diesem Artikel bereitgestellten Ressourcen leicht finden.

Haben Sie Fragen oder Anmerkungen? Zögern Sie nicht, uns dies über das Kommentarformular unten mitzuteilen. Wir freuen uns von Ihnen zu hören!