Grub auslesen

Peter Voigt peter.voigt1 at gmx.net
Tue Feb 5 08:52:36 CET 2008


On Mon, Feb 04, 2008 at 09:17:06PM +0100, Thomas Findeisen wrote:

> Gibt es eine Möglichkeit den vorhandenen Grub auszulesen? Ich weiss von
> welchem MBR gestartet wird aber kann die Kette nicht mehr ganz
> nachvollziehen durch welche sich die SCSI-Platten dann einhängen.

Bevor die Datei /boot/grub/menu.lst ins Spiel kommt, definiert der
MBR, auf welcher Platte/Partition nach ihr gesucht wird

Der Zugriff läuft so ab:

Als erstes lädt das i386-BIOS den Grub First Stage Bootloader, der im
MBR abgespeichert ist. 

Im MBR ist zusätzlich abgespeichert, auf welcher Platte auf welcher
Stelle der Fist Stage Bootloader den Grub Second Stage Bootloader findet,
den er ins RAM laden muß.

Beim Installieren von Grub wurde dieser Second Stage Bootloader in
ein Verzeichnis /boot/grub gespeichert und gleichzeitig der eben erwähnte
Zeiger im MBR passend gesetzt.

Dieser Zeiger findet sich im MBR ab der Stelle 07C40, anzuschauen
z.B. durch

dd if=/dev/hda of=- bs=512 count=1 | od -xa

Dort ist folgendes zu finden:

07C40 .... 

Das einzelne Byte an dieser Stelle definiert das Startlaufwerk,
auf dem der Second Stage Bootloader liegt. 80 definiert die erste
Platte, 81 die zweite usw.

Wen interessiert, von welcher Platte Grub bootet, muß also dieses
Byte anschauen.

07C41 ....

Ist dieses Byte auf 0 gesetzt (Regelfall), dann gilt im 
folgenden LBA-Schreibweise.

07C42 ....
07C43 .... 

Diese beiden Bytes sind für uns in diesem Zusammenhang nicht wichtig.

07C44 ....
07C45 ....
07C46 ....
07C47 ....  

Diese vier Bytes definieren in LBA-Schreibweise den ersten Sektor, 
in dem der Second Stage Bootloader liegt.

Grub kümmert sich an dieser Stelle nicht um Partitionen oder Part-
tionsgrenzen. Diese vier Byte können auf eine beliebige Stelle auf
der Platten verweisen. Will man wissen, welche Partition betroffen ist,
muß man die Partitionstabelle der betroffenen Platte analysieren.

Grub kümmert an dieser Stelle auch nicht, welches Dateisystem auf
der betreffenden Partition installiert wurde. In dieser Phase arbeitet
Grub ähnlich wie Lilo, nämlich rein blockorientiert.

D.h. insbesondere, dass man Grub neu installieren/anpassen muss, sollte
der Second Stage Bootloader aus irgendeinen Grund verschoben werden,
z.B. durch Umkopieren.

Den Second Stage Bootloader von Grub kann man im Dateisystem der be-
troffenen Partition als ganz normale Datei sehen. Üblicherweise liegt
sie im Verzeichnis /boot/grub. Dorthin wird sie standardmässig von
Grub installiert (und kaum jemand wird sich die Mühe machen, das
zu ändern).

Im Dateisystem trägt dieser Second Stage Bootloader verschiedene
Namen, je nachdem, in was für einen Dateisystemtyp er liegt. 

Handelt es sich um ein EXT2-Dateisystem, heißt der Grub Second Stage 
Bootloader e2fs_stage_1_5, im Fat-Dateisystem fat_stage_1_5 usw.

Grub installiert der Einfachheit halber alle Second Stage Bootloader
gleichzeitig. Von diesen wird aber immer nur ein bestimmter
genutzt, nämlich derjenige, der zum jeweiligen Dateisystem passt.

Erst *** nachdem *** der Second Stage Bootloader im Ram geladen ist 
und ausgeführt wird, kommt die Datei /boot/grub/menu.lst ins Spiel. 

Hier kann man, wie bereits in der Mail von Frank Guthausen ausgeführt 
wurde, nachsehen, welche Platten/Partitionen/Kernel/Paramter etc anschliessend
zum Hochfahren eines Betriebssystemes verwendet werden.

Für weitere Details zum MBR von Grub siehe:

http://mirror.href.com/thestarman/asm/mbr/GRUB.htm


pv






More information about the Linux mailing list