Zum Inhalt springen

Grand Unified Bootloader

aus Wikipedia, der freien Enzyklopädie
GRUB

Logo Logo
Screenshot
Bildschirmfoto des GRUB-Menüs von Debian
Basisdaten

Maintainer Yoshinori K. Okuji
Entwickler Das GRUB-Team
Erscheinungsjahr 1995[1]
Aktuelle Version 2.12[2]
(20. Dezember 2023)
Aktuelle Vorabversion 2.06-rc1[3]
(12. März 2021)
Betriebssystem Installation: Unix-Derivate; Laufzeit: plattformübergreifend
Programmier­sprache C; Assembler
Kategorie Bootloader
Lizenz GPL 3+ (Freie Software)
deutschsprachig ja
gnu.org/software/grub

Der Grand Unified Bootloader (kurz GRUB, englisch für Großer Vereinheitlichter Bootloader) ist eine freie Bootloader-Software, die oft zum Starten von unixoiden Betriebssystemen wie z. B. Linux eingesetzt wird.

GRUB wurde innerhalb des GNU-Hurd-Projektes als Bootloader entwickelt und wird unter der GPL bereitgestellt. Aufgrund seiner höheren Flexibilität verdrängte GRUB in vielen Linux-Distributionen den traditionellen Bootloader Linux Loader (LILO) und bietet inzwischen die meisten Möglichkeiten Linux zu booten.[4] GRUB wird auch von Solaris 10 x86 und Nachfolgern benutzt.

In seiner gegenwärtigen Gestalt „GRUB 2“ ist er nach ersten Arbeiten um 2002 beginnend mit 2009 der voreingestellte Bootloader gängiger[5][6] und seit 2014 der meisten[4] Linuxdistributionen und eine komplette Überarbeitung der 0.9x-Reihe, die als „nicht mehr wartbar“[7] seit 2005 nicht neu herausgegeben und nach Vorstellung von GRUB 2 in GRUB Legacy (englisch legacy ‚Altlast‘, ‚Erbe‘, ‚Hinterlassenschaft‘) umbenannt wurde.

Leistungsmerkmale

[Bearbeiten | Quelltext bearbeiten]

Werden Festplatten oder Wechseldatenträger mit Linux neu bespielt wird gewöhnlich GRUB als der den Kernel ladende Bootloader voreingestellt mitaufgesetzt und fertig eingestellt.[5]

Um GRUB gesondert installieren zu können, muss ein für ein bestehendes Unix-artiges Betriebssystem geeignetes, die nötigen Werkzeuge enthaltendes Programmpaket[9] erworben und installiert werden, z. B. von einer gängigen Live-DVD.[10][11] Für Rechner mit 86er CPU mit 64b-Erweiterung und Betrieb über das eigentliche Extensible Firmware Interface heißt das fertig kompiliert etwa grub-efi-amd64-bin. Die Installation von GRUB am Terminal in Linux sieht damit beispielsweise folgendermaßen aus:

grub2-Benutzer@Efirechner:~$ mount /dev/sda1 /boot/efi
grub2-Benutzer@Efirechner:~$ sudo grub-install
[sudo] password for grub2-Benutzer:

Die EFI-Partition muss unter /boot/efi eingehängt werden (ist sie nicht in /etc/fstab eingetragen muss das mit Verwaltungsrecht geschehen). Sie ist die erste Partition und in der Zählung des Betriebssystems auf der ersten Festplatte, was nicht notwendigerweise der Sicht der Firmware gleichen muss. Der Befehl grub-install muss mit Verwaltungsrecht eingegeben werden.

Anschließend werden die Datei /boot/efi/EFI/Linuxbetriebssystem/grubx64.efi angelegt, die restlichen Dateien in /boot/grub/x86_64-efi abgelegt und das nächste Hochfahren des Rechners vom EFI an GRUB weitergegeben.

GRUB Customizer, ein Konfigurationstool für GRUB 2
GNU GRUB auf MBR-partitionierter Festplatte
GNU GRUB auf GPT-partitionierter Festplatte
boot.img ist exakt 446 Bytes groß und befindet sich zusammen mit der Partitionstabelle im MBR (Sektor 0). core.img wird in die leeren Sektoren zwischen MBR und erster Partition geschrieben, falls verfügbar (die erste Partition beginnt üblicherweise bei Sektor 63 oder 4096 anstatt Sektor 1, das muss aber nicht vorliegen). Das Verzeichnis /boot/grub kann auf einer eigenen Partition liegen oder auf der /-Partition.

