Windows hat meinen Bootsektor überschrieben. Wie kann ich Grub wiederherstellen

Im folgenden gehen wir davon aus, dass zwei Festplatten im PC sind. Auf der ersten Platte ist Windows installiert, und in einer Partition dieser Platte ist sidux installiert, z. B. hdb5

Jetzt boote die Live-Cd, öffne eine Konsole und werde Root mit:

sudo root

Mounte die Partition, wo sidux installiert ist (in unserem Beispiel hdb5)

mount /media/hdb5

Jetzt Grub wieder in den MBR schreiben lassen:

grub-install --recheck --no-floppy --root-directory=/media/hdb5 /dev/hda

Erstellen einer bootfähigen Diskette (Floppy)

Während der Festplatteninstallation von sidux kann man eine Boot-Diskette erstellen. Hier wird gezeigt, wie man diese nachträglich machen kann. Dafür sind von Dir folgende Schritte auszuführen:

1.Formatiere eine Floppy

fdformat /dev/fd0

2.Filesystem auf der Diskette erzeugen (es empfehlt sich hier ext2 oder vfat zu nehmen)

mkfs -t ext2 -c /dev/fd0u1440 or mkfs.vfat /dev/fd0u1440

3. Mounte die Floppy

# mount /dev/fd0 /floppy

4. Verzeichnisstruktur auf der Diskette erzeugen

mkdir -p /floppy/boot/grub

5. Benötigte Dateien auf die Diskette kopieren

cp /boot/grub/stage1 /floppy/boot/grub
cp /boot/grub/stage2 /floppy/boot/grub

6. Damit von Diskette das richtige OS (sidux) auch von der richtigen Partition starten kann, musst Du abschließend noch folgendes machen:

7. Kopieren der "menu.lst"-Datei, die von sidux in das /boot-Verzeichnis der sidux-Partition geschrieben wurde, auf die Diskette

cp /boot/grub/menu.lst /floppy/boot/grub/menu.lst

8. Unmounte die Diskette

umount /dev/fd0

9. Aufrufen der Grub-Shell, um die Einrichtung abzuschliessen. Hier gibst Du folgendes ein:

grub grub> root (fd0) grub> setup (fd0) grub> quit

Damit haben wir uns eine bootbare Diskette erstellt, mit der sidux zuverlässig gebootet werden kann.

Muss man die Diskette aus einer gestarteten Live-CD erzeugen, ist der Ablauf ein bisschen anders. Nehmen wir an, sidux ist auf der /dev/hda5 Partition installiert, dann muss folgendes zusätzlich gemacht werden anstelle von Punkt 7

10. Mounte die sidux Partition

mount /dev/hda5 /media/hda5

11. Kopieren der "menu.lst"-Datei, die von sidux in das /boot-Verzeichnis der sidux-Partition geschrieben wurde, auf die Diskette

cp /mnt/hda5/boot/grub/menu.lst /floppy/boot/grub/menu.lst

12. Unmounte die sidux Partition

umount /dev/hda5

Der Rest ist analog zu den Punkten 8 und 9 im ersten Fall.

Grub aus dem MBR entfernen

Dies ist sehr einfach: als Root

lilo -M /dev/hda -s /dev/null

in eine Konsole eingeben.

GRUB-Bootmanager - was ist das?

Allgemeines

Grub ist ein Bootmanager, der geeignet ist, Betriebssysteme von verschiedenen Partitionen zu starten. Grub ist nicht auf Blocklisten zum Finden der Dateien für den Systemstart angewiesen und kann eine ganze Reihe von Dateisystemen direkt lesen: ext2, ext3, reiserfs, ... (Linux), Fat32, Fat16 (Windows), UFS (BSD), Minix und viele andere.

Grub beherscht BIOS-Erweiterungen (kann also Partitionen oberhalb der 8 GByte booten!) und kennt keine 1024-Zylindergrenze. Grub ist es ziemlich egal, wo der Kernel physikalisch liegt, er braucht nur die Angabe der Partition und den Pfad des zu bootenden Kernels (dies kann auch ein Symlink sein). Nach Änderung der Konfiguration (also der menu.lst) ist kein Programmaufruf wie bei Lilo nötig, die neue Konfiguration wird beim nächsten Booten eingelesen.

sidux verwendet Grub beim Booten von CD. und bei einer HD-Installtion wird als Standard Grub verwendet. Grub kann dennoch problemlos nachträglich installiert werden. Grub wird mit folgendem Befehl aus einer Root-Shell in den MBR installiert werden:

grub-install --root-directory=/media/hdaX /dev/hdY

