Der Bootloader GRUB

 
 
1 Einleitung
  1.1 Allgemeines
  1.2 GRUB Features
 
2. Aufbau einer Festplatte
  2.1 Organisation der Daten auf einer Festplatte
  2.2 Adressierung einer Festplatte
  2.3 Logischer Aufbau von Festplatten
    2.3.1 Master Boot Record
    2.3.2 Partitionen (primäre Partitionen)
    2.3.3 Erweiterte/Logische Partitionen
    2.3.4 Der Bootsektor
     
3. Startvorgang
  3.1 Standard Startvorgang
  3.2 Chainloading
    3.2.1 Startvorgang mit einem Bootmanager in einer primären Partition
    3.2.2 Startvorgang mit einem Bootmanager in dem MBR
  3.3. Start mittels GRUB
 
4. GRUB
  4.1. Installation
    4.1.1 Bootdiskette und BackUp
    4.1.2 Installation auf die Festplatte
    4.1.3 Deinstallation
  4.2 GRUB einrichten
    4.2.1 Namenskonvention
    4.2.2 Setup
  4.3 Startvorgang mittels GRUB Shell
  4.4 Das GRUB Bootmenü
    4.4.1 Aufbau
    4.4.2 Allgemeine Befehle
    4.4.3 Befehle für die Bootmenüeinträge
    4.4.4 Tastaturbelegung ändern
    4.4.5 Beispiel eines Bootmenüs
 
 
 
 
1 Einleitung
 
1.1 Allgemeines

nach oben

Der GRand Unified Bootloader wurde von Erich Boleyn entwickelt und erschien erstmals 1995. Ursprünglich diente der GRUB als Loader für das HURD Betriebssystem. Nach einigen Verbesserungen wurde der GRUB 1999 in das GNU Project übernommen. Der GRUB unterstützt den Multibootstandard vollständig, dadurch ist er in der Lage, jedes Multiboot konforme Betriebssystem, wie z. B. FreeBSD, NetBSD, OpenBSD und GNU/Linux, zu starten. Die anderen Betriebssysteme werden durch das so genannte "Chainloading" geladen.
 
 
1.2 GRUB Features

nach oben

  • Partitionen anzeigen, verstecken, erstellen, aktivieren
  • Die Kernel von FreeBSD, NetBSD, OpenBSD, GNU/Linux können inklusive aller Parameter geladen werden.
  • Festplatten können logisch vertauscht werden, um Betriebssysteme von einer anderen Festplatte als der ersten laden zu können.
  • Die Erstellung eines Startmenüs ist möglich. Das Startmenü kann beliebig in Inhalt und Farbe verändert werden, teilweise sogar während des Startvorganges.
  • Das Startmenü erlaubt nicht nur Einträge zum Laden eines Betriebssystems, sondern auch Einträge, welche einen oder mehrere GRUB Kommandos ausführen.
  • Alle GRUB Kommandos sind schon vor dem Start eines Betriebssystems verfügbar. Durch die GRUB Shell läst sich jedes Betriebssystem manuell laden.
  • Booten über ein Netzwerk ist möglich.
  • Kein 1024-Zylinder Problem mehr. (falls nicht vom BIOS verursacht)
  • u. a.
 
 
2. Aufbau einer Festplatte

nach oben

Alle Festplatten bestehen aus magnetisierbaren Scheiben. Die Informationen werden durch beidseitige Ummagnetisierung der Oberfläche dieser Scheiben gespeichert. Diese Ummagnetisierung erfolgt durch Schreibköpfe und wird durch Leseköpfe (Heads) wieder gelesen. Die Schreib-/Leseköpfe bewegen sich radial auf einem Arm (Kamm) und schweben dabei über den sich mit konstanter Geschwindigkeit rotierenden Scheiben.
 

Abbildung Aufbau einer Festplatte.

 
 
2.1 Organisation der Daten auf einer Festplatte

nach oben

Um die Daten einer Festplatte verwalten zu können, wird eine Einteilung der Magnetscheiben vorgenommen. Diese Einteilung wird durch eine Low-Level Formatierung vorgenommen. Dabei werden folgende Teile angelegt:
 
Spuren (Tracks)
 
Die Spuren sind konzentrische Kreise auf den Magnetscheiben. Alle Spuren einer Magnetscheibe werden von außen nach innen mit 0 beginnend durchnumeriert. Die Speicherkapazität einer Festplatte ist abhängig von der Dichte der Spuren, welche in TPI (Tracks per Inch) angegeben wird.
 
Sektoren
 
Sektoren sind Kreisausschnitte auf den Magnetscheiben. Die Sektoren teilen jede Spur in 512Byte große Stücke und werden im Gegensatz zu den Spuren und Zylindern mit 1 angefangen zu zählen.
 