Üblicherweise ist der first stage bootloader von GRUB, die sogenannte Stage 1, im Master Boot Record (MBR), den ersten 512 Bytes des Systemdatenträgers. Zumal dieser Platz wegen der Partitionstabelle des MBR zusätzlich beschränkt ist, kann die Stage 1 nur den ersten Block der sogenannten Stage 2 laden. In diesem Sektor befinden sich der Programmcode und eine Blockliste zum Lesen der restlichen Sektoren von Stage 2.

Das zu ladende Image der Stage 2 kann an einem (fast) beliebigen Speicherort des Datenträgers sein. In Unix-artigen Systemen ist es meistens als /boot/grub/stage2 gespeichert. Die Stage 2 enthält die Dateisystemtreiber, den Programmcode für das Auswahlmenü und die GRUB-Kommandozeile sowie die Laderoutine für die Kernel.

Nach dem Laden von Stage 2 wird, sofern vorhanden, die Konfigurationsdatei /boot/grub/menu.lst eingelesen und verarbeitet. In dieser Datei sind die Einträge des Auswahlmenüs definiert, welche nun in der Konsole angezeigt werden. Aus dem Menü können nun das zu bootende Betriebssystem ausgewählt oder Befehle über die Kommandozeile direkt an GRUB gesendet werden. Stage 2 stellt somit den eigentlichen Bootloader dar, welcher einen Kernel oder den Bootsektor einer Partition lädt.

Diese Zweiteilung des Bootloaders hatte den Nachteil, dass er nach Änderungen an der Stage 2 wie etwa Verschiebung innerhalb der Partition nicht mehr bootfähig ist. Deswegen wurde die wahlweise Zwischenstufe Stage 1.5 eingeführt. Diese wird z. B. mittels Nachrüstung für das Extensible Firmware Interface[12] auf den Datenblöcken nach dem vierunddreißigsten logischen Block (den ersten 17 KiB) des Datenträgers und der ersten Partition (gewöhnlich ab dem zweiten MiB des Datenträgers) installiert[Anmerkung 1] und kann genau ein Dateisystem lesen. Dabei wird ihre Variante gewählt, welche das Dateisystem jener Partition unterstützt, auf welcher Stage 2 liegt. Zurzeit gibt es Stage 1.5 für die Dateisysteme FAT, Minix, ext2, ext3, JFS, ReiserFS, UFS2, XFS[13] sowie Joliet.[14] Unterstützung für Reiser4[15] und ext4[16] gibt es durch Patches von Drittanbietern.

Für den Nachfolger GRUB 2 wurde ein vollständiges Redesign durchgeführt und auf Rückwärtskompatibilität zu GRUB Legacy verzichtet. Stage 2 wurde in einen Kernel (kernel.img) und viele ladbare Module (*.mod) aufgeteilt; der Kernel enthält nur essentiellen Code mit Dekompression, ELF-Lader für Module, Festplattenzugriff und eine Rettungs-Shell. Stage 1.5 wie bisher entfällt. Stage 1 wird für das Hochfahren des Rechners nach BIOS-Art bzw. mit dem CSM als boot.img fortgeführt und ruft den ersten Block der den Kernel beinhaltenden Datei auf.

Bei der Installation werden die Module für das Dateisystem, das die restlichen Komponenten enthält, an den Kernel angehängt und als Datei core.img an einem festgelegten Ort abgelegt. Hierbei kommt eines der Kompressionsverfahren LZMA oder LZO zum Einsatz, so dass die komprimierte Datei z. B. noch im Bootbereich hinter dem MBR abgelegt werden kann (Bei der Nutzung einer GPT erfolgt diese Ablage in eine eigens dafür vorgesehene BIOS Boot-Partition). Nach dem Laden wird der Code entpackt und die Konfigurationsdatei /boot/grub/grub.cfg geladen. Bei Bedarf werden Module für weitere Dateisysteme, Bootmenü, Bootroutinen für verschiedene Betriebssysteme und GRUB-Shell vom Dateisystem nachgeladen. Die GRUB eigene Skriptsprache ist jetzt denen der Abkömmlinge der Bourne-Shell ähnlich, außerdem gab es Erweiterungen für die Sprache Lua.[17][18]