/media/hdaX steht hierbei für die schreibend gemountete Partition, auf der im Verzeichnis /boot/grub die benötigten Dateien (stage2, stage1_5xxx) abgelegt werden.
Die Konfigurationsdatei menu.lst muss ebenfalls in diesem Verzeichnis erstellt werden. /dev/hdY ist die Platte, in deren MBR Grub installiert wird, normalerweise /dev/hda.

Festplattenbezeichner/Device-Namen

Grub unterscheidet nicht zwischen SCSI- und IDE-Festplatten. (hd0) ist immer die erste Festplatte, die in der Bootreihenfolge (Einstellung im BIOS) auch die erste ist, egal ob nun IDE oder SCSI. Ungewöhlich ist die Zählweise, die 1. Partition auf der ersten Festplatte heisst (hd0,0). Die primären Partitionen haben die Ziffernfolge von 0-3 und die logischen Partitionen zählen dann ab 4 aufwärts.

Grub Linux Label
(fd0) /dev/fd0 Floppy (under Windows)
(hda0) /dev/hda erste hd
(hd0,0) /dev/hda1 Part.1 auf hd1
(hd0,5) /dev/hda6 Erweiterte Part. auf hd 1

Alle Bezeichnungen für Geräte werden für Grub in Klammern () gesetzt. Man beachte jedoch die Einträge hinter dem Kernel, im Gegensatz zu Grub benötigt der Kernel die Angaben in der für Linux üblichen Art. Die Einträge im folgenden Beispiel zeigen beide auf die gleiche Partition, nämlich die vierte auf der ersten Platte. Der obere Eintrag in der Grub-Schreibweise, der untere in der für Linux typischen Art:

root (hd0,3)
		kernel /boot/vmlinuz root=/dev/hda4

Befehls-Modus (Grub-Shell)

Ein besonders angenehmes Feature von Grub ist der Command-Modus. Er wird mit "c" aufgerufen, es erscheint die Grub-Shell. Damit ist man in der Lage, auch bei einer fehlerhaften menu.lst verschiedene Systeme und Dateien (z. B. den Kernel) zu finden und zu booten.

Um ein wenig zu testen, kann Grub auch aus einem gebooteten sidux einer Root-Shell mit # grub gestartet werden. In der Grub-Shell kann man sich mit "help" alle verfügbaren Befehle anzeigen lassen. Detailierte Hilfe zu jedem Befel gibt es mit "help befehl", zur Linux-Shell kehrt man mit quit" zurück (die Grub-Shell wird beendet). In der Grub-Shell funktioniert die Tabulatortaste ähnlich wie in der Linux-Shell, das ist eine sehr grosse Erleichterung. Kommandos, Laufwerksbezeichnungen und Dateinamen lassen sich mit der TAB-Taste automatisch vervollständigen.

Grub bietet hierbei z. B. die Möglichkeit, die Lage des Kernels und der initrd noch vor dem eigentlichen Booten mittels "find" festzustellen, z. B. gibt Grub auf den Befehl

find /boot/vmlinuz

die Partitionen aus, die einen Kernel mit dem Namen vmlinuz im Verzeichnis /boot enthalten:

(hd0,3) (hd1,0)

Die verfürgbaren Partitionen kann man mit dem Befehl "geometry" festellen, ein

geometry (hd0)

zeigt folgendes:

"drive 0x80: C/H/S = 3648/255/63, The number of sectors = 58605120, /dev/hda Partition num: 0,
		Filesystem type is fat, partition type 0xb Partition num: 1,
		Filesystem type is fat, partition type 0xb Partition num: 2,
		Filesystem type is fat, partition type 0xc Partition num: 4,
		Filesystem type is ext2fs, partition type 0x83 Partition num: 5,
		Filesystem type unknown, partition type 0x82 Partition num: 6,
		Filesystem type is fat, partition type 0xb"
		

Nachdem der Kernel und eine eventuell vorhandene initrd (oder auch miniroot.gz) gefunden wurde, kann mit boot gestartet werden.

Edit-Modus

Dieser Modus ermöglicht es, die Einträge der Datei menu.lst während des Bootens zu ändern. Dies geht auch, wenn Grub von CD gebootet wird und die Datei schreibgeschützt ist. Dazu muss zuerst die ESC-Taste, dann bestätigen mit Return und dann die Taste "e" gedrückt werden. Die Parameter werden dann einfach ans Ende der Zeile geschrieben oder man bewegt sich in der Zeile mit den Cursor-Tasten.

menu.lst (Beispiele für mögliche Einträge)

Kommentarzeilen werden mit # eingeleitet und stören den Bootvorgang nicht, sie können also in der Datei verbleiben.

