GRUB

Aus Mandriva Community Wiki

Wechseln zu: Navigation, Suche
Einstieg in GRUB

Inhaltsverzeichnis

Was ist GRUB?

GNU GRand Unified Bootloader, kurz GRUB, ist der von den meisten Linux-Distributionen standardmäßig verwendete Multiboot-Bootloader. "Multiboot" heißt, dass GRUB in der Lage ist, mehrere parallel installierte Betriebssysteme zu starten, so dass du als Benutzer beim Starten des Rechners das zu startende Betriebssystem wählen kannst.

Was ist ein Bootloader?

Beim Starten eines Rechners, wird automatisch das BIOS gestartet. Je nach dem, welche Bootreihenfolge gewählt wurde, schaut das BIOS nacheinander in die MBR der verfügbaren 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. Ein Bootloader ist also Schnittstelle zwischen dem BIOS und dem Betriebssystem. Dabei bietet einem der Bootloader den praktischen Vorteil zwischen verschiedenen installierten Betriebssystemen zu wählen.

Wie arbeitet GRUB?

Ein BIOS ließt den genau 512 Bytes großen MBR der Medien und startet ggf. einen gefunden Bootloader. Dabei ist GRUB mit all seinen Funktionen zu umfangreich, um lediglich mit diesen 512 Bytes aus zukommen. Deshalb wird nur ein kleiner Teil von GRUB in den 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 zweite 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 bedeutenden Vorteil: die Liste der zu wählenden Betriebssysteme liegt nicht im 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 dazu erneut in den MBR geschrieben werden muss.

Alle installierten Betriebssysteme, die über GRUB gestartet werden sollen, brauchen einen eigenen Eintrag in die Datei /boot/grub/menu.lst. Wie diese Aussehen, wird später noch behandelt.

Beim Starten von Betriebssystemen sind generell zwei Verfahren zu unterscheiden:

  • starten eines anderen nachgeordneten Bootloaders (wie jenen von Windows®)
  • direktes Starten eines Betriebssystems

Bevor jedoch näher auf diese beiden Möglichkeiten eingegangen wird, gilt es zunächst über eine grundlegende Eigenheit von GRUB aufzuklären, und zwar wie GRUB die einzelnen Partitionen bezeichnet. Danach heißt die primary-master-Festplatte (hd0), die 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, beginnt GRUB bei der Nummerierung der Partitionen mit Null. Außerdem werden auch die einzelnen Festplatten mit Nummern und nicht mit Buchstaben (wie unter Linux) bezeichnet.

Starten eines anderen Bootloaders (chainloader)

Mit der Funktion chainloader ist GRUB in der Lage einen anderen Bootloader, der zum Beispiel in den MBR einer Partition installiert ist, zu starten. Da GRUB nur Unix-Dateisysteme (ext2, ext3, raiserfs) lesen kann, kann es auch nur Kernel auf Unix-Dateisystemen direkt starten. Für alle anderen Betriebssysteme wie zum Beispiel Windows®, muss deren Bootloader gestartet werden. Es kann aber auch zum Starten eines anderen Linux-Bootloader (beispielsweise LiLo) genutzt werden. Das hat zum einen den Vorteil, dass es recht einfach ist einen Eintrag mit chainloader zu erstellen, zum anderen muss die /boot/grub/menu.lst nicht nach jeder Kernel-Aktualisierung angepasst werden, denn die meisten Linux-Distributionen nehmen die erforderlichen Anpassungen selbst vor.

Ein Eintrag in die /boot/grub/menu.lst, um den Bootloader eines Betriebssystem (zum Beispiel Windows®) auf der ersten Partition der ersten Festplatte 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 dem MBR, der root-Partition gucken soll.

Will man allerdings den Bootloader eines zweiten Linux-Systems auf diese Weise laden, so muss dieser in den MBR der jeweiligen Partition und nicht in den MBR der Festplatte geschrieben werden. Dazu kannst du dir auch diesen Artikel durchlesen. Die Möglichkeit 2A entspricht der hier genannten.

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 den Kernel direkt 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 reservierten Bereich des Arbeitsspeichers geladen wird und unter anderem Treiber und andere für das Starten des Systems wichtige Dateien mitbringt.

Dem Kernel kann man beim Starten weitere Parameter übergeben, so genannte Kernelparameter. Der wichtigste ist dabei der Parameter root=/dev/hdx, der dem Kernel mitteilt, welche Partition als Wurzelverzeichnis oder auch root-Partition eingebunden werden soll. Wichtig ist dabei zu berücksichtigen, dass die Bezeichnung der Partition in der Linux-Schreibweise (zum Beispiel /dev/sda5 und nicht in der GRUB-Lesart ((hd0,4)) erfolgt, da ja nun der Linux-Kernel gestartet wurde und dieser die übergebenen Parameter verarbeiten muss.

Außerdem kann man beispielsweise ACPI unterdrücken (acpi=off); das kann sinnvoll sein, wenn der Rechner aus scheinbar unerklärlichen Gründen ein Fehlverhalten zeigt.

Eine Liste mit allen Kernel-Parametern, inklusive kurzer Erklärungen, 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

Dazu 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, splash=silent sorgt dafür, dass man den grafischen Bootscreen sieht und vga=788 gibt die Auflösung an. Dabei wird für die jeweilige Auflösung ein dreistelliger Code genannt. Welche Auflösung welchen Code trägt, kannst du der folgenden Tabelle entnehmen:

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

Eventuell verwendest du eine extra boot-Partition (der Inhalt des Verzeichnisses /boot wird auf eine extra Partition geschrieben); das kann sinnvoll sein, wenn man Linux auf einer externen USB-Festplatte installiert, das BIOS aber nicht in der Lage ist, von USB zu booten. Es wird dann auf einer internen Platte eine kleine Partition erstellt (500 MB sollten auf jeden Fall reichen), die alle Daten des Verzeichnisses /boot enthält, so dass der Kernel von dieser internen Partition gestartet werden kann. Ist der Kernel gestartet, besitzt er auch die Fähigkeit die USB-Festplatte zu mounten und somit das darauf befindliche Betriebssystem problemlos zu starten.

Fragen, Probleme, Anregungen

Dieser Artikel soll dir einen kleinen Einstieg in das Arbeiten mit GRUB geben. In den meisten Fällen ist dieses Wissen völlig ausreichend, aber in bestimmten Fällen klappt nicht alles so wie es soll. Aus diesem Grund sollen noch weitere Artikel zum Thema folgen. Wenn du bis dahin Probleme haben solltest, die hier bisher nicht behandelt wurden, melde dich mit deinen Fragen einfach im Mandriva Forum.

Kritik kannst du entweder in der Artikel-Diskussion oder dem genannten Forum los werden.

Persönliche Werkzeuge
Andere Sprachen
Ad (via La Vignette)
Looking for a job?