GRUB (Grand Unified Bootloader) ist der Standard-Bootloader für Linux. Er ermöglicht das Booten verschiedener Betriebssysteme und Kernel-Versionen.

Grundlagen

GRUB-Dateien

/boot/grub/grub.cfg       # Generierte Konfiguration
/etc/default/grub         # Einstellungen
/etc/grub.d/              # Konfigurations-Skripte
/boot/grub/               # GRUB-Dateien

Konfiguration generieren

# Debian/Ubuntu
update-grub

# CentOS/RHEL
grub2-mkconfig -o /boot/grub2/grub.cfg

Standard-Konfiguration

/etc/default/grub

# Standard-Eintrag (0 = erster)
GRUB_DEFAULT=0

# Timeout in Sekunden
GRUB_TIMEOUT=5

# Timeout-Verhalten
GRUB_TIMEOUT_STYLE=menu

# Kernel-Parameter
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""

# Boot-Auflösung
GRUB_GFXMODE=auto

# Terminal
GRUB_TERMINAL=console

# OS-Prober (Dual-Boot)
GRUB_DISABLE_OS_PROBER=false

Änderungen anwenden

# Nach Änderungen in /etc/default/grub
update-grub

Kernel-Parameter

Häufige Parameter

# Quiet-Boot
GRUB_CMDLINE_LINUX_DEFAULT="quiet"

# Ohne Splash
GRUB_CMDLINE_LINUX_DEFAULT="nosplash"

# IPv6 deaktivieren
GRUB_CMDLINE_LINUX="ipv6.disable=1"

# IOMMU aktivieren
GRUB_CMDLINE_LINUX="intel_iommu=on"

# Speicher begrenzen
GRUB_CMDLINE_LINUX="mem=4G"

# Single-User-Mode
# (beim Boot: append 'single' oder '1')

Parameter kombinieren

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX="ipv6.disable=1 net.ifnames=0"

Standard-Boot ändern

Nach Index

# Zweiter Eintrag (Index 1)
GRUB_DEFAULT=1

Nach Name

# Exakter Menü-Name
GRUB_DEFAULT="Ubuntu, with Linux 5.15.0-generic"

# Aus Sub-Menü
GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with Linux 5.15.0-generic"

Letzter Boot

GRUB_DEFAULT=saved
GRUB_SAVEDEFAULT=true

Manuell setzen

grub-set-default 2
grub-reboot 1  # Einmalig

Boot-Menü anpassen

Timeout

# Sofort booten
GRUB_TIMEOUT=0

# Warten auf Eingabe
GRUB_TIMEOUT=-1

# 5 Sekunden
GRUB_TIMEOUT=5

Menü verstecken

# Menü nur bei Shift-Taste
GRUB_TIMEOUT_STYLE=hidden
GRUB_TIMEOUT=2

Eigene Einträge

# /etc/grub.d/40_custom

#!/bin/sh
exec tail -n +3 $0

menuentry "Reboot" {
    reboot
}

menuentry "Shutdown" {
    halt
}

menuentry "Boot from USB" {
    set root=(hd1,1)
    chainloader +1
}

Recovery-Modus

Im GRUB-Menü

1. Bei Boot: Shift gedrückt halten
2. Eintrag auswählen, 'e' drücken
3. Zeile mit 'linux' finden
4. 'quiet splash' durch 'recovery' ersetzen
5. Ctrl+X oder F10 zum Booten

Single-User-Mode

# An Kernel-Zeile anhängen:
single
# oder
init=/bin/bash

GRUB reparieren

Von Live-System

# Live-USB booten

# Root-Partition mounten
mount /dev/sda2 /mnt

# Wichtige Verzeichnisse mounten
mount --bind /dev /mnt/dev
mount --bind /proc /mnt/proc
mount --bind /sys /mnt/sys

# Bei UEFI
mount /dev/sda1 /mnt/boot/efi

# chroot
chroot /mnt

# GRUB neu installieren (BIOS)
grub-install /dev/sda
update-grub

# Für UEFI
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=ubuntu

# Verlassen
exit
umount -R /mnt
reboot

GRUB-Rescue

# Wenn 'grub rescue>' erscheint

# Partitionen auflisten
ls

# Root-Partition finden
ls (hd0,2)/boot/grub

# Prefix setzen
set prefix=(hd0,2)/boot/grub
set root=(hd0,2)

# Normal-Modus laden
insmod normal
normal

UEFI vs. BIOS

UEFI-Spezifisch

# Installation (UEFI)
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=GRUB

# EFI-Einträge anzeigen
efibootmgr -v

# Boot-Reihenfolge ändern
efibootmgr -o 0002,0001,0000

BIOS/Legacy

# Installation (BIOS)
grub-install /dev/sda

# MBR überschreiben
grub-install --force /dev/sda

Passwort-Schutz

GRUB-Passwort setzen

# Passwort-Hash generieren
grub-mkpasswd-pbkdf2
# /etc/grub.d/40_custom

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

Bestimmte Einträge schützen

# /etc/grub.d/40_custom

menuentry "Secure Entry" --users admin {
    linux /vmlinuz
    initrd /initrd.img
}

Dual-Boot

Windows erkennen

# OS-Prober aktivieren
GRUB_DISABLE_OS_PROBER=false

# Aktualisieren
update-grub

Manueller Windows-Eintrag

# /etc/grub.d/40_custom

menuentry "Windows 10" {
    insmod part_gpt
    insmod chain
    set root=(hd0,1)
    chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}

Troubleshooting

"GRUB Rescue" Prompt

ls
set prefix=(hd0,2)/boot/grub
set root=(hd0,2)
insmod normal
normal

Kein Boot-Menü

# Shift-Taste beim Boot halten
# Oder:
GRUB_TIMEOUT_STYLE=menu
GRUB_TIMEOUT=5
update-grub

Falscher Kernel bootet

# Standard-Kernel setzen
GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with Linux 5.15.0-generic"
update-grub

UEFI-Eintrag fehlt

# Eintrag erstellen
efibootmgr -c -d /dev/sda -p 1 -L "Ubuntu" -l "\EFI\ubuntu\shimx64.efi"

Zusammenfassung

| Datei | Funktion | |-------|----------| | /etc/default/grub | Einstellungen | | /etc/grub.d/* | Menü-Skripte | | /boot/grub/grub.cfg | Generierte Config |

| Befehl | Funktion | |--------|----------| | update-grub | Config neu generieren | | grub-install | GRUB installieren | | grub-set-default | Standard setzen | | grub-reboot | Einmal anderen booten |

| Boot-Taste | Funktion | |------------|----------| | Shift | Menü anzeigen | | e | Eintrag bearbeiten | | c | GRUB-Shell | | Ctrl+X/F10 | Bearbeiteten Eintrag booten |

Fazit

GRUB ist ein mächtiger Bootloader mit vielen Anpassungsmöglichkeiten. Die Konfiguration über /etc/default/grub ist unkompliziert, vergessen Sie aber nicht update-grub nach Änderungen. Für Recovery-Situationen ist das Booten von einem Live-System die sicherste Methode. Bei UEFI-Systemen beachten Sie die zusätzlichen EFI-spezifischen Befehle.