# Beispiele: /boot/grub/menu.lst
################################################
# setkey verändert die Tastaturbelegung auf die deutsche
Tastatur
setkey y z
setkey z y
setkey Y Z
setkey Z Y
setkey equal parenright
setkey parenright parenleft
setkey parenleft asterisk
setkey doublequote at
setkey plus bracketright
setkey minus slash
setkey slash ampersand
setkey ampersand percent
setkey percent caret
setkey underscore question
setkey question underscore
setkey semicolon less
setkey less numbersign
setkey numbersign backslash
setkey colon greater
setkey greater bar
setkey asterisk braceright
# stellt die Zeit in Sekunden ein, nach der automatisch gebootet wird
# in dieser Zeit kann mit "e" oder "c" der Edit- bzw. Command-Modus aufgerufen werden
timeout 30
# stellt das Default-System das nach dem Timeout gebootet wird ein default 
default 0
# # merkt sich die zuletzt gebootete Partition wenn "savedefault" unter
Title steht
#default saved
# # wird gebootet, falls das Booten des Default-Eintrages fehlschlägt
fallback 1
# Vordergrund/Hintergrund-Farben festlegen
# Auswahl: blinkt rot Hintergrund: blau color white/blue blink-red/blue
# Eintrag 1 ist default 0 und bootet z. B. Windows 98
#################
title Windows 98 (partition 1 on disk 1)
rootnoverify (hd0,0)
makeactive
chainloader +1
# Eintrag 2 ist default 1 und bootet z.b. Windows 2000
#################
title Windows 2000 (partition 2 o?n disk 1)
rootnoverify (hd0,1)
makeaktive
chainloader
/bootsect.dos
# Eintrag 3 ist default 2 und booted Suse
##################
title Suse-Linux
root (hd1,5)
kernel /boot/vmlinuz
root=/dev/hdb6 read-only
# other parameters are possible i.e.:
# kernel /boot/vmlinuz root=/dev/hdb6 single kernel /boot/vmlinuz root=/dev/hdb6 vga=ask
# Eintrag 4 ist default 3 und bootet Debian
##################
title GNU/Debian (first extended partition o?n disk 2)
root (hd1,4)
kernel /boot/vmlinuz
root=/dev/hdb5 read-only
# Eintrag 5 ist default 4 und bootet DOS von der Platte
##################
title DOS (partition 3 o?n disk 1)
root (hd0,2)
makeactive chainloader +1
# Eintrag 6 ist default 5 und booted von Diskette
##################
title floppy
chainloader (fd0)+1

Von sekundärer Platte booten (z. B. mehrere Windows-Installationen)

Manche Leute brauchen/wollen mehrere Windows-Installationen. Windows will aber immer von der 1. Platte starten. Wir müssen also eine Partition verstecken und eine andere aktivieren. Die folgenden Befehle sollte man auf der GRUB-Kommandozeile eingeben und bei Erfolg in die menu.lst eintragen. Das sollte dann für jede Windows-Partition geschehen. Backup nicht vergessen! ;-)

hide (hd0,0) # versteckt Partition 1 der Platte 1
unhide (hd0,1) # macht Partition 2 der Platte 1 sichtbar
rootnoverify (hd0,1) # macht Partition 2 der Platte 1 zum Root-FS 
makeactive # macht Partition 2 der Platte 1 aktiv
chainloader +1 # zeigt auf der ersten Sektor der Start-Partition
boot # bootet das Betriebssystem

Wenn man von der 2. Platte ein 2. Windows starten will, vertauscht man virtuell Platte 1 und 2. Dadurch wird Windows eine erste Platte vorgegetäuscht:

map (hd0) (hd1)
map (hd1) (hd0)

Stolperfallen

Grub kennt zwar keine 1024 Zylindergrenze und kann Systeme oberhalb von 1024 Zylindern booten, aber /boot/grub/stage2 muss durch das Bios erreichbar sein (also davor liegen). stage2 darf nach der Installation nicht verschoben oder in seiner Lage verändert werden (z. B. könnte Defrag sowas versuchen). Beim Setup werden Daten geschrieben, die dann nicht mehr stimmen würden. Es ist sinnvoll, stage2 mit einem Schreibschutz zu versehen (man muss sich im aktuellen Verzeichnis befinden):

Dos: attrib +r +s stage2
LINUX: # chmod a -w ./stage2

Wo kann ich mehr erfahren?

Lade Dir ein Grub-Disketten-Image (ca. 580 kB) und probiere damit ein wenig herum. Auf der Diskette ist auch ein funktionierendes FreeDOS und ein Editor. Wenn Du den Schreibschutz der Diskette entfernst, kannst Du die menu.lst der Diskette editieren und an deine Gegegenheiten anpassen.

Du kannst auch die offizielle FAQ zu Grub nachlesen..

Sofern man eine unterstützte Netzwerkkarte besitzt, kann Grub auch über das Netzwerk booten. Eine entsprechende Boot-Disk kann man sich hier erstellen lassen und anschließend downloaden (allerdings mit einer älteren Version von Grub).