Grand Unified Bootloader
GRUB
| |
---|---|
![]() ![]() | |
![]() 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) |
Betriebssystem | Installation: Unix-Derivate; Laufzeit: plattformübergreifend |
Programmiersprache | C, Assemblersprache |
Kategorie | Bootloader |
Lizenz | GPL 3+ (Freie Software) |
deutschsprachig | ja |
gnu.org/software/grub |
Grand Unified Bootloader (kurz GRUB, englisch für Großer vereinheitlichter Bootloader) ist ein freies Bootloader-Programm, das 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). GRUB wird auch in Solaris 10 x86 benutzt. Die aktuelle Version, GRUB 2, welche erstmals im Juni 2012 veröffentlicht wurde[3], stellt eine komplette Überarbeitung der 0.9x-Reihe dar. Diese wird daher als GRUB Legacy bezeichnet (englisch legacy ‚Altlast‘, ‚Erbe‘, ‚Hinterlassenschaft‘).
Leistungsmerkmale
[Bearbeiten | Quelltext bearbeiten]- Liest verschiedene Dateisysteme:
- Bootet verschiedene Betriebssysteme per Auswahlmenü und automatischem Zeitablauf (Linux und Windows als Multi-Boot-System).
- Bootet Betriebssysteme von Festplatten, Disketten, CD- und DVD-Laufwerken sowie Flash-Disks.
- Verfügt über einen eingebauten Kommandozeileninterpreter (Shell).
- Ist relativ einfach konfigurierbar (Farben, Hintergrundbild, Struktur usw.).
- Kann mit einem Passwort gesichert werden.
- Kann über TFTP bereitgestellte Linux-Kernel booten.
Funktionsweise
[Bearbeiten | Quelltext bearbeiten]![](http://upload.wikimedia.org/wikipedia/commons/thumb/d/d2/GRUB_customizer.png/220px-GRUB_customizer.png)
![](http://upload.wikimedia.org/wikipedia/commons/thumb/1/18/GNU_GRUB_on_MBR_partitioned_hard_disk_drives.svg/220px-GNU_GRUB_on_MBR_partitioned_hard_disk_drives.svg.png)
![](http://upload.wikimedia.org/wikipedia/commons/thumb/b/bb/GNU_GRUB_on_GPT_partitioned_hard_disk_drives.svg/220px-GNU_GRUB_on_GPT_partitioned_hard_disk_drives.svg.png)
![](http://upload.wikimedia.org/wikipedia/commons/thumb/4/45/GNU_GRUB_components.svg/500px-GNU_GRUB_components.svg.png)
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.GRUB allgemein und GRUB Legacy
[Bearbeiten | Quelltext bearbeiten]Normalerweise wird der Bootloader von GRUB, die sogenannte Stage 1, in den Master Boot Record (MBR) geschrieben, welcher sich in den ersten 512 Bytes des primären Laufwerkes befindet. Aufgrund des durch die Partitionstabelle zusätzlich beschränkten Platzes kann die Stage 1 nur den ersten Sektor der sogenannten Stage 2 laden. In diesem Sektor befinden sich der Programmcode und eine Blockliste zum Lesen der restlichen Sektoren von Stage 2.
Die Stage 2 kann sich auf einer beliebigen Partition befinden. Unter Unix-Systemen befindet sie sich meistens unter /boot/grub/stage2. 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 zweistufige Aufteilung des Bootloaders hatte den Nachteil, dass der Bootloader nach Verschieben oder Änderungen von Stage 2 nicht mehr bootfähig war. Deswegen wurde zwischen Stage 1 und 2 eine Zwischenstufe, Stage 1.5, eingeführt. Diese liegt auf den Datenblöcken zwischen MBR bzw. Stage 1 und dem ersten Block der ersten Partition und ist in der Lage, genau ein Dateisystem zu lesen. Dabei wird die Variante installiert, 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[4] sowie Joliet[5]. Unterstützung für Reiser4[6] und ext4[7] gibt es durch Patches von Drittanbietern.
GRUB 2
[Bearbeiten | Quelltext bearbeiten]Für den Nachfolger GRUB 2 wurde ein vollständiges Redesign durchgeführt und auf Rückwärtskompatibilität zu GRUB Legacy verzichtet. Die 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. 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 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. Neben der Shell-ähnlichen Skriptsprache bietet GRUB 2 auch Unterstützung für die Sprache Lua.
Des Weiteren lässt sich GRUB 2 auch als Payload für die freie BIOS-Alternative coreboot verwenden.[8] Dabei muss GRUB nicht wie üblich in den MBR geschrieben werden, sondern wird zusammen mit coreboot direkt in den Flash-Speicher-Baustein („BIOS Chip“) des Systems 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.
Die unterstützten Plattformen und Architekturen sind neben IA-32, also sowohl 32-Bit-x86 als auch x64 (Linux-üblich „amd64“, aber auch oft als x86-64, also x86 64-Bit, 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).[9]. An der Unterstützung von UltraSparc wird gearbeitet.[10][11]
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.
Erweiterungen
[Bearbeiten | Quelltext bearbeiten]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 so erweitert, dass es als Programm unter DOS bzw. als GRLDR aus dem Windows-XP-/-NT-Bootmenü heraus 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.
Mit TrustedGRUB wird derzeit eine Erweiterung von GRUB entwickelt, die Trusted Platform Module (TPM) unterstützt.[12]
Siehe auch
[Bearbeiten | Quelltext bearbeiten]Weblinks
[Bearbeiten | Quelltext bearbeiten]- Homepage von GRUB (englisch)
- GRUB for DOS (englisch)
- Artikel zu Änderungen in GRUB 2
- Tutorial zu GRUB-Legacy (englisch)
- Tutorial zu GRUB2 (englisch)
- The GRUB MBR - A Disk Editor View and Comments on the Code (Erklärt Arbeitsweise von GRUB 1 im Detail) (englisch)
Einzelnachweise
[Bearbeiten | Quelltext bearbeiten]- ↑ www.gnu.org. (abgerufen am 29. September 2016).
- ↑ Daniel Kiper: GRUB 2.12 released. 20. Dezember 2023 (abgerufen am 20. Dezember 2023).
- ↑ GRUB 2.00 Boot-Loader Officially Released. Abgerufen am 25. November 2017.
- ↑ Sourcecode von Grub 0.97 (Gzip; 972 kB)
- ↑ [PATCH] – support joliet extension in iso9660 filesystem
- ↑ Reiser4 Howto/GRUB
- ↑ [PATCH] RFE: ext4 support in grub
- ↑ GRUB 2 als coreboot Payload
- ↑ GRUB on ARM ( 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.“ - ↑ 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.“ - ↑ Wordpress Blog: GRUB on Sparc (englisch), abgerufen am 18. Oktober 2015
- ↑ Projektseite von TrustedGRUB auf SourceForge.net