Die unterstützten Plattformen und Architekturen sind neben 32- und 64-Bit-x86 (32-Bit: IA-32 bzw. i386; 64-Bit: x64, Linux-üblich als „amd64“ oder „x86-64“ bezeichnet) nun auch Open-Firmware-basierte PowerPC-Rechner (Power Mac und Pegasos) und ab GRUB 2.02 auch ARM und ARM64 (64-Bit, ab ARMv8).[19]. An der Unterstützung von UltraSparc wird gearbeitet.[20][21]

Darüber hinaus wird GRUB 2 als sog. Nutzlast (englisch „payload“, auch für Nutzdaten) der freien Firmware coreboot verwendet.[22] Diese wird wie vorgesehen gewöhnlich aus den Quellen maßgefertigt und mit einem zudem zu kompiliernden Programm nach Bedarf versehen das üblicherweise vorrangig ein Betriebssystem lädt; allerdings ist coreboot mit GRUB für eine überschaubare Anzahl zumeist nicht mehr neuer Hauptplatinen auch binär erhältlich. Dabei muss GRUB nicht auf dem Datenträger gespeichert werden, sondern wird zusammen mit coreboot in den Flash-Speicher-Baustein („BIOS-Chip“) der Platine geschrieben. Beim Bootvorgang übergibt coreboot, nachdem es die Hardware initialisiert hat, die Kontrolle an GRUB, welches anschließend wie üblich ein Menü anzeigt und das Laden eines Kernels erlaubt.[23][24]

Besonderheiten von GRUB

[Bearbeiten | Quelltext bearbeiten]

GRUB kann über das Dateisystem auf die als normale Dateien gespeicherten Betriebssystemkerne zugreifen. Andere Bootloader wie zum Beispiel LILO waren lange Zeit auf Konfigurationsdaten angewiesen, die angeben, in welchen Datenblöcken der Kernel liegt. Diese Angaben können sich nach einem Kernel-Update ändern, und die entsprechenden Konfigurationsdaten müssen neu geschrieben werden. Dieser Schritt ist bei GRUB dagegen nicht notwendig.

Laden eines Betriebssystems

[Bearbeiten | Quelltext bearbeiten]

Findet GRUB keine gültige Konfigurationsdatei oder wird im Auswahlmenü die Befehlszeile gewählt, wird der Befehlszeileninterpreter gestartet und die Eingabeaufforderung grub> erscheint. Darauf kann beispielsweise wie folgt ein dem Rechner zugängliches Linux geladen werden:

grub> set root=(usb0,msdos6)
grub> linux /boot/vmlinuz-4.4.302 noplymouth
grub> initrd /boot/initramfs-4.4.302.img
grub> boot

Als Gerät wird die zweite logische Partition (der Master-Partitionstabelle) eines über USB angeschlossenen Datenträgers gewählt. Von jener werden ein Linux-Kernel dem auch Optionen mitgegeben werden können; und das zugehörige initiale Dateisystem ausgesucht. Zum Schluss wird der Systemstart befohlen.

Im Ggs. zu den alleinigen Befehlen kernel und initrd von GRUB Legacy hat GRUB 2 verschiedene Befehle für das unmittelbare Laden entsprechender Dateien. Das Laden von Windows sieht damit bspw. so aus:

grub> ntldr (ahci1,gpt1)/EFI/Microsoft/Boot/bootmgfw.efi
grub> boot

Von der ersten und EFI-Partition des als zweiten über SATA angeschlossenen Datenträgers wird der ab Windows Vista eingesetzte Bootmgr ausgewählt und gestartet.

Der Standard-GRUB stellt, wie oben beschrieben, einen eigenen Bootblock zur Verfügung. Das führt dazu, dass man GRUB normalerweise nicht von einem bestehenden Betriebssystem aus starten kann. Die GRUB-Shell ist unter Linux zugänglich, eine Alternative stellt das Projekt GRUB4DOS bereit, welches GRUB Legacy so erweitert, dass es als Programm unter DOS bzw. als GRLDR aus dem Windows-XP-/-NT-Bootmenü, oder per ntldr-Funktion von GRUB 2 aus startbar ist. Letzteres erspart das umständliche Extrahieren des Linux-Bootblocks mittels dd in eine Datei. Jedoch ist Grub4dos nur für DOS und 32-Bit-Windows-Systeme, die dazu kompatibel sind, verfügbar. Auf 64-Bit-Systemen können keine DOS-Programme ausgeführt werden, allerdings wird an einer Version für UEFI gearbeitet.[25]

