| |
| |
| |
| |
|
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. |
| |
| |
| |