Zylinder
 
Als Zylinder bezeichnet man alle durch die Magnetscheiben übereinander liegenden Spuren, d.h., alle Spuren aller Magnetscheiben, mit der selben Nummer.
 

Abbildung Datenorganisation einer Festplatte.

 
Zone-Bit Recording
 
Da die Außenspuren wesentlich länger als die Innenspuren sind, wird bei modernen Festplatten eine ungleichmäßige Verteilung der Sektoren vorgenommen. Dies bedeutet, dass die äußeren Spuren mehr Sektoren besitzen als die inneren. Dieses Verfahren nennt man Zone Bit Recording (ZBR). Die Spuren werden dabei in Zonen eingeteilt und jeder Zone eine bestimmte Sektorenzahl zugeteilt. Die Umrechnung von logischen Sektoren zu physischen Sektoren, wird dabei durch das festplatteneigene BIOS realisiert.
 
 
2.2 Adressierung einer Festplatte

nach oben

CHS-Modus
 
Bis etwa 1997 wurde für die Adressierung der Festplatte das CylinderHeadSector-Verfahren genutzt. Dadurch kann jeder 512 Byte Sektor durch die Angabe des Zylinder, des Kopfes und des Sektors genau lokalisiert werden. Die Köpfe geben dabei die Magnetscheibe und deren Seite an und die Zählung wird wie bei den Zylindern mit 0 angefangen.
 
Die CHS-Adressen sind drei Byte (24 Bit) groß und besitzen folgenden Aufbau.
 
CHS Bits mögliche Werte
Kopf 8 0..255
Sektor 6 0..63
Zylinder 10 0..1023
 
Die maximale Kapazität errechnet sich durch:
 
256 Köpfe * 63 Sektoren * 1024 Spuren * 512 Byte/Sektor = 8064 MByte
 
LBA-Modus
 
Da heutige Festplatten wesentlich größere Kapazitäten haben, verwendet man zur Adressierung die "Linear Block Address". Diese Adresse ist vier Byte (32Bit) lang und numeriert alle Sektoren einer Festplatte der Reihe nach durch. Dadurch ergibt sich eine maximale Gesamtkapazität von:
 
 2^32 Sektoren * 512 Byte/Sektor = 2048 GByte = 2 TeraByte 
 
 
2.3 Logischer Aufbau von Festplatten
 
2.3.1 Master Boot Record

nach oben

Der Master Boot Record, kurz MBR, stellt so eine Art "Inhaltsverzeichnis" einer Festplatte dar. Er befindet sich immer am Anfang einer Festplatte, genauer gesagt auf Spur 0, Kopf 0 und Sektor 1 und belegt genau einen 512 Byte Sektor. Neben ein paar allgemeinen Informationen befinden sich im MBR zwei wichtige Komponenten. Zum einen die Master Boot Routine, welche während des Starts des Computers ausgeführt wird, und zum anderen die Partitionstabelle. Damit der MBR eindeutig identifiziert werden kann, beinhalten die letzen zwei Bytes die Signatur AA55h.
 
Abschnitt Offset Länge (Byte) Beschreibung
Master Boot Routine 0 139 Prüft den Datenträger, ermittelt die aktive Partition und lädt deren Bootsektor.
Fehlermeldungen 139 80 Beinhaltet alle Fehlermeldungen, wie zum Beispiel "Ungültige Partitionstabelle", "Fehler beim Laden des Betriebssystems" oder "Fehlendes Betriebssystem".
unbelegt 219 227 Wird momentan nicht genutzt.
Partitionstabelle 446 64 Beinhaltet Informationen für 4 Partitionen.
Signatur 510 2 AA55h für die eindeutige Identifizierung des Master Boot Record.
Tabelle 1 Aufbau des Master Boot Records
 
 
2.3.2 Partitionen (primäre Partitionen)

nach oben

Um auf einer Festplatte mehrere unterschiedliche Dateisysteme und dadurch auch mehrere unterschiedliche Betriebssysteme parallel verwalten zu können, wurden die Festplatten in logische Teile eingeteilt, den so genannten Partitionen. Alle Informationen über diese Partitionen werden im MBR in der Partitionstabelle gespeichert. Die Partitionstabelle des MBR bietet Platz für 4 Partitionseinträge zu je 16 Byte.
 
Offset Länge (Byte) Beschreibung
0 1 Partitionsstatus

0x00 = inaktiv
0x80 = bootfähige Partition

1 3 Beginn der Partition (CHS-Adresse )
4 1 Partitionstyp
5 3 Ende der Partition (CHS-Adresse)
8 4 lineare Adresse des ersten Blocks der Partition
12 4 Anzahl der Blöcke der Partition