Mit TrustedGRUB wird derzeit eine Erweiterung von GRUB entwickelt, die Trusted Platform Module (TPM) unterstützt.[26]

Commons: GNU GRUB – Sammlung von Bildern, Videos und Audiodateien
  1. Das Beispiel ist vielleicht nicht wirklichkeitsnah, weil als der alte GRUB noch weit verbreitet gewesen ist, lange nachdem die Entwickler die letzte Fassung herausgegeben hatten, ist die GUIDPT in haushaltsüblichen Rechnern erst aufgekommen. Ehedem ist es nähergelegen auf einem nach „msdos“-Art formatierten Laufwerk mit echten 512B-Blöcken notwendigerweise ab dem zweiten Block die ~ 30 KB große Zwischenstufe und ab dem nächsten Block die erste Partition zu haben.

Einzelnachweise

[Bearbeiten | Quelltext bearbeiten]
  1. www.gnu.org. (abgerufen am 29. September 2016).
  2. Daniel Kiper: GRUB 2.12 released. 20. Dezember 2023 (abgerufen am 20. Dezember 2023).
  3. GRUB 2.06 release candidate 1. 12. März 2021.
  4. a b Roderick W. Smith: Managing EFI Bootloaders for Linux. 7. Juli 2018, abgerufen am 30. Juli 2025 (englisch).
  5. a b Grub2. In: Ubuntu documentation. Canonical, 18. Oktober 2023, abgerufen am 30. Juli 2025 (englisch).
  6. Releases/16/FeatureList. Fedora Projekt, 11. Juni 2012, abgerufen am 30. Juli 2025 (englisch).
  7. Daniel Kiper: GNU GRUB FAQ. GNU Projekt, 31. August 2021, abgerufen am 29. Juli 2025 (englisch).
  8. a b New in 1.97 – :. GNU Projekt, 25. Oktober 2009, abgerufen am 31. Juli 2025 (englisch).
  9. Paket: grub-efi-amd64-bin (2.06-13+deb12u1). In: Debian repository. Debian Projekt, 10. Juni 2023, abgerufen am 1. August 2025 (englisch, mehrsprachig).
  10. ubuntu-24.04.3-desktop-amd64.list. In: releases.ubuntu.com. Canonical, 5. August 2025, abgerufen am 13. August 2025. .deb zum Selbstmachen und vorgefertigt für EFI und BIOS.
  11. DistroWatch.com: FreeBSD. DistroWatch, 14. August 2025, abgerufen am 14. August 2025 (englisch). GRUB v2.0.2 auf der dvd1.
  12. Roderick W. Smith: Managing EFI Bootloaders for Linux: Using GRUB Legacy. 7. Juli 2018, abgerufen am 30. Juli 2025 (englisch).
  13. Sourcecode von Grub 0.97 (Gzip; 972 kB)
  14. [PATCH] – support joliet extension in iso9660 filesystem
  15. Reiser4 Howto/GRUB
  16. [PATCH] RFE: ext4 support in grub
  17. Vladimir Serbinenko: Re: Why Lua support was removed. In: GRUB Developer mailing list. 14. Oktober 2020, abgerufen am 12. August 2025 (englisch).
  18. Lua-Quelltextpaket vom 25. Juni 2019 für den GRUB der Proxmox-Projekte.
  19. GRUB on ARM (Memento vom 28. Januar 2016 im Internet Archive) (englisch), abgerufen am 18. Oktober 2015;
    Both ARM and ARM64 are now supported in upstream GRUB – both are available in the grub 2.02 betas, and included in several Linux distributions. The ARM port supports U-Boot (but should shortly support also UEFI), and the ARM64 port supports UEFI.
  20. GNU GRUB FAQ (englisch), abgerufen am 18. Oktober 2015;
    The current release is working on Intel/AMD PCs, OpenFirmware-based PowerPC machines (PowerMac and Pegasos), EFI-based PC (IntelMac) and coreboot (formerly, LinuxBIOS), and is being ported to UltraSparc.
  21. Wordpress Blog: GRUB on Sparc (englisch), abgerufen am 18. Oktober 2015.
  22. GRUB 2 als coreboot Payload (Memento vom 23. Oktober 2020 im Internet Archive)
  23. Projekt-Webseite: Coreboot für Endnutzer
  24. Coreboot auf dem Github, abgerufen am 12. August 2025.
  25. Projektseite von grub4dos-for_UEFI auf GitHub.com.
  26. Projektseite von TrustedGRUB auf SourceForge.net.