000
29.04.2006, 20:32 Uhr
Pablo
Supertux (Operator)
|
Durch KaraHeads Bemerkung im Thread Grub und Windows km ich auf die Idee dieses kleines Howto zu schreiben.
Vielen von uns ist es mind. ein Mal passiert, dass beim Booten plötzlich das System nicht bootet oder ein anderes System bootet, das man nicht wollte. Sowas kann passieren, wenn der Master Boot Record (MBR) überschrieben wurde, wenn man zum Beispiel ein anderes Betriebsystem auf eine weitere Partition/Festplatte installiert und das pseudo-nutzerfreundliche Setup des neuen Betriebsystem ohne zu Fragen seinen Boot Loader installiert. Ein Beispiel sollte bekannt sein: Microsoft Windows. Beim Booten wird man sehr überrascht, weil unseres schönes Betriebsystem Auswahlmenü (von Grub oder Lilo) weg ist und stattdessen Windows wie von Geistern gestart wird
Wenn man zur Hand eine beliebige GNU/Linux LiveCD hat, kann das Problem in 5 Minuten behoben werden.
Zitat: |
Der Begriff Master Boot Record (MBR) bezeichnet in der x86-Architektur den ersten Datenblock (512 Byte) eines in Partitionen aufgeteilten, bootfähigen Speichermediums, wie beispielsweise einer Festplatte. Der MBR enthält eine Partitionstabelle, die die Aufteilung des Datenträgers beschreibt und einen Boot-Loader, ein Programm, das ein Betriebssystem auf einer der Partitionen startet.
[...]
Boot-Loader
Dies ist ein kleines Programm, das vom BIOS aufgerufen wird. Im Normalfall sucht dieses in der Partitionstabelle nach einer „aktiven Partition“, lädt den Boot-Sektor der ersten aktiven Partition und führt diesen aus. Dadurch wird dann das eigentliche Betriebssystem geladen.
Es existieren auch Bootmanager, die sich nicht an diese Konvention halten, und statt dessen ein Auswahlmenü oder Ähnliches anzeigen, und so z. B. das Booten von beliebigen Partitionen erlauben.
Ein fehlender oder defekter Boot-Loader führt dazu, dass von der Festplatte überhaupt nicht gebootet werden kann, selbst wenn in einer der Partitionen ein Betriebssystem mit intaktem Bootsektor vorhanden ist.
|
Quelle: http://de.wikipedia.org/wiki/Master_Boot_Record
Wiederherstellung mit GNU/Grub oder Lilo
GNU/Linux benutzt in der Regel den GNU/Grub. Lilo wird heute selten verwendet und die meisten Distriutionen ersetzen Lilo nach und nach durch GNU/Grub. Mir persönlich gefällt GNU/Grub sehr, ich finde, dass GNU/Grub mehr Vorteile als Lilo hat. Leider ist es eine ganze lange Weile her, dass ich den GNU/Grub benutze und jetzt weiß ich so gut wie nichts mehr von Lilo, deswegen kann es sein, dass ich mich da ein wenig irre, oder der Befehl mit einem bestimmten Parameter ausgeführt werden werden.
Man muss immer seine Partitionen kennen. Da der GNU/Grub anders als Lilo die Konfigurtion aus der Festplatte liest, muss GRUB Zugriff auf /boot/grub/menu.lst haben, um das Boot Menü zu laden. Deswegen ist es wichtig zu wissen, wo sich die boot Partition befinden. Im folgenden Howto werde ich folgende Partitionstabelle verwenden
Code: |
hda1 --> / --> (hd0,0) hda2 --> /boot --> (hd0,1) ...
|
Wenn man GNU/Grub benutzt und eine separate boot Partition hat, muss diese Partition ein symbolisches Link mit Namen boot auf sich selbst haben, da Grub die Konfiguration aus der Datei (boot-partition)/boot/grub/menu.lst liest.
GNU/Grub hat eine eigene Konvention, Partitionen zu benennen. Für Grub ist es egal, ob die Festplatte eine IDE oder SCSI Platte ist, die Primary Master Festplatte ist (hd0), die Primary Slave (hd1), usw Die Partitionen werden nicht von 1 hochgezählt sondern von 0 hochgezählt. So ist beispielweise die Partition hda5 für GNU/Grub (hd0,4). Hätte ich nur SCSI Platte, dann wäre sdb2 für GNU/Grub (hd1,1).
Das erste was man machen muss, ist der Computer mit einer beliebigen LiveCD booten. Dann öffnet man eine Shell und führt folgendes als root ein:
Lilo: (ich hoffe, ich kann mich noch erinnern )
bash: |
$ mkdir -p /mnt/system $ mount /dev/hda1 /mnt/system $ mount /dev/hda2 /mnt/system/boot $ chroot /mnt/system /bin/bash --login $ lilo $ exit $ umount /mnt/system/boot $ umount /mnt/system
|
GNU/Grub
bash: |
$ mkdir -p /mnt/system $ mount /dev/hda1 /mnt/system $ chroot /mnt/system /bin/bash --login $ grub # [1] $ exit $ umount /mnt/system
|
[1] Wenn man grub eingeben hat, dann startet das BASH-Like Grub Interface
GRUB: |
grub> root (hd0,1) # die boot Partition angeben, die root Partition falls man # keine boot Partition hat
grub> setup (hd0) # muss nicht zwingend die Primary Master Festplatte
grub> quit # um BASH-Like Grub Interface zu verlassen
|
und es sieht ungefähr so aus:
GRUB: |
GNU GRUB version 0.96 (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> root (hd0,1) Filesystem type is ext2fs, partition type 0x83
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 (hd0) (hd0)1+16 p (hd0,1)/boot/grub/stage2 /boot/grub/menu.lst"... succeeded Done.
|
Wiederherstellung mit einem Backup des MBR
Man kann sich ein Backup des gesamten MBR der Festplatte erstellen und dieses Backup einspielen, das funktioniert auch. Diese Methode sollte aber von denen ausgeführt werden, die wissen, was sie tun, weil man seine Daten sehr schnell schrotten kann, wenn man die Partitionstabellen (Bytes 446 - 509 des MBR) überschreibt!
1. Backup des gesamten MBR
bash: |
$ dd if=/dev/hda of=/root/hda_mbr bs=512 count=1
|
2. Backup des Boot Loaders
bash: |
$ dd if=/dev/hda of=/root/hda_mbr bs=440 count=1
|
Wenn man ein backup hat und man will seinen MBR neu schreiben, weil andere Betreibsyste ohne jegliche Nachfrage den MBR überschrieben hat
1. Backup des gesamten MBR einspielen
bash: |
$ dd if=/root/hda_mbr of=/dev/hda bs=512 count=1
|
2. Backup des Boot Loaders einspielen
bash: |
$ dd if=/root/hda_mbr of=/dev/hda bs=440 count=1
|
Man sollte immer vorsichtig sein, wenn man mit dem Befehl dd arbeitet und die Option if=/dev/irgendeineplatte hat, denn man kann sehr leicht die Daten komplett kaputt machen, wenn man die Partitionstabelle löscht -- A! Elbereth Gilthoniel! silivren penna míriel o menel aglar elenath, Gilthoniel, A! Elbereth! Dieser Post wurde am 29.04.2006 um 20:38 Uhr von Pablo editiert. |