Tabelle Aufbau eines Eintrages der Partitionstabelle

 
Am Anfang jeder Partition befindet sich der Bootsektor dieser Partition, welcher im Fall einer bootfähigen Partition den Startcode des auf der Partition befindlichen Betriebssystems beinhaltet.
 
Ist der Partitionstyp einer Partition 0x00 oder ist die Länge der Partition Null, so handelt es sich um einen leeren (ungenutzten) Partitionstabelleeintrag.
 
Typ Betriebs-/Dateisystem Typ Betriebs-/Dateisystem
0x00 Partitionstabelleeintrag ungenutzt 0x63 GNU HURD
0x01 DOS mit 12-Bit-FAT 0x64 Novell Netware
0x02 XENIX 0x65 Novell Netware
0x03 XENIX 0x75 PC/IX
0x04 DOS mit 16-Bit-FAT 0x80 Old MINIX
0x05 extended DOS-Partition (ab DOS 3.3) 0x81 Linux/Minix
0x06 DOS-4.0-Partition mit mehr als 32 MByte 0x82 Linux swap
0x07 OS/2 HPFS 0x83 Linux native
0x08 AIX 0x85 Linux extended
0x09 AIX bootable 0x93 Amoeba
0x0A OS/2 Boot Manager 0x94 Amoeba BBT
0x0B Win95 FAT32 0xA5 BSD/386
0x0C Win95 FAT32 0xA6 OpenBSD
0x0E Win95 FAT16 0xA7 NextStep
0x0F Win95 extended 0xB7 BSDI fs
0x40 Vendix 80286 0xB8 BSDI swap
0x51 Novell 0xC7 Syrinx
0x52 Microport 0xDB CP/M
Tabelle 3 Partitionstypen (Auszug)
 
 
2.3.3 Erweiterte/Logische Partitionen

 nach oben

Mit dem Anstieg der Festplattenkapazitäten stieg auch der Bedarf an Partitionen. Die vier vom Master Boot Record unterstützten Partitionen reichten oft nicht aus, um Festplatten sinnvoll zu verwalten. Dies führte zur Einführung von erweiterten und logischen Partitionen.
 
Eine erweiterte Partition beginnt nicht wie eine primäre Partition mit einem Bootsektor, sondern mit einer weiteren Partitionstabelle. Diese Partitionstabelle, auch "erweiterte Partitionstabelle" genannt, hat den gleichen Aufbau wie die des Master Boot Records, aber nur zwei Partitionseinträge. Ein Eintrag verweist auf eine nicht erweiterte Partition und der andere wiederum auf eine erweiterte Partition. Dadurch bilden alle erweiterte Partitionstabellen eine einfache verketten Liste. Diese Liste darf dabei aber keine Ringliste darstellen.
 
Abbildung 3 Beispiel der Partitionsstruktur einer Festplatte.
 
Im Gegensatz zu den Partitionen, welche im MBR eingetragen sind und relativ zum Festplattenanfang (Sektor 0) adressiert werden, werden die in einer erweiterte Partitionstabelle eingetragenen Partitionen relative zum Anfang der ersten erweiterten Partition adressiert.
 
Jede Partitionstabelle, egal ob die im MBR oder eine erweiterte Partitionstabelle, darf nur einen Eintrag einer erweiterten Partition enthalten. Diese Einträge unterscheiden sich nur durch den Partitionstyp von den primären Partitionseinträgen. Typische Partitionstypen dafür sind:
 
  • 0x05 DOS extended
  • 0x0F Win95 extended
  • 0x85 Linux extended
 
Der Eintrag der Partitionsgröße in den Partitionstabellen kann dabei beliebig größer als Null sein, viele Partitionsprogramme erwarten aber die Größe der Partition inklusive aller weiteren erweiterten Partitionen.
 
Alle "nicht erweiterte Partitionen", die in einer erweiterten Partitionstabelle eingetragen sind, werden logische Partition genannt. Logische Partitionen enthalten die eigentlichen Daten und bilden logische Laufwerke. Erweiterte Partitionen enthalten dagegen nur die logischen Laufwerke und keine Daten.
 
 
2.3.4 Der Bootsektor

nach oben

Der Bootsektor ist der erste Sektor einer primären Partition oder logischen Partition. Erweiterte Partitionen enthalten keinen Bootsektor, da ihr erster Sektor von der erweiterten Partitionstabelle belegt ist. Der Bootsektor enthält eine Tabelle mit den wichtigsten Eigenschaften der Partition und des Laufwerks. Dieser Tabelle schließt sich der eigentliche Bootcode an, welcher das Betriebssystem lädt.
 
