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

