GRUB Bootloader konfigurieren  Bild © PCMasters.deGRUB Bootloader konfigurieren (Bild © PCMasters.de)

GRUB-Dateisystemarchitektur und Konfigurationslogik

GRUB arbeitet mit einem mehrstufigen Konfigurationssystem, um sicherzustellen, dass benutzerdefinierte Einstellungen auch bei System-Updates erhalten bleiben. Die Architektur gliedert sich in die folgenden Hauptkomponenten:

  • /etc/default/grub: Die Hauptkonfigurationsdatei, in der Benutzer globale Variablen wie Timeouts und Kernel-Parameter definieren.
  • /etc/grub.d/: Ein Verzeichnis mit Skripten, die die eigentlichen Menüeinträge generieren.
  • /boot/grub/grub.cfg: Die endgültige, generierte Konfigurationsdatei, die vom Bootloader gelesen wird. Diese Datei sollte nicht manuell bearbeitet werden, da sie bei Updates überschrieben wird.
  • /boot/grub/: Das Verzeichnis, das die GRUB-Binärdateien und -Module enthält.

Um Änderungen in den Konfigurationsdateien zu übernehmen, muss das System die endgültige Boot-Datei neu generieren. Auf Debian- oder Ubuntu-basierten Systemen geschieht dies mit dem Befehl update-grub. Auf CentOS- oder RHEL-Systemen lautet der Befehl grub2-mkconfig -o /boot/grub2/grub.cfg.

Globale Konfigurationseinstellungen in /etc/default/grub

Die Datei /etc/default/grub steuert das Verhalten des Bootmenüs. Zu den wichtigsten Variablen gehören:

  • GRUB_DEFAULT: Legt den Standard-Betriebssystemeintrag fest. Der Wert 0 wählt den ersten Eintrag aus.
  • GRUB_TIMEOUT: Legt fest, wie lange das Menü in Sekunden sichtbar bleibt, bevor der Standardeintrag gestartet wird. Ein Wert von 0 führt zu einem sofortigen Start, während -1 das System auf unbestimmte Zeit anhält, bis der Benutzer etwas eingibt.
  • GRUB_TIMEOUT_STYLE: Steuert die visuelle Darstellung des Timeouts mit Optionen wie menu oder hidden.
  • GRUB_CMDLINE_LINUX_DEFAULT: Definiert Parameter, die beim Standard-Bootvorgang an den Kernel übergeben werden. Gängige Werte sind quiet, um Protokolle zu unterdrücken, und splash, um ein Startbild anzuzeigen.
  • GRUB_CMDLINE_LINUX: Wird für Parameter verwendet, die unabhängig vom Boot-Modus angewendet werden müssen.
  • GRUB_GFXMODE: Legt die Auflösung des Startmenüs fest, oft auf autogesetzt.
  • GRUB_TERMINAL: Legt fest, ob die Ausgabe über die Konsole oder eine grafische Oberfläche erfolgt.
  • GRUB_DISABLE_OS_PROBER: Ein boolescher Wert (true oder false), der festlegt, ob GRUB nach anderen installierten Betriebssystemen sucht.

Verwaltung und Optimierung von Kernel-Parametern

Mit Kernel-Parametern können Administratoren das Verhalten des Linux-Kernels zur Laufzeit anpassen. Diese werden den Variablen GRUB_CMDLINE_LINUX_DEFAULT oder GRUB_CMDLINE_LINUX hinzugefügt.

Gängige Implementierungsparameter

  • Protokollunterdrückung: Mit quiet und nosplash werden der Textlauf und die Startbilder unterdrückt.
  • Netzwerksteuerung: ipv6.disable=1 deaktiviert den IPv6-Stack vollständig.
  • Hardware-Schnittstelle: intel_iommu=on aktiviert die IOMMU für Intel-Prozessoren, was für PCIe-Passthrough unerlässlich ist.
  • Ressourcenbeschränkung: mem=4G begrenzt die dem Kernel zur Verfügung stehende Systemspeichermenge.