Eintrag Länge Beschreibung
Sprungbefehl 3 Sprungbefehl zur Bootroutine in Maschinensprache.
Betriebssystem spezifische Einträge X Dieser Teil des Bootsektors ist abhängig vom verwendeten Betriebssystem und beinhaltet z.B. den Betriebssystemnamen, den Partitionsnamen und den Typ des Dateisystems.
Bootroutine max. 512-3-X Die Bootroutine hat die Aufgabe, das eigentliche Betriebssystem zu laden.
Tabelle 4 Prinzipieller Aufbau eines Bootsektors.
 
Die Bootsektoren der unterschiedlichen Betriebssysteme haben meistens einen unterschiedlichen Aufbau. Eines haben sie aber alle gemeinsam, sie fangen alle mit einem Maschinecode Befehl an. Dies ist wichtig, da der Bootsektor von den Bootmanagern oder der Master Boot Routine geladen und zur Ausführung gebracht wird. Da der MBR genau diese Vorraussetzung erfüllt, kann man diesen auch als Bootsektor einsetzen. Lediglich die Bootroutine müsste angepasst werden.
 
 
3. Startvorgang
 
3.1 Standard Startvorgang

nach oben

Nach dem Start des Computers und der erfolgreichen Durchführung des PowerOnSelfTests, lädt das BIOS den ersten Sektor (Partitionssektor) des Startlaufwerkes. Handelt es sich bei dem Startlaufwerk um eine Festplatte, so wird damit der MBR geladen. Nach dem Laden des MBR wird die darin befindliche Master Boot Routine zur Ausführung gebracht. Diese beginnt mit der Suche nach der aktiven Partition in der Partitionstabelle. Wurde die aktive Partition gefunden, so lädt die Master Boot Routine den Bootsektor dieser Partition in den Speicher und startet das darin befindliche Bootprogramm. Dieses Bootprogramm startet daraufhin das eigentliche Betriebssystem.
 
Da die Master Boot Routine nur in der Partitionstabelle der ersten Festplatte sucht, ist ein Start eines Betriebssystems von einer weiteren Festplatte nicht möglich.
 
 
3.2 Chainloading

nach oben

Beim Systemstart mittels "Chainloading", zu deutsch "Kettenladen", wird zu erst der Bootmanager geladen, der daraufhin nichts anderes macht als das Bootprogramm des zu startenden Betriebssystems zu laden und auszuführen. Der Bootmanager braucht dabei das zu ladende Betriebssystem nicht zu kennen und kann somit jedes Betriebssystem laden.
 
 
3.2.1 Startvorgang mit einem Bootmanager in einer primären Partition

nach oben

Der Start mit einem Bootmanager, der in einer primären Partition installiert wurde, beginnt genau so wie der normale Start ohne Bootmanager. Das BIOS lädt nach seinem POST die Master Boot Routine, welche wiederum die aktive Partition sucht und den Bootsektor dieser Partition lädt.
 
Doch im Bootsektor befindet sich jetzt nicht das Startprogramm für das Betriebssystem, sondern der erste Teil des Bootmanagers. Bootmanager sind oft in zwei oder mehrere Teile aufgeteilt, da im Bootsektor nur weniger als 512Byte für den Bootcode zur Verfügung stehen.
 
Der Bootmanager zeigt nun das Startmenü mit allen installierten und startfähigen Partitionen und wartet auf die Auswahl einer Partition durch den Benutzer. Hat der Nutzer seine Wahl getroffen, so lädt der Bootmanager den Bootsektor der ausgewählten Partition und bringt diesen zur Ausführung, genau wie dies die Master Boot Routine getan hätte.
 
 
3.2.2 Startvorgang mit einem Bootmanager in dem MBR

nach oben

Beim Start mit einem Bootmanager, der im MBR installiert wurde, lädt das BIOS nach seinem POST den MBR, welcher aber jetzt anstatt der Master Boot Routine den ersten Teil des Bootmanagers beinhaltet und bringt diesen zur Ausführung.
 
Der Rest erfolgt genau wie beim Start aus einer primären Partition heraus. Der Bootmanager lädt nun seine restlichen Teile nach und zeigt sein Bootmenü. Danach wartet er auf die Auswahl einer Partition durch den Nutzer und bringt daraufhin die ausgewählte Partition zur Ausführung, genau wie dies die Master Boot Routine getan hätte.
 
 
3.3 Start mittels GRUB

nach oben

Startet man einen Computer mit dem GRUB als Bootmanager, so ist der erste Teil des Startvorganges dem Chainloading identisch. Das BIOS macht natürlich genau so seinen POST und lädt anschließend den MBR. Je nachdem, ob der GRUB am MBR oder in einer primären Partition installiert ist, wird dieser geladen. Ist ein Bootmenü definiert, so wird dies geladen und angezeigt, ansonsten erscheint die GRUB Shell.
 
