GRUB
Aus Mandriva Community Wiki
Inhaltsverzeichnis |
[bearbeiten] Was ist GRUB?
GRUB ist der Standard Multiboot Bootloader der von den meisten Linux Distributionen. Multiboot heißt in dem Fall, dass GRUB in der Lage es mehrere Systeme zu starten, so dass du als Benutzer beim Start des Rechners das zu startende Betriebssystem wählen kannst.
[bearbeiten] Was ist ein Bootloader
Beim Starten eines Rechners, wird automatisch das [[de.wikipedia.org/bios BIOS] gestartet. Je nach dem welche Bootreihenfolge gewählt wurde, schaut BIOS nacheinander in die MBR (Master Boot Record der Medien (Festplatte, CD/DVD-Laufwerk, USB-Stick, etc.) nach einem vorhandenen Bootloader und startet ihn. Der Bootloader an sich dient lediglich dazu den Kernel eines Betriebssystems (und damit das Betriebssystem an sich) zu starten. Der Bootloader ist also die Schnittstelle zwischen dem BIOS und dem Betriebssystem. Dabei bietet einem ein Bootloader den praktischen Vorteil zwischen verschiedenen installierten Betriebssystemen zu wählen.
[bearbeiten] Wie arbeitet GRUB
BIOS ließt wie gesagt die genau 512 Bytes große MBR der Medien und startet den gefunden Bootloader. Dabei ist GRUB mit all seinen Funktionen zu groß um es komplett in diese 512 Bytes zu schreiben. Deshalb wird nur ein kleiner Teil von GRUB in die MBR geschrieben (Stage 1), der wiederum den zweiten Teil von GRUB (Stage 2) startet, der sich auf einer Festplatte oder einem anderen Speichermedium befindet. Ist dieser zweiter Teil nicht auffindbar (weil zum Beispiel die Festplatte nicht mehr angeschlossen ist) kann GRUB auch nicht mehr korrekt starten. Dieses zweigeteilte System hat aber auch einen Vorteil: die Liste der zu wählenden Betriebssysteme liegt nicht in der MBR sondern im "normalen" Bereich einer Festplatte und kann wie jede andere Datei bearbeitet werden. So lassen sich neue Betriebssysteme in die Liste der zu wählenden Betriebssysteme (/boot/grub/menu.lst) eintragen, ohne dass GRUB neu in die MBR geschrieben wird.
Alle installierten Betriebssystem die über GRUB gestartet werden sollen brauchen einen eigenen Eintrag in die Datei /boot/grub/menu.lst. Wie diese Aussehen, werden wir später noch behandeln.
Beim Starten von Betriebssystemen muss man zwei generelle Möglichkeiten unterscheiden:
- Starten eines anderen Bootloaders (wie von Windows)
- direktes Starten eines Betriebssystems
Bevor wir jedoch näher auf die beiden Möglichkeiten eingehen, muss noch eine grundlegende Sache geklärt werden: wie bezeichnet GRUB die einzelnen Partitionen. Die primary-master Platte ist dann (hd0), secondary-master ist (hd1), primary-slave ist (hd2) und secondary-slave (hd3)
| Linux | GRUB |
|---|---|
| /dev/hda bzw. /dev/sda | (hd0) |
| /dev/hda1 bzw. /dev/sda1 | (hd0,0) |
| /dev/hda2 bzw. /dev/sda2 | (hd0,1) |
| /dev/hda3 bzw. /dev/sda3 | (hd0,2) |
| /dev/hdb bzw. /dev/sdb | (hd1) |
| /dev/hdb7 bzw. /dev/sdb7 | (hd1,6) |
| /dev/hdc3 bzw. /dev/sdc3 | (hd2,2) |
Anders als Linux fängt GRUB bei der Nummerierung der Partitionen mit Null an. Außerdem werden auch die einzelnen Platten mit Nummer und nicht mit Buchstaben (wie unter Linux) bezeichnet.
[bearbeiten] Starten eines anderen Bootloaders (chainloader)
Mit der Funktion chainloader ist GRUB in der Lage einen anderen Bootloader, der zum Beispiel in die MBR einer Partition installiert ist, zu starten. Da GRUB nur Unixdateisysteme (ext2, ext3, raiserfs) lesen kann, kann es auch nur Kernel auf Unixdateisystemen direkt starten. Für alle anderen Betriebssysteme wie zum Beispiel Windows, muss deren Bootloader gestartet werden. Es kann aber auch zum Starten eines Linux Bootloader (GRUB/LiLo) genutzt werden. Das hat zum einen den Vorteil, dass es recht einfach ist einen Eintrag mit chainloader zu erstellen, zum anderen muss man die /boot/grub/menu.lst nicht nach jeder Kernel Aktualisierung angepasst werden, denn die meisten Linux Distributionen nehmen die erforderlichen Anpassungen selber vor.
Ein Eintrag für die /boot/grub/menu.lst um den Bootloader eines Betriebssystem (zum Beispiel Windows) auf der ersten Partition der ersten Platte zu starten, sieht so aus.
title windows root (hd0,0) makeactive chainloader +1
Mit root (hd0,0) wird dabei die Partition angegeben, auf der das andere Betriebssystem installiert ist.
Mit makeactive wird die root-Partition in dem Fall also (hd0,0) auf aktiv gesetzt.
Schließlich wird der andere Bootloader mit chainloader +1 geladen, wobei die +1 nur aussagt, das GRUB im ersten Sektor, also der MBR, der root-Partition gucken soll.
Will man allerdings den Bootloader eines zweiten Linux-Systems auf diese Weise laden, so muss dieser in MBR der jeweiligen Partition und nicht in die MBR der Festplatte geschrieben werden. Dazu kannst du dir auch dieses Artikel durchlesen. Die Möglichkeit 2A entspricht der hier genannten.
[bearbeiten] Direktes Starten eines Betriebssystems
Diese Methode funktioniert nur bei Linux Systemen, denn im Gegensatz zur chainloader-Methode muss GRUB in dem Fall das Dateisystem lesen können um direkt den Kernel zu starten.
Dabei sind vor allem zwei Informationen wichtig: - Wo befindet sich der zu startende Kernel und wie heißt er? - Wo befindet sich das Initrd-Image?
Initrd (initial ramdisk) ist dabei ein kleines Dateisystem, das in einem reserviertem Bereich des Arbeitsspeichers geladen wird und unter anderem Treiber und andere für das Starten des Systems wichtige Dateien.
Dem Kernel kann man beim Starten weitere Parameter für den Start übergeben, so genannte Kernelparameter. Die wichtigste ist dabei ist dabei der Parameter root=/dev/hdx, der dem Kernel sagt welche Partition als Wurzelverzeichnis oder auch root-Partition eingebunden werden soll. Wichtig ist dabei zu erkennen, dass die Bezeichnung der Partition in der Linux Schreibweise (zum Beispiel /dev/sda5 und **nicht** in der GRUB Schreibweise ((hd0,4)) erfolgt, da ja nun der Kernel (also Linux) gestartet wurde und dieser mit dem Parameter arbeiten muss.
Außerdem kann man beispielsweise ACPI (acpi=off) unterdrücken, dass kann sinnvoll sein wenn der Rechner aus scheinbar unerklärlichen Gründen ein Fehlverhalten zeigt.
Eine Liste mit allen Kernel Parametern inklusive kurzer Erklärung, findest du hier.
Ein Eintrag in der /boot/grub/menu.lst für ein Linux Betriebssystem, welches auf /dev/sda5 installiert ist, könnte dann wie folgt aussehen:
title Mandriva 2008.1 kernel (hd0,4)/boot/vmlinuz root=/dev/sda5 splash=silent vga=788 initrd (hd0,4)/boot/initrd.img
Dabei sei gesagt, dass die meisten Distributionen einen Link von vmlinuz und initrd.img auf die jeweiligen Dateien der aktuellsten Kernel-Version (bei mir also zum Beispiel vmlinuz-2.6.24.7-desktop-1.uc2mnb und initrd-2.6.24.7-desktop-1.uc2mnb.img) anlegen.
Die Zeile kernel (hd0,4)/boot/vmlinuz root=/dev/sda5 splash=silent vga=788 gibt also an, dass der zu startende Kernel, vmlinuz auf der Partition /dev/sda5 im Verzeichnis /boot/ sitzt, die Partition auf der Linux installiert ist ebenfalls /dev/sda5 ist (root=/dev/sda5), splash=silent sorgt dafür, dass man den grafischen Bootscreen sieht und vga=788 gibt die Auflösung der Grafik an. Dabei wird für die jeweilige Auflösung ein dreistelliger Code genannt. Welche Auflösung welchen Code trägt, erfährst du in der folgenden Tabelle:
| 640x480 | 800x600 | 1024x768 | 1280x1024 | |
|---|---|---|---|---|
| 256 | vga=769 | vga=771 | vga=773 | vga=775 |
| 32K | vga=784 | vga=787 | vga=790 | vga=793 |
| 64K | vga=785 | vga=788 | vga=791 | vga=794 |
| 16M | vga=786 | vga=789 | vga=792 | vga=795 |
Einige von euch verwendet eventuell eine extra boot-Partition (der Inhalt des Verzeichnis /boot wird auf eine extra Partition geschrieben), dass kann sinnvoll sein, wenn man Linux auf einer externen USB-Festplatte installiert ist, BIOS aber nicht in der Lage ist, von USB zu booten. Es wird dann auf einer internen Platte eine kleine Partition erstellt (500MB sollten auf jeden Fall reichen), die alle Daten des Verzeichnis /boot enthält, so dass der Kernel von dieser internen Partition gestartet werden kann. Ist der Kernel gestartet, besitzt er auch die Fähigkeit USB-Platte zu mounten und somit das System problemlos zu starten.
[bearbeiten] Fragen, Probleme, Anregungen ?
Dieser Artikel soll dir einen kleinen Einstieg in die Arbeit von GRUB geben. Für die meisten Fälle ist das Wissen völlig ausreichend aber in bestimmten Fällen klappt nicht alles so wie es soll. Aus diesem Grund werde ich noch weitere Artikel zu dem Thema schreiben, wenn du bis dahin noch Probleme hast, melde dich einfach im Forum mit deiner Frage.
Kritik kannst du entweder in der Diskussion oder in dem Forum verfassen.