Die Parameter werden in Anführungszeichen als durch Leerzeichen getrennte Liste kombiniert, zum Beispiel: GRUB_CMDLINE_LINUX="ipv6.disable=1 net.ifnames=0“.

Verwalten der Standard-Boot-Einträge

Administratoren können auf verschiedene Arten festlegen, welches Betriebssystem oder welcher Kernel standardmäßig gestartet wird:

  • 1. Indexbasiert: Durch die Einstellung GRUB_DEFAULT=1 wird der zweite Eintrag in der Liste ausgewählt.
  • 2. Namensbasiert: Durch Angabe der genauen Zeichenfolge des Menüeintrags, z. B. GRUB_DEFAULT="Ubuntu, mit Linux 5.15.0-generic". Bei Einträgen in Untermenüs lautet die Syntax GRUB_DEFAULT="Erweiterte Optionen für Ubuntu>Ubuntu, mit Linux 5.15.0-generic“.
  • 3. Dynamisches Speichern: Wenn du GRUB_DEFAULT=saved und GRUB_SAVEDEFAULT=true festlegst, startet das System standardmäßig mit dem zuletzt ausgewählten Eintrag.
  • 4. Befehlszeilentools: grub-set-default 2 setzt den Standard auf den dritten Eintrag, während grub-reboot 1 den zweiten Eintrag einmalig als Startoption festlegt.

Anpassen des Startmenüs und der Einträge

Über die globalen Einstellungen hinaus lässt sich das Startmenü über die Datei /etc/grub.d/41_custom um benutzerdefinierte Einträge erweitern. So kannst du manuelle Startoptionen erstellen. Ein Beispiel-Eintrag für einen USB-Start oder einen Befehl zum Einschalten des Systems folgt dieser Struktur:

# /etc/grub.d/41_custom
menuentry "Restart" {
    reboot
}
menuentry "Boot from USB Drive" {
    set root=(hd1,1)
    chainloader +1
}

Wiederherstellungsverfahren und Systemreparatur

Wenn ein System nicht bootet, bietet GRUB mehrere Wiederherstellungsmechanismen.

GRUB Recovery Modus

Durch Gedrückthalten der Umschalttaste während des Bootvorgangs kannst du das GRUB-Menü aufrufen. Durch Drücken von e bei einem bestimmten Eintrag lässt sich die Kernel-Zeile vorübergehend ändern. Ersetzt man quiet splash durch recovery und drückt dann Strg+X oder F10, wird das System in einer Wiederherstellungsumgebung gestartet. Für tieferen Zugriff aktiviert das Anhängen von single oder init=/bin/bash den Einzelbenutzermodus.

Reparatur über ein Live-System (Chroot)

Ist der Bootloader beschädigt, kann er mithilfe eines Live-USB-Sticks repariert werden:

  • 1. Die Root-Partition einbinden: mount /dev/sda2 /mnt.
  • 2. Systemverzeichnisse einbinden: mount --bind /dev /mnt/dev, mount --bind /proc /mnt/proc und mount --bind /sys /mnt/sys.
  • 3. Die EFI-Partition einbinden (für UEFI-Systeme): mount /dev/sda1 /mnt/boot/efi.
  • 4. Wechsle in die Umgebung: chroot /mnt.
  • 5.GRUB neu installieren: Bei BIOS verwende grub-install /dev/sda. Bei UEFI verwende grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=ubuntu.
  • 6. Konfiguration aktualisieren: update-grub.

GRUB-Rettungsmodus

Wenn das System in die grub rescue-Eingabeaufforderung wechselt, werden die folgenden Befehle zum manuellen Booten verwendet:

  • ls: Listet verfügbare Partitionen auf.
  • set prefix=(hd0,2)/boot/grub und set root=(hd0,2) : Legt den Speicherort der GRUB-Module fest.
  • insmod normal und normal: Lädt die Standard-GRUB-Umgebung.

UEFI vs. BIOS

Die Implementierung von GRUB hängt von der System-Firmware ab.

UEFI (Unified Extensible Firmware Interface):

UEFI nutzt eine eigene EFI-Systempartition. Tools wie efibootmgr dienen zur Verwaltung der Boot-Einträge. efibootmgr -v zeigt vorhandene Einträge an, und efibootmgr -o 0002,0001,0000 ändert die Boot-Priorität.

BIOS/Legacy:

BIOS stützt sich auf den Master Boot Record (MBR). Die Installation erfolgt direkt auf dem Laufwerk über grub-install /dev/sda.

Sicherheit und Zugriffskontrolle

Um unbefugte Änderungen an der Startreihenfolge zu verhindern, unterstützt GRUB einen Passwortschutz. Zunächst wird mit grub-mkpasswd-pbkdf2 ein Passwort-Hash generiert. Dieser Hash wird dann zusammen mit einer Superuser-Definition in die Datei /etc/grub.d/40_custom eingetragen:

set superusers="admin"
password_pbkdf2 admin grub.pbkdf2.sha512.10000.HASH...

Einzelne Menüeinträge können ebenfalls eingeschränkt werden, indem das Flag --users admin zur menuentry-Definition hinzugefügt wird.

Multi-Boot-Integration

Bei Systemen mit mehreren Betriebssystemen wird das Tool os-prober verwendet. Durch Setzen von GRUB_DISABLE_OS_PROBER=false in der Konfiguration und Ausführen von update-grub erkennt der Bootloader automatisch andere Betriebssysteminstallationen. Für die manuelle Windows-Integration ist ein benutzerdefinierter Eintrag in /etc/grub.d/40_custom erforderlich, der insmod part_gpt und chainloader nutzt, um auf den Windows-EFI-Bootmanager zu verweisen.

Technischer Support – Referenz

### Wie wird die GRUB-Konfiguration nach dem Bearbeiten der Standarddatei aktualisiert?

Änderungen an /etc/default/grub werden nicht sofort übernommen. Der Administrator muss update-grub auf Debian/Ubuntu-Systemen oder grub2-mkconfig -o /boot/grub2/grub.cfg auf RHEL/CentOS-Systemen ausführen, um die Änderungen in die eigentliche Boot-Datei zu schreiben.

Was ist der Unterschied zwischen den Parametern quiet und nosplash`?

Der quiet-Parameter weist den Kernel an, die meisten seiner Startmeldungen auf der Konsole zu unterdrücken. Der nosplash-Parameter deaktiviert den grafischen Ladebildschirm, der durch ein Splash-Bild bereitgestellt wird, sodass der Benutzer während des Startvorgangs die eigentlichen Kernel-Protokolle sehen kann.

Was ist zu tun, wenn das GRUB-Menü während des Startvorgangs nicht erscheint?

Wenn das Menü ausgeblendet ist, kann der Benutzer während der ersten Startphase die Umschalttaste (bei BIOS) oder die Esc-Taste (bei UEFI) gedrückt halten. Alternativ kann der Administrator GRUB_TIMEOUT_STYLE=menu und einen positiven Wert für GRUB_TIMEOUT in der Konfigurationsdatei festlegen.

Wie kann ein Benutzer einmalig eine bestimmte Kernel-Version starten?

Der Befehl grub-reboot ermöglicht eine einmalige Übersteuerung des Startvorgangs. Zum Beispiel weist grub-reboot 1 das System an, beim nächsten Neustart ausschließlich den zweiten Eintrag zu starten, wobei bei nachfolgenden Starts wieder zum Standardeintrag zurückgekehrt wird.

Was ist der Zweck des Befehls "chroot“ bei einer GRUB-Reparatur?

Der Befehl chroot (change root) wechselt das Stammverzeichnis zur gemounteten Systempartition. Dadurch kann der Administrator Befehle so ausführen, als wäre er im defekten System angemeldet, was die Verwendung von grub-install und update-grub mit den korrekten Systempfaden ermöglicht.