Bis hierher ist der Startvorgang identisch dem Chainloading, doch jetzt kommt der Unterschied, kennt bzw. unterstützt der GRUB das zu ladende Betriebssystem, so lädt er dessen Kernel mit samt allen Parametern selbst und führt nicht den Bootcode des Bootsektors der aktiven Partition aus. Dadurch ist es z.B. möglich, mehrere Bootmenüeinträge für ein Betriebssystem zu erstellen, welche dann wiederum unterschiedliche Kernel starten könnten.
 
Alle anderen Betriebssysteme, die nicht direkt unterstützt werden, wie z.B. alle Windows Versionen, OS2 und BeOS, werden mittels Chainloading geladen.
 
 
4. GRUB
 
4.1 Installation

nach oben

In einigen Linux Distributionen ist der GRUB bereits enthalten und lässt sich so über den Paketmanager der Distribution installieren. Ist der GRUB in der verwendeten Distribution nicht enthalten, so kann man die beiden benötigten Dateien
 
  grub-0.92-i386-pc.ext2fs
  grub-0.92.tar.gz
 
unter ftp://alpha.gnu.org/gnu/grub/ herunterladen.
 
 
4.1.1 Bootdiskette und BackUp

nach oben

 
Vor der Installation von GRUB sollte man unbedingt eine bootfähige Diskette erstellen und den MBR sowie alle Partitionssektoren sichern, um eine eventuell fehlerhafte Installation rückgängig machen zu können.
 
Für die Erstellung der bootfähigen Diskette benutzt man am besten das Diskettenimage, welches zum GRUB dazugehört, und kopiert dies einfach auf eine Diskette.
 
  > dd if=grub-0.92-i386-pc.ext2fs of=/dev/fd0
 
Danach sichert man den MBR, um die Installation von GRUB später wieder rückgängig machen zu können.
 
  > dd if=/dev/hda of=mbrhda.bin bs=512 count=1
 
Die Partitionssektoren sichert man mit:
 
  > dd if=/dev/hda1 of=hda1.bin bs=512 count=1
  > dd if=/dev/hda2 of=hda2.bin bs=512 count=1
  > ...
 
 
4.1.2 Installation auf die Festplatte

nach oben

Der erste Installationsschritt besteht darin, die Quellen des GRUB auszupacken und zu übersetzen. Dies geschieht nach der üblichen Vorgehensweise durch die Kommandos.
 
  > tar xzf grub-0.92.tar.gz
  > ./configure
  > make
  > make install
 
Nach der erfolgreichen Ausführung dieser Kommandos sollten die Dateien des GRUB nun unterhalb von "/usr/local/share/grub/i386-pc" oder auf manchen Systemen unter "/usr/share/grub/i386-pc" liegen.
 
Laut den Richtlinien des File System Hierarchie Standards gehören die Dateien des GRUB unter "/boot/grub". Dafür sind folgende Schritte notwendig:
 
  > mkdir /boot/grub
  > cp /usr/local/share/grub/i386-pc/* /boot/grub
 
Unter den kopierten Dateien befinden sich die beiden Dateien stage1 und stage2. Stage1 enthält den ersten Teil von GRUB, genauer gesagt dessen MBR bzw. Bootsektor. Die Master-Boot-Routine von Stage1 sucht aber nicht nach der aktiven Partition, sondern lädt die Datei Stage2 und bringt diese zur Ausführung. Stage2 ist der Hauptteil des GRUB's, sie zeigt das Bootmenü und lädt das eigentliche Betriebssystem. Die restlichen *stage* Dateien sind Dateisystemtreiber für die unterstützten Dateisysteme.
 
Der GRUB selbst liegt in "/usr/local/sbin" oder "/usr/sbin" und lässt sich nun über
 
  > /usr/local/sbin/grub
 
starten.
 
 
4.1.3 Deinstallation

nach oben

Um den GRUB wieder aus dem MBR zu entfernen, benötigt man die Datei mit dem vor der Installation erstelltem BackUp des MBR. Diese Datei wird nun einfach in den MBR zurück geschrieben.
 
  > dd if=mbrhda.bin of=/dev/hda bs=446 count=1
 
Dieser Befehl schreibt aber nicht den ganzen MBR zurück, sondern nur die ersten 446 Bytes. Dadurch bleiben alle Änderungen an den Partitionstabellen erhalten. Dies ist wichtig, da bei einer geänderten Partitionsstruktur alle geänderten Partitionen unbrauchbar werden.
 
 
4.2 GRUB einrichten
 
4.2.1 Namenskonvention

nach oben

Bei der Bezeichnung der einzelnen Festplatten und Partitionen verwendet der GRUB ein eigenes Schema. So werden alle Festplatten mit Ziffern anstatt mit Buchstaben durchnumeriert. Die einzelnen Partitionen werden ebenfalls mit Ziffern benannt, welche durch ein Komma vom Festplattennamen getrennt sind. Dabei beginnt die Zählung immer mit 0 und es wird nicht zwischen IDE und SCSI Festplatten unterschieden.
 
IDE-/SCSI Festplatten werden in Abhängigkeit der im BIOS eingestellten Bootreihenfolge eingereiht. Diskettenlaufwerke werden nach demselben Schema wie unter Linux benannt.
 
Festplatte Partition GRUB Linux
1 1 hd0,0 hda1
  2 hd0,1 hda2
  3 hd0,2 hda3
  4 hd0,3 hda4
2 1 hd1,0 hdb1
  2 hd1,2 hdb2
  3 hd1,3 hdb3
  4 hd1,4 hdb4
... ... ... ...

Tabelle 5 Namensgebung des GRUB.

 
Zusätzlich müssen immer alle Festplatten und Partitionsangaben in runden Klammern erfolgen.
 
 
4.2.2 Setup

nach oben

Nach erfolgreicher Installation des GRUB muss dieser nun noch eingerichtet, d.h., in den MBR oder in den Bootsektor einer primären Partition eingetragen werden. Dies geschieht mit Hilfe der GRUB Shell, die man einfach mit dem Befehl grub startet.
 
Die GRUB Shell meldet sich mit folgender Ausgabe und erwartet dann ihre Befehle.
 
  > grub
  GRUB version 0.91 (640K lower / 3072K upper memory)
   
  [ Minimal BASH-like line editing is supported. For the first word, TAB
   lists possible command completions. Anywhere else TAB lists the possible
   completions of a device/filename. ]
   
  grub>
 
Als erstes sollte man dem GRUB mitteilen, auf welcher Partition er seine Daten findet. Zu den benötigten Daten gehören alle *stage* Dateien. Dies geschieht mit dem Befehl <root> gefolgt von der Festplatten und Partitionsangabe.
 
  grub> root (hd0,0)
  Filesystem type is ext2fs, partition type 0x83
 
Dieses Beispiel zeigt die Angabe für die 1. Festplatte und die 1. Partition.
Ist man sich bei der Angabe sicher, so kann man den GRUB auch dazu veranlassen, nach seinen Dateien selbst zu suchen, dies geschieht mit:
 
  grub> find /boot/grub/stage1
  (hd0,0)
 
Die automatische Suche nach den Dateien des GRUB hat noch einen angenehmen Nebeneffekt, denn der GRUB kennt nun die Position seiner Dateien und man kann auf diese Angabe bei den folgenden Befehlen verzichten.
Nun kann es mit dem eigentlichen Setup auch schon losgehen. Der <setup> Befehl installiert den GRUB, wobei man nur das Ziel der Installation angeben muss.
 
  grub> setup (hd0)
  Checking if "/boot/grub/stage1" exists... yes
  Checking if "/boot/grub/stage2" exists... yes
  Checking if "/boot/grub/e2fs_stage1_5" exists... yes
  Running "embed /boot/grub/e2fs_stage1_5 (hd0)"... 16 sectors are embedded. succeeded
  Running "install  /boot/grub/stage1 d (hd0) (hd0)1+16 p (hd0,0)/boot/grub/stage2 /boot/grub/menu.lst"... succeeded
  Done.
 
Ohne vorherige Suche nach den Dateien des GRUB würde der <setup> Befehl folgendermaßen aussehen.
 
  grub> setup  --stage2=/boot/grub/stage2 (hd0)
 
Wurde der <setup> Befehl erfolgreich ausgeführt, so ist das Setup des GRUB beendet und die GRUB Shell kann nun mit dem <quit> Befehl beendet werden..
 
 
4.3 Startvorgang mittels GRUB Shell

nach oben

Nach der erfolgreichen Installation des GRUB sollte nach einem Neustart des Rechners der Prompt der GRUB Shell erscheinen.
 
  GRUB version 0.91 (640K lower / 3072K upper memory)
   
  [ Minimal BASH-like line editing is supported. For the first word, TAB
   lists possible command completions. Anywhere else TAB lists the possible
   completions of a device/filename. ]
   
  grub>
 
Durch die Eingabe bestimmter Befehle lässt sich nun jedes installierte Betriebssystem manuell starten. Da der Start mittels GRUB Shell sehr aufwendig ist und in der Praxis eher die Ausnahme darstellt, sind die einzelnen Shellbefehle erst im Abschnitt 4.4 Das GRUB Bootmenü genauer erklärt.
 
Start eines unterstützten Betriebssystems
 
Bei allen unterstützen Systemen, wie z.B. FreeBSD, NetBSD, OpenBSD, u.a., wird der Kernel direkt geladen. Dazu muss dem GRUB die Position des Kernels und dessen Root Device mitgeteilt werden. Anschließend kann das System durch den <boot> Befehl gestartet werden.
 
Beispiel für Linux:
   
  > root (hd0,0)
  > kernel /boot/vmlinuz root=/dev/hda1
  > initrd /boot/initrd.img
  > boot
 
Der Befehl <root> legt die Partition fest, welche für alle weiteren Pfadangaben verwendet werden soll. Der <kernel> Befehl legt die Position des Kernels (1. Parameter) und dessen Root-Device (2. Parameter) fest. Möchte man dem Kernel einige Parameter mitgeben, so muss man diese auf Zeile mit dem <kernel> Befehl hinter der Kerneldatei angeben. Mit <boot> wird das System schließlich gestartet.
 
Start nicht unterstützter Systeme
 
Alle nicht direkt unterstützen Betriebssysteme, wie sämtliche Windows Versionen, OS2 oder BeOS, u.a., werden mittels Chainloading gestartet. Dabei lädt GRUB den original Bootsektor des Systems und führt diesen aus.
 
Beispiel:
  > root (hd0,1)
  > chainloader +1
  > boot
 
Der Befehl <root> legt natürlich auch hier die Partition fest, welche für alle weiteren Pfadangaben verwendet werden soll. Der Befehl <chainloader> weist den GRUB an, das System mittels Chainloading zu laden. Als Parameter wird dabei die relative Position des Bootsektors zum Partitionsanfang angegeben, welche aber immer +1 sein sollte, da der Bootsektor immer der erste Sektor einer Partition ist. Mit <boot> wird wiederum das System gestartet.
 
 
4.4 Das GRUB Bootmenü

nach oben

Da der Start des Kernels über die GRUB-Shell auf die Dauer sicherlich zu aufwendig ist, bietet der GRUB die Möglichkeit einer Menüsteuerung. Im Gegensatz zu vielen anderen modernen Bootmanagern unterstützt der GRUB nur ein einfaches textbasiertes Menü. Das Menü wird in einer Konfigurationsdatei, z.B. "menu.lst", definiert und sollte im selben Verzeichnis wie die anderen GRUB Dateien liegen.
 
 
4.4.1 Aufbau

nach oben

Die Konfigurationsdatei des Bootmenüs besteht aus einer Reihe von globalen Einstellungen und den eigentlichen Bootmenüträgen. Jeder Bootmenüeintrag beginnt mit dem Schlüsselwort <title>, gefolgt von einem eindeutigen Bezeichner und endet mit dem nächsten Bootmenüeintrag oder dem Dateiende. Aus diesem Grund müssen die globalen Einstellungen auch am Anfang der Datei stehen. Kommentarzeilen beginnen mit einer Route #.
 

# GRUB Bootmenükonfigurationsdatei

# Allgemeine Befehle
...
title Linux
# Befehle für den Linux Start

...
title Windows
# Befehle für den Windows Start

...

 
 
4.4.2 Allgemeine Befehle

nach oben

Der GRUB unterstützt einige allgemeine Befehle, um das Verhalten des GRUB's während des Startvorganges zu beeinflussen. Diese Befehle dürfen nur am Anfang der Konfigurationsdatei vor dem ersten <title> Befehl stehen.
 
Befehl Beschreibung
timeout <Sekunden> Gibt die Zeitspanne an, nach der der Default-Eintrag automatisch gestartet wird.
default <Nummer> Gibt den Default-Eintrag an (zero-based), ohne die Angabe wird der erste Eintrag angenommen.
fallback <Nummer> Gibt den Eintrag an, der gestartet wird, nachdem der Start des Default-Eintrags fehlgeschlagen ist.
password <Passwort> [Menüdatei] Gibt das Passwort an, welches vom Nutzer während des Systemstarts eingegeben werden muss. Ohne das richtige Passwort kann weder ein "gelockter" Bootmenüeintrag noch der Shellmodus gestartet werden. Die Angabe einer weiteren Menüdatei ist optional und erlaubt es, z.B. das richtige Bootmenü erst nach Eingabe des richtigen Passwortes anzuzeigen.
setkey <Orig.Belegung> <Neue Belegung> Mapped einzelne Tasten um.
Tabelle 6 Auszug aus den Standardbefehlen.
 
 
4.4.3 Befehle für die Bootmenüeinträge

nach oben

Für die einzelnen Bootmenüeinträge wurden weitere Befehle definiert. Diese Befehle können beliebig oft und an beliebige Stelle der Konfigurationsdatei aufgerufen werden. Außer dem Befehl <title> sind alle Befehle auch in der GRUB-Shell verfügbar. In der folgenden Tabelle befinden sich ein paar dieser Befehle, genauere Information erhält man in der GRUB Shell mit dem Befehl <help>.
 
Befehl Beschreibung
color <Farbe> [Highlight] Setzt die Farbe des Bootmenüeintrages. Highlight gibt die Farbe an, die der Bootmenüeintrag haben soll, nachdem er ausgewählt wurde. Alle Farben werden in der Form <Vordergrund/Hintergrund> angegeben. Die Bezeichnungen der einzelnen Farben sind in der GRUB Hilfe definiert und lassen sich in der GRUB Shell mit "help color" erfragen.
help [Befehl] Gibt einen kurzen Hilfetext zum angegebenen Befehl aus. Wird kein Befehl angegeben, so wird eine Liste aller Befehle angezeigt.
initrd Lädt eine RAM-Disk in den Speicher.
kernel <Quelle> [Parameter] Lädt den durch <Quelle> angegebenen Kernel. Zusätzlich können Parameter hinzugefügt werden, die dem Kernel direkt übergeben werden.
lock Sichert einen Bootmenüeintrag mit dem durch den Befehl <password> angegeben Passwort.
makeactive Aktiviert eine Partition.
map <Ziel> <Quelle> Mapped zwei Partitionen um. Damit kann man einem System vertäuschen es wäre auf der Partition X, obwohl es sich auf der Partition Y befindet.
root <Partition> Gibt die Partition an, auf der sich das zu bootende System befindet. GRUB versucht die Partition zu mounten, um die Partitionsgröße festzustellen.
rootnoverify <Partition> Bewirkt das Gleiche wie der Befehl <root>, nur das GRUB nicht versucht, die Partition zu mounten. Damit lässt sich das 1024 Zylinder Problem umgehen.
title <Name> Startet einen neuen Bootmenüeintrag. Der Name ist der der im Bootmenü angezeigt wird.
hide/unhide <Partition> Dieser Befehl versteckt bzw. zeigt eine Partition.
Tabelle 7 Auszug aus den GRUB Befehlen.
 
 
4.4.4 Tastaturbelegung ändern

nach oben

Da während des Starts des GRUBs noch keine Codetabellen geladen wurden und so die Tastatur nur "amerikanisch" spricht, ermöglicht es der GRUB einzelne Tasten logisch zu vertauschen. Dies geschieht mit dem Befehl <setkey>. Der Aufruf geschieht mit der Angabe zweier Tasten, welche gegenseitig vertauscht werden.
 
Alle Sondertasten werden bei der Tastenangabe mit einem Bezeichner beschrieben.
 
Bezeichner Sondertaste Bezeichner Sondertaste
ampersand & greater >
asterisk * less <
at @ minus -
backquote ` numbersign #
backslash \ parenleft (
bar | parenright )
braceleft { percent %
braceright } period .
bracketleft [ plus +
bracketright ] question ?
caret ^ quote ´
colon : semicolon ;
comma , slash /
dollar $ space Leerzeichen
doublequote " tilde ~
equal = underscore _
exclam !
 
 

4.4.5 Beispiel eines Bootmenüs

nach oben

# Tastaturumbelegungen
setkey z y
setkey y z
setkey Z Y
setkey Y Z


# Automatisch nach 30 Sekunden starten.
timeout 30

# Den ersten Bootmenueeintrag als Standard starten.
default 0

# Bei Fehler den zweiten Bootmenueeintrag starten.
fallback 1

# Passwort fuer die geschuetzten Eintraege
password abc

# Bootmenuefarbe festlegen
color white/blue blink-red/green

# Bootmenueeintrag fuer Linux
title Linux
root (hd0,0)
kernel /boot/vmlinuz root=/dev/hda1 devfs=mount
initrd  /boot/initrd.img


# Bootmenueeintrag fuer Linux FailSafe
title Linux FailSafe
lock
root (hd0,0)
kernel /boot/vmlinuz root=/dev/hda1 devfs=nomount failsafe
initrd  /boot/initrd.img

# Bootmenueeintrag fuer Windows XP
title Windows XP
rootnoverify (hd0,1)
makeactive
chainloader +1


# Bootmenueeintrag fuer die Diskette
title Startdiskette
root (fd0)
chainloader +1


# Bootmenueeintrag um GRUB neu zu installieren.
title GRUB neu installieren
lock
root (hd0,0)
find /boot/grub/stage1
setup (hd0)


# Bootmenueeintrag um die Menuefarben zu aendern
title Farbe wechseln
color light-green/red white/blue

 

Diese Bootmenüdatei erzeugt folgendes Bootmenü:

 
 
Hinweis: Um von dem Bootmenü zurück in die GRUB Shell zu gelangen muss man die Taste <c> drücken.
 
 
 

Tobias Eger, 14.12.2002