====== GRUB ======
Grub wird in den meisten [[linux:distributionen-und-live-cds|Distributionen]] eingesetzt. Mittlerweile wird die Version 2 verwendet, dazu eine [[Grub2]|eigene Seite zu Grub2]]
Bei Ubuntu wird auf x86-kompatiblen Architekturen der [[http://de.wikipedia.org/wiki/Bootloader|Bootloader]] [[http://de.wikipedia.org/wiki/GRUB|GRUB]] verwendet, um sich selbst und andere auf dem System installierte Betriebssysteme zu starten. Standardmäßig wird GRUB im [[http://de.wikipedia.org/wiki/Master_Boot_Record|MBR (Master Boot Record)]] der ersten Festplatte (sda bzw. hda) installiert. Dies bringt den Vorteil einer einfachen Installation und eines einfachen Updates des Bootloaders.
Quellen des Artikels: [[http://wiki.ubuntuusers.de/GRUB|Grub]] und [[http://wiki.ubuntuusers.de/menu.lst|menu.lst]] des [[http://wiki.ubuntuusers.de|ubuntuusers-Wiki]].
===== GRUB konfigurieren =====
Der GRUB Bootloader wird über die Datei **/boot/grub/menu.lst** konfiguriert. In dieser Datei befinden sich nicht nur die für GRUB notwendigen Informationen, wo welcher Kernel oder welches Betriebssystem zu finden ist, sondern auch Informationen, für das Skript **update-grub**, welches die **menu.lst** neu schreiben kann. Das Skript wird z.B. bei der Installation eines neuen Kernels ausgeführt.
==== Konfiguration während des Bootens ändern ====
Sollte es nach der Auswahl aufgrund einer Fehlkonfiguration zu einem Fehler wie
Error 17 : Cannot mount selected partition
kommen, lassen sich die Grub-Einträge temporär ändern. Wie das geht, ist unter [[http://wiki.ubuntuusers.de/Booten|Booten]] beschrieben. Änderungen werden allerdings nicht in die Konfigurationsdatei (''menu.lst''; siehe unten) geschrieben. Diese muss man nach erfolgreichem Booten selbst anpassen.
==== Konfigurationsdatei menu.lst ====
Die Datei **/boot/grub/menu.lst** erfüllt zwei Funktionen:
- Hier ist einerseits die Konfiguration für den Bootloader GRUB gespeichert. Beim Start von GRUB wird die **menu.lst** gelesen, und das Bootmenü wird entsprechend aufgebaut. GRUB ignoriert alle mit einer Raute beginnenden Zeilen.
- Zusätzlich enthält die menu.lst Informationen für das Skript **update-grub**. Dieses Skript dient dazu, die Menüeinträge in der **menu.lst** automatisch zu erstellen. Das Skript wird z.B. bei der Installation eines neuen Kernels ausgeführt. **update-grub** liest auch manche Zeilen ein, die mit einer Raute beginnen.
**menu.lst** ist eine reine Textdatei, zur Bearbeitung muss sie also in einem Editor mit Root-Rechten geöffnet werden. Das Programm [[http://wiki.ubuntuusers.de/Startup_Manager|Startup Manager]] ermöglicht alternativ die Bearbeitung der Datei mittels einer grafischen Benutzeroberfläche.
=== Aufbau der Datei ===
Die **menu.lst** ist durch besondere Kennzeichner in mehrere Bereiche gegliedert. Es ist wichtig, diese Bereiche zu kennen und deren Aufgabe zu verstehen, damit Änderungen an dieser Datei zum gewünschten und dauerhaften Ergebnis führen. Folgende Kennzeichner existieren:
### BEGIN AUTOMAGIC KERNELS LIST
## ## Start Default Options ##
## ## End Default Options ##
### END DEBIAN AUTOMAGIC KERNELS LIST
Zunächst ist wichtig, dass der komplette Bereich zwischen den äußeren Kennzeichnern vom System (**update-grub**) verwaltet wird. In diesem Bereich dürfen daher nur bedingt Änderungen vorgenommen werden.
:!: Es ist nicht sinnvoll, innerhalb dieser Bereiche eigene Menüeinträge zu platzieren oder Änderungen an den Menüeinträgen direkt vorzunehmen, da diese spätestens beim nächsten Kernelupdate verschwinden würden. Sinnvoll sind hier nur Änderungen an den vorgegebenen Optionen. Dadurch lassen sich die automatisch generierten Einträge indirekt beeinflussen. Eigene Menüeinträge müssen vor oder nach dem äußeren Block platziert werden.
Desweiteren muss die besondere Rolle des Kommentarzeichens **#** beachtet werden. Bei der menu.lst handelt es sich um eine Steuerdatei, die eigentlich nur von [[http://wiki.ubuntuusers.de/GRUB|Grub]] gelesen wird. Grub ignoriert dabei Zeilen, die mit mindestens einem Kommentarzeichen beginnen. Im gerade beschriebenen inneren Bereich werden nun aber zusätzliche Parameter für das Hilfsprogramm **update-grub** gespeichert. Für Grub sind diese Parameter aber unverständlich. Damit nun keine Syntaxfehler auftreten wurde vereinbart, dass Parameter für **update-grub** im gekennzeichneten Bereich stehen müssen und jeweils mit einem einzelnen Kommentarzeichen beginnen. Tatsächliche Kommentare in diesem Bereich sollten dementsprechend mit mindestens zwei Kommentarzeichen beginnen.
Zusammenfassend gilt:
* Zeilen mit doppelten oder mehr Rauten ## sind immer Kommentare.
* Zeilen mit einer einfachen Raute # innerhalb des inneren Blocks sind Anweisungen für update-grub, wenn der Raute eines der Schlüsselworte //alternative, altoptions, defoptions, groot, howmany, kopt, lockalternative, lockold, memtest86, nonaltoptions, recovery, savedefault, updatedefaultentry, xenhopt, xenkopt// folgt.
* Sonstige Zeilen, die mit einer einfachen Raute # beginnen, sind Kommentare.
* Zeilen ohne Raute sind Optionen für GRUB selber.
[[http://wiki.ubuntuusers.de/_image?target=menu.lst%2Fmenu.lst-nano-bunt.png|{{http://wiki.ubuntuusers.de/_image?width=240&target=menu.lst%2Fmenu.lst-nano-bunt.png|menu.lst-nano-bunt.png}}]] Beim Bearbeiten der **menu.lst** sollte man einen Editor mit entsprechender Syntaxhervorhebung verwenden. In der Abbildung sieht man die Datei in [[http://wiki.ubuntuusers.de/Nano|Nano]].
=== Die Abschnitte im Einzelnen ===
GRUB bezeichnet die Festplattenpartitionen mit //(hdX,Y)//, wobei X und Y die Nummern der Festplatte bzw. Partition sind. Es wird immer bei 0 mit der Zählung begonnen:
| Partition | Linux-Device-Bezeichnung | GRUB-Bezeichnung |
| x. Partition auf der **1. Platte** | /dev/sd**a**x oder /dev/hd**a**x | (hd,x) |
| x. Partition auf der **2. Platte** | /dev/sd**b**x oder /dev/hd**b**x | (hd**1**,x) |
| ... | ... | ... |
| **1. Partition** auf der x. Platte | /dev/sdx**1** oder /dev/hdx**1** | (hdx,) |
| **2. Partition** auf der x. Platte | /dev/sdx**2** oder /dev/hdx**2** | (hdx,**1**) |
| ... | ... | ... |
Zu beachten ist auch, dass die Nummerierung von [[http://www.slashcam.de/artikel/Ratgeber/Das-optimale-Schnittsystem-Teil-1--Festplatten-und-Partitionen.html#T1|logischen Laufwerken in einer erweiterten Partition]] {{http://media.ubuntuusers.de/wiki/attachments/09/28/de.png|{de}}} immer bei 5 (Linux-Device-Bezeichnung) bzw. 4 (GRUB-Bezeichnung) beginnt - unabhängig von der Anzahl der vorhandenen primären Partitionen.
Die GRUB-Bezeichnung wird fortlaufend vergeben, d.h. bei fehlender Platte sda erhält sdb die niedrigste GRUB-Bezeichnung (hd0). Dieses Verhalten kann zu Problemen führen, wenn z.B. eine Platte dauerhaft aus dem System entfernt wird.
Beispielhaft werden nun anhand einer typischen menu.lst-Datei die einzelnen Abschnitte erklärt:
== Kopfzeilen ==
In den Kopfzeilen werden die Einstellungen für GRUB selbst definiert. So lässt sich hier ein Passwort setzen, man kann den automatisch zu bootenden Eintrag definieren usw. Die einzelnen Variablen sind:
* **default** - Nummer des Eintrages, der automatisch gestartet wird, bei 0 beginnend. Statt Nummer geht auch //saved//, wobei sich GRUB den zuletzt ausgewählten Eintrag merkt, bei dem die //savedefault//-Option (s.u.) gesetzt ist. Zu beachten ist, dass der angegebene Wert nicht korrigiert wird, wenn sich die Anzahl der Menüeinträge im Abschnitt "AUTOMAGIC KERNELS LIST" - z.b. durch Sicherheitsupdates - verändert. Von daher sollte dieser Wert möglichst immer auf Null stehen. Soll ein anderes Betriebsystem standardmäßig gestartet werden, so ist es besser, dessen Menüeintrag an die erste Stelle zu verschieben, also vor den Kommentar "BEGIN AUTOMAGIC KERNELS LIST". Siehe auch den [[http://wiki.ubuntuusers.de/menu.lst|Aufbau]] der menu.lst.
* ** timeout** - Die Zeit (in s), nach deren Ablauf automatisch der Default-Eintrag gestartet wird.
* ** hiddenmenu** - Soll das GRUB-Menü gezeigt werden?
* ** color** - Die Schriftfarben können hier festgelegt werden.
* ** password** - Das GRUB-Passwort. Entweder im Klartext oder als md5 Prüfsumme hinterlegt.
# menu.lst - See: grub(8), info grub, update-grub(8)
# grub-install(8), grub-floppy(8),
# grub-md5-crypt, /usr/share/doc/grub
# and /usr/share/doc/grub-doc/.
## default num
# Set the default entry to the entry number NUM. Numbering starts from 0, and
# the entry number 0 is the default if the command is not used.
#
# You can specify 'saved' instead of a number. In this case, the default entry
# is the entry saved with the command 'savedefault'.
# WARNING: If you are using dmraid do not change this entry to 'saved' or your
# array will desync and will not let you boot your system.
default 0
## timeout sec
# Set a timeout, in SEC seconds, before automatically booting the default entry
# (normally the first entry defined).
timeout 10
## hiddenmenu
# Hides the menu by default (press ESC to see the menu)
#hiddenmenu
# Pretty colours
#color cyan/blue white/blue
## password ['--md5'] passwd
# If used in the first section of a menu file, disable all interactive editing
# control (menu entry editor and command-line) and entries protected by the
# command 'lock'
# e.g. password topsecret
# password --md5 $1$gLhU0/$aW78kHK1QfV3P2b2znUoe/
# password topsecret
GRUB akzeptiert zahlreiche weitere Optionen, die an dieser Stelle nicht alle besprochen werden können. Eine umfangreiche Dokumentation befindet sich zum Beispiel bei der [[http://users.bigpond.net.au/hermanzone/p15.htm|Illustrated Dual Boot Site]].
== Tastaturlayout der GRUB-Konsole ==
Es gibt die Möglichkeit, mit dem Kommando "setkey" das Tastaturlayout der GRUB-Konsole zu ändern. Hierzu lädt man die {{:linux:german-grub.lst.txt|Tastendefinitionen für Grub}}] gespeicherten Tastendefinitionen herunter und fügt sie im Kopfbereich in die menu.lst ein.
=== Einträge vor der automatischen Liste (optional) ===
Besitzt man ein Dual-Boot-Computer-System, sprich z.B. Windows und Ubuntu parallel installiert, und möchte vorwiegend unter Windows arbeiten, so will man eventuell, dass Windows an erster Stelle im Boot-Manager erscheint. Der richtige Platz hierfür ist dieser:
# Put static boot stanzas before and/or after AUTOMAGIC KERNEL LIST
# This entry automatically added by the Debian installer for a non-linux OS
# on /dev/hda2
title Microsoft Windows XP Professional (Oberhalb der Linux Einträge)
root (hd0,1)
savedefault
chainloader +1
=== Optionen für update-grub ===
In diesem Teil der Konfigurationsdatei werden die Optionen gesetzt, die update-grub nutzt, um die **menu.lst** neu zu schreiben. Doppelte Kommentare ## sind tatsächlich Kommentare, einfache Rauten #, sind Optionen für update-grub. Die Kommentarzeichen müssen immer erhalten bleiben.
Die einzelnen Variablen sind
* **kopt** - Die Boot Parameter für die Standard Kernel.
* **groot** - Das Standard Root Laufwerk für GRUB.
* **alternative** - Soll update-grub Starteinträge für den Recovery Modus anlegen?
* **lockalternative** - Soll bei der Auswahl des Recovery Modus das GRUB Passwort (s.o.) abgefragt werden?
* **defoptions** - Zusätzliche Optionen, die an die Standard Booteinträge gehängt werden.
* **altoptions** - Zusätzliche Optionen, die an die Recovery Modus Einträge gehängt werden.
* **howmany** - Anzahl der Kernel, die update-grub berücksichtigen soll.
* **memtest** - Soll ein Eintrag zum Starten des Speichertests hinzugefügt werden?
* **updatedefaultentry** - Soll update-grub die Nummer des zu startenden Kernels automatisch anpassen?
### BEGIN AUTOMAGIC KERNELS LIST
## lines between the AUTOMAGIC KERNELS LIST markers will be modified
## by the debian update-grub script except for the default options below
## DO NOT UNCOMMENT THEM, Just edit them to your needs
## ## Start Default Options ##
## default kernel options
## default kernel options for automagic boot options
## If you want special options for specific kernels use kopt_x_y_z
## where x.y.z is kernel version. Minor versions can be omitted.
## e.g. kopt=root=/dev/hda1 ro
## kopt_2_6_8=root=/dev/hdc1 ro
## kopt_2_6_8_2_686=root=/dev/hdc2 ro
# kopt=root=/dev/sda1 ro
## default grub root device
## e.g. groot=(hd0,0)
# groot=(hd0,0)
## should update-grub create alternative automagic boot options
## e.g. alternative=true
## alternative=false
# alternative=true
## should update-grub lock alternative automagic boot options
## e.g. lockalternative=true
## lockalternative=false
# lockalternative=false
## additional options to use with the default boot option, but not with the
## alternatives
## e.g. defoptions=vga=791 resume=/dev/hda5
# defoptions=quiet splash language=de_DE
## altoption boot targets option
## multiple altoptions lines are allowed
## e.g. altoptions=(extra menu suffix) extra boot options
## altoptions=(recovery mode) single
# altoptions=(recovery mode) single
## controls how many kernels should be put into the menu.lst
## only counts the first occurence of a kernel, not the
## alternative kernel options
## e.g. howmany=all
## howmany=7
# howmany=all
## should update-grub create memtest86 boot option
## e.g. memtest86=true
## memtest86=false
# memtest86=true
## should update-grub adjust the value of the default booted system
## can be true or false
# updatedefaultentry=false
## ## End Default Options ##
=== Experten-Info: ===
Bei Verwendung einer separaten Bootpartition weicht die Rootpartition des Systems (Angabe über "kopt") natürlich von der Bootpartition (Angabe über "groot") ab. Darauf ist beim Editieren der Optionen 'groot' und 'kopt' zu achten. Zum Beispiel: \\ "kopt=root=/dev/sda3 ro"\\ "groot=(hd0,0)"\\ Im Gegensatz dazu //ohne// Bootpartition: \\ "kopt=root=/dev/sda1 ro"\\ "groot=(hd0,0)"
Ab [[ubuntu:Ubuntu]] Intrepid Ibex kann für die Angabe auf die Boot-Partition anstelle von \\ "groot=(hd0,0)"\\ nun auch die UUID der Partition eingesetzt werden, auf der sich "/boot/grub/" befindet. Als Beispiel: \\ "groot=9d8caf32-92b8-451a-b626-9de581f11cbf"\\ Nach einem sudo update-grub wird dieses dann in die Auswahlzeilen übernommen. Damit lassen sich Fehler, die durch ein nachträgliches Formatieren anderer Partitionen entstehen, beim Booten vermeiden.
=== Kernelparameter ===
Eine gnaue Beschreibung der Kernelparameter (die mit "kopt=" gesetzt werden) findet man im Artikel [[http://wiki.ubuntuusers.de/Booten|Booten]]. Häufig nachgefragt wird hierbei die Änderung der Auflösung der virtuellen Textkonsolen. Dazu gibt es [[http://wiki.ubuntuusers.de/Konsolen-Aufl%C3%B6sung|einen eigenen Artikel]].
=== Liste automatisch generierter Menüeinträge ===
All die Booteinträge, die in diesem Teil zu finden sind, werden automatisch durch **update-grub** angelegt. Änderungen, die hier von Hand eingetragen werden, gehen bei einem Kernelupgrade ohne eine Warnung verloren. Daher sollte man statt dieser Einträge die Variablen im oberen Abschnitt verändern, und anschließend
sudo update-grub
ausführen. Möchte man hingegen Bootparameter testen, kann man in diesem Abschnitt gefahrlos an den Optionen spielen, und nötigenfalls die alten Einträge durch o.g. Befehl wiederherstellen.
title Ubuntu, kernel 2.6.15-25-k7
root (hd0,0)
kernel /boot/vmlinuz-2.6.15-25-k7 root=/dev/sda1 ro quiet splash
initrd /boot/initrd.img-2.6.15-25-k7
savedefault
boot
title Ubuntu, kernel 2.6.15-25-k7 (recovery mode)
root (hd0,0)
kernel /boot/vmlinuz-2.6.15-25-k7 root=/dev/sda1 ro single
initrd /boot/initrd.img-2.6.15-25-k7
boot
title Ubuntu, memtest86+
root (hd0,0)
kernel /boot/memtest86+.bin
boot
### END DEBIAN AUTOMAGIC KERNELS LIST
=== Alternative Betriebssysteme (optional) ====
Linux- und Windowssysteme, die zum Zeitpunkt der Ubuntu-Installation bereits vorhanden waren, werden vom Installer am Ende dieser Liste automatisch hinzugefügt. Kommen Systeme später hinzu, so müssen sie manuell eingetragen werden. Im folgenden wird dies für Windows- und Linuxsysteme beschrieben. Wichtig ist, dass diese Einträge nach der Zeile
### END DEBIAN AUTOMAGIC KERNELS LIST
erfolgen.
=== Windows ===
Im folgenden Beispiel muss der Ausdruck "(hd0,1)" an die konkrete Situation angepasst werden.
title Microsoft Windows XP Professional (Unterhalb der Linux Einträge)
root (hd0,1)
savedefault
chainloader +1
=== Windows: Vertauschen von Festplatten ===
In manchen Fällen, z.B. wenn man Windows XP nachträglich auf eine zweite Festplatte installiert, oder aber Windows XP ist schon auf der ersten und Ubuntu mitsamt GRUB wird nachträglich auf eine zweite und vielleicht externe (USB-)Festplatte installiert, ist es notwendig, die Datenträgerbezeichnungen zu vertauschen. Dazu wird Windows mit Hilfe von //map// vorgetäuscht, es befände sich auf der ersten Festplatte, so dass es korrekt startet. Der Befehl //map// erfordert folgende Syntax:
## Allgemein
map (alte Bezeichnung) (neue Bezeichnung)
map (neue Bezeichnung) (alte Bezeichnung)
## Beispiel
map (hd1) (hd0)
map (hd0) (hd1)
Es ist wichtig, das eine einzelne Vertauschung immer über zwei Map-Anweisungen - jeweils mit umgekehrter Parameterreihenfolge - geregelt wird. So würde ein Eintrag aussehen, wenn:
* Ubuntu auf der ersten Festplatte wäre und Windows XP auf einer zweiten SATA-Festplatte auf Partition 1, oder
* Windows auf der ersten Festplatte wäre und Ubuntu mitsamt GRUB auf einer zweiten (eventuell externen und/oder auch USB-)Festplatte auf Partition 1:
# This entry automatically added by the Debian installer for a non-linux OS
# on /dev/sda1
title Microsoft Windows XP Professional
rootnoverify (hd1,0)
map (hd1) (hd0)
map (hd0) (hd1)
savedefault
chainloader +1
Dass //rootnoverify// statt //root// wie oben verwendet wird, ist nicht auf allen Systemen notwendig. Zusätzlich sollte man in der Datei **/boot/grub/device.map** überprüfen, ob die Geräte korrekt zugeordnet sind.
:!: Bei Vista wird der //map// Trick nicht benötigt.
=== Linux ===
Wenn mit Grub neben Ubuntu noch eine Linux Distribution gestartet werden soll, ist es meist nicht sinnvoll direkt auf einen bootbaren Kernel zu verweisen. Dieser Pfad ändert sich nach jedem Kernelupdate und falls der alte Kernel deinstalliert wurde, kann Grub das System nicht mehr finden. Es gibt zwei Möglichkeiten dieses Problem zu lösen.
title Zweitsystem - Kubuntu/OpenSuse/Fedora usw.
root (hdX,Y)
kernel /vmlinuz # plus optional Bootparameter
initrd /initrd.img # plus optional Bootparameter
boot
Bei dieser Variante verweisen //kernel// und //initrd// nur symbolisch auf das Rootverzeichnis. Grub startet dann jedesmal den neusten installierten Kernel.
title Zweitsystem - Kubuntu/OpenSuse/Fedora usw.
root (hdX,Y)
chainloader +1
Mit diesem Eintrag läd Grub mittels //chainloader +1// den Bootmanager der entsprechenden Distribution (falls vorhanden). Also zum Beispiel ein sekundäres Grub. Diese Variante bietet den Vorteil, dass alle verfügbaren Kernel des Zweitsystems gebootet werden können. Dafür muss man sich durch zwei Menüs klicken.Voraussetzung ist natürlich die Installation des Zweitsystem-Bootloaders in die Partition des Zweitsystems und nicht wie sonst üblich in den MBR. ([[http://wiki.ubuntuusers.de/GRUB|mehr]])
=== GRUB-Splash ===
[[http://wiki.ubuntuusers.de/_image?target=menu.lst%2Fgrub-mit-splash.png|{{http://wiki.ubuntuusers.de/_image?width=240&target=menu.lst%2Fgrub-mit-splash.png|grub-mit-splash.png}}]] Man kann das GRUB-Menü auch etwas aufpeppen. Dazu sind komprimierte Grafiken notwendig, die das Format einer .xpm.gz-Datei haben. Diverse GRUB-Splashscreens findet man z.B. bei den unten verlinkten Webseiten. Einen Kubuntu-Splash kann man sich [[http://wiki.ubuntuusers.de/_attachment?target=menu.lst%2Fkubuntu.xpm.gz|direkt]] herunterladen. Weitere Splashscreens kann man über die Pakete
* **grub-splashimages** (//universe//)
* **kubuntu-grub-splashimages** (//universe//)
installieren.
Zum Verwenden der Grafik geht man so vor:
* Man kopiert die Datei nach **/boot/grub/splashimages**
* Danach fügt man folgendes in die **menu.lst** ein:
splashimage=(hd0,1)/boot/grub/splashimages/splash.xpm.gz
foreground = ffffff
background = 0066ff
"foreground" und "background" geben die Schriftfarbe [[http://de.wikipedia.org/wiki/Webfarbe|im hexadezimalen RGB-Format]] {{http://media.ubuntuusers.de/wiki/attachments/09/28/de.png|{de}}} an; der Parameter "color" funktioniert in Verbindung mit Spashscreens nicht.
:!: Die Zeile "splashimage=..." sollte unbedingt nach der "color"-Zeile eingetragen werden.
Der Pfad muss immer "relativ" zur Partitionstabelle der Festplatte (in der Syntax von GRUB) angegeben werden. Es ist daher zu beachten, dass "(hd0,1)" natürlich nicht für jeden passt. Es ist der Wert anzugeben, der auch bei den anderen Einträgen der einzelnen Kernel steht.
:!: Wenn **/boot** auf einer eigenen Partition liegt, muss der Eintrag natürlich "relativ" zur /boot-Partition angegeben werden: **splashimage=(hd0,1)/grub/splashimages/dieSplashDatei.xpm.gz**
=== Weblinks zur menu-lst ===
* [[http://www.gnu.org/software/grub/manual/grub.html#Commands|GNU GRUB Manual 0.97]]
* [[http://ruslug.rutgers.edu/~mcgrof/grub-images/#1.0|GRUB Splash Image Howto]] {{http://media.ubuntuusers.de/wiki/attachments/09/28/en.png|{en}}}
* [[http://wiki.ubuntuusers.de/Installation_auf_externe_Festplatten|Installation auf externe Festplatten]]
* GRUB-Splashscreens:
* [[http://www.gnome-look.org/content/search.php?type=160&sort=2&name=grub&search=Search|gnome-look.org]] {{http://media.ubuntuusers.de/wiki/attachments/09/28/en.png|{en}}}
* [[http://www.kde-look.org/content/search.php?type=61&sort=2&name=grub&search=Search|kde-look.org]] {{http://media.ubuntuusers.de/wiki/attachments/09/28/en.png|{en}}}
* [[http://www.schultz-net.dk/grub.html|schultz-net.dk]] {{http://media.ubuntuusers.de/wiki/attachments/09/28/en.png|{en}}}
* [[http://ruslug.rutgers.edu/~mcgrof/grub-images/images/?page=1|ruslug.rutgers.edu]] {{http://media.ubuntuusers.de/wiki/attachments/09/28/en.png|{en}}}
* [[http://forum.ubuntuusers.de/topic/85479/|Im Ubuntuusers-Forum]]
===== Installation =====
Bei der Installation von Ubuntu wird Grub automatisch installiert. Sollte es hierbei zu einem Fehler kommen oder - was in seltenen Fällen vorkommen kann - Grub auf der falschen Festplatte installiert worden sein, so kann dies nachgeholt werden. Dazu eignen sich die Methoden, die im folgenden Kapitel beschrieben werden. Ein eigener Artikel beschäftigt sich mit [[http://wiki.ubuntuusers.de/GRUB/Sonderformen_der_Installation|Sonderformen der Installation]].
:!: Die Installation von Grub geht mit dem Überschreiben des eventuell bestehenden Bootloaders - zum Beispiel dem einer Windowsinstallation - einher. Es wird daher empfohlen, zunächst eine [[http://wiki.ubuntuusers.de/Shell/dd#mbr_sichern|Sicherung des bestehenden Bootloaders]] anzulegen.
===== Bootloader wiederherstellen =====
In manchen Fällen kann es notwendig sein, den Bootloader wiederherzustellen. Ein häufiges Beispiel ist die nachträgliche Installation eines Windows-Betriebssystems, bei dem der MS-eigene Bootloader in den MBR geschrieben wird.
Je nach vorhandener Rescue-CD gibt es hierbei verschiedene Möglichkeiten.
In folgenden Anleitungen wird davon ausgegangen, dass das Ubuntusystem auf der Partition **/dev/sda2** installiert ist. Grub soll im MBR der selben Platte - also **/dev/sda** - installiert werden. Diese Daten müssen natürlich auf die eigene Situation angepasst werden. Wenn man nicht sicher ist, welche Bezeichnung richtig ist, kann man sich mit
sudo fdisk -l
eine Übersicht der Partitionen anzeigen lassen. //sda// wird außerdem zu //sdb// oder //sdc// wenn es eine zweite Festplatte ist, auf manchen Systemen aber auch zu //hda//, //hdb// oder //hdc//.
Schlägt grub-install fehl weil die ''/boot/grub/device.map'' IDs enthält die das aktuellere Rescue-System nicht mehr erkennt, dann sollte man auf die aktuelleren wwn-IDs wechseln. Die Fehlerausgabe von /usr/sbin/grub-probe --device-map=/boot/grub/device.map --target=fs -v /boot/grub
gibt die genauen Gründe.
Statt:
(hd0) /dev/disk/by-id/ata-ST31500341AS_9VS2CD3M
(hd1) /dev/disk/by-id/ata-ST31500341AS_9VS1QT1L
(hd2) /dev/disk/by-id/ata-ST31500341AS_9VS2RGFR
also diese IDs eintragen:
(hd0) /dev/disk/by-id/wwn-0x50014ee002f574a8
(hd1) /dev/disk/by-id/wwn-0x5000c50014b0bf53
(hd2) /dev/disk/by-id/wwn-0x5000c500197f00ca
==== Methode 1: Per "Super Grub Disk" ====
Alle, denen die nachfolgenden Lösungen zu kompliziert sind, sollten einen Blick auf die [[http://www.supergrubdisk.org|Super Grub Disk]] werfen. Mit einer kleinen (ca. 3 MB) Boot-CD/USB-Stick lässt sich recht einfach nicht nur Grub installieren, sondern auch ein vorhandenes Windows wieder starten.
==== Methode 2: "root-directory" Variante ====
Zunächst benötigt man eine Live-CD (Ubuntu Desktop-CD, Knoppix, etc.), von der man startet und dort dann ein Terminal öffnet. Als erstes bindet man das Ubuntu-System mit
sudo mount /dev/sda2 /mnt
ein. Nutzt das System eine separate boot-Partition, so muss diese mit
sudo mount /dev/sda3 /mnt/boot
eingebunden werden. Bei einer normalen Installation ist diese Partition nicht vorhanden, und somit dieser letzte Befehl nicht erforderlich. GRUB lässt sich nun leicht durch
sudo grub-install --root-directory=/mnt /dev/sda
neu installieren. Der Befehl "update-grub" kann bei dieser Methode nicht verwendet werden.
Der Parameter //--recheck// sollte zusätzlich verwendet werden, wenn es zu folgender Fehlermeldung kommt:
/dev/sda does not have any corresponding BIOS drive
==== Methode 3: Chroot über ein Live-System ====
Jedes Live-System ist zur Reparatur geeignet - ob Ubuntu [[http://wiki.ubuntuusers.de/Desktop-CD|Desktop-CD]], Knoppix oder ein Mini-Linux von Diskette.
:!: Es ist wichtig, dass die Systemarchitektur des Live-Systems mit der des installierten Ubuntu-Systems übereinstimmt. Es ist also nicht ohne Weiteres möglich, sich mit chroot und einer 32Bit-LiveCD in ein 64Bit-System einzuloggen. Wird die gleiche CD wie zur Installation genutzt, so sollte es keine Probleme geben.
Nach dem Start des Live-Systems muss die Partition mit dem installierten Ubuntu-System eingebunden werden. Dazu muss ein Terminal geöffnet werden und der Befehl:
sudo mount /dev/sda2 /mnt
ausgeführt werden. Nutzt das System eine separate boot-Partition, so muss diese mit
sudo mount /dev/sda3 /mnt/boot
eingebunden werden. Bei einer normalen Installation ist diese Partition nicht vorhanden, und somit dieser letzte Befehl nicht erforderlich.
Vor dem Wechsel in das installierte System muss diesem der Zugriff auf wichtige Systeminformationen zugesichert werden. Man bindet dazu das Verzeichnis mit den Gerätedateien innerhalb des installierten Systems ein:
sudo mount -o bind /dev /mnt/dev
Ähnlich verfährt man mit dem Schnittstellendateisystem **/proc**. Dieses wird mit
sudo mount -t proc /proc /mnt/proc
eingebunden. Nun erfolgt der Wechsel in das installierte System:
sudo chroot /mnt
Und endlich kann GRUB neu geschrieben werden:
grub-install /dev/sda
Sollte hier der Fehler "Could not find device for /boot: Not found or not a block device." auftreten, gebt folgende Zeile vor dem grub-install ein:
cp /proc/mounts /etc/mtab
Falls Grub zum ersten Mal installiert wird, sollte nun auch
update-grub
ausgeführt werden. Abschließend wird die chroot-Umgebung mit
exit
verlassen und das Live-System beendet.
==== Methode 4: GRUB mit Alternate-CD neu schreiben ====
Sollte man gerade keine Live-CD zur Hand haben (oder nicht so lange warten wollen, bis sie gebootet hat), kann man auch die Ubuntu Alternate-CD nehmen. Einfach die Installation so lange durchlaufen lassen, bis die Frage nach den Partitionen kommt. Mit Alt + F2 auf die Konsole wechseln und mit ⏎ bestätigen. Man ist jetzt automatisch als Root angemeldet.
mount /dev/sda2 /mnt/
Vor dem Wechsel in das installierte System muss diesem der Zugriff auf wichtige Systeminformationen zugesichert werden. Man bindet dazu das Verzeichnis mit den Gerätedateien innerhalb des installierten Systems ein:
sudo mount -o bind /dev /mnt/dev
Ähnlich verfährt man mit dem Schnittstellendateisystem **/proc**. Dieses wird mit
sudo mount -t proc /proc /mnt/proc
eingebunden.
Jetzt bewegt man sich in das eingebundene Verzeichnis und wechselt in das Ubuntu-System ( Strg + D verlässt das Verzeichnis wieder):
cd /mnt/
chroot /mnt/
Jetzt kann die neue Konfiguration in den MBR geschrieben werden:
grub-install /dev/sda
Der nächste Befehl analysiert das root-System und schreibt eine Standard-Konfiguration. Das ist nur notwendig, falls keine Konfiguration vorliegt, oder Fehler enthalten sind.
update-grub
Nach dem Verlassen der chroot-Umgebung startet man den Rechner mit
reboot
neu und es sollte wieder GRUB erscheinen.
==== Methode 5: GRUB wiederherstellen bei Benutzung von LVM ====
Sollte man einen [[LVM]] für seine Festplatte benutzen, muss man ein bisschen mehr Aufwand treiben. Am besten ist hierfür die [[http://wiki.ubuntuusers.de/Desktop-CD|Desktop-CD]] von [[ubuntu:Ubuntu]] zu nutzen.
Zur Nutzung des Logical Volume Managers muss als erstes das Paket **lvm2** installiert werden.
sudo apt-get install lvm2
Nun muss der LVM-Kerneltreiber geladen werden.
sudo modprobe dm-mod
Dann muss man das LVM zugänglich machen. Das geht im Terminal mit den Befehlen
sudo vgscan
sudo vgchange -a y
Wenn man sich nicht sicher ist, wie die Namen der Volumes im [[LVM]] lauten kann man diese mit folgendem Befehl anzeigen lassen.
sudo lvscan
Nun sollte man die Partition mit dem Root-Verzeichnis (**/**) einbinden:
mkdir /mnt/ubuntu
mount /dev/mapper/LV-root /mnt/ubuntu
Ebenso müssen die anderen Logical Volumes eingebunden werden:
mount /dev/mapper/LV-usr /mnt/ubuntu/usr
mount /dev/mapper/LV-home /mnt/ubuntu/home
Das **/dev/mapper/LV-* ** muss nach den eigenen Namensvergaben angepasst werden. Die üblicherweise separate boot-Partition muss mit
sudo mount /dev/sda3 /mnt/ubuntu/boot
eingebunden werden. Nun kann man ganz normal mit der [[chroot]]-Umgebung (siehe oben) weiter machen.
==== Methode 6: GRUB wiederherstellen mit der GRUB-Konsole ====
Bei dieser Methode müssen sämtliche Arbeitschritte manuell ausgeführt werden, die ansonsten vom Skript **grub-install** durchgeführt werden. Darin liegt die besondere Bedeutung dieser Methode: Sollte **grub-install** - aus welchem Grund auch immer - mit der Systemkonstellation nicht zurechtkommen, so ist eine manuelle Installation hilfreich. Oft werden bei diesem Vorgang auch hilfreiche Fehlermeldungen ausgegeben, die die Ursache des Problems näherbringen.
Zunächst muss sichergestellt werden, dass die benötigten Komponenten im Verzeichnis **/boot/grub/** der Rootpartition abgelegt wurden. Wird eine separate Bootpartition verwendet, so müssen die Komponenten statt dessen dort im Verzeichnis **/grub/** vorliegen. Mögliche Komponenten finden sich normalerweise im Verzeichnis **/usr/lib/grub/i386-pc**. Bei anderen Architekturen muss der Pfad angepasst werden. Im Zweifelsfall sollte man alle Dateien kopieren.
Jetzt wird die GRUB-Konsole gestartet:
sudo grub
Als nächstes wird die Partition festgelegt, die das Verzeichnis **/boot/grub** (bzw. **/grub** bei Verwendung einer boot-Partition) beinhaltet:
grub> root (hd0,1)
Nun kann die eigentliche Installation mit
grub> setup (hd0)
durchgeführt werden. Probleme - zum Beispiel fehlende Komponenten - werden für gewöhnlich an dieser Stelle von GRUB gemeldet. Abschließend kann die GRUB-Konsole mit
grub> quit
verlassen werden. :!: Zu beachten ist, dass Geräte und Partitionen in der GRUB-eigenen Notation angegeben werden müssen: Die Platten- und Partitionszählung beginnt dabei bei Null. Die hier in allen Beispielen verwendete Rootpartition **/dev/hda2** wäre demnach **(hd0,1)**.
===== Sicherheitsaspekte =====
Man kann GRUB auch vor unsachgemäßem Zugriff schützen, um beispielsweise den [[http://wiki.ubuntuusers.de/Recovery_Modus|Recovery Modus]] zu unterbinden. Näheres dazu siehe [[http://wiki.ubuntuusers.de/Recovery_Modus|hier]].
===== Problembehebung =====
==== Problem mit GRUB unter Adaptec SCSI Controllern ====
Ein recht häufiges Problem mit Adaptec SCSI-Controllern ist der "GRUB Hard Disk Error". Es kommen auch andere Fehlermeldungen vor, jedenfalls lässt sich der Computer nicht starten. Das verflixte an dem Fall ist, dass man mit der Super GRUB Disk unter der Funktion "direkt von MBR starten" einfach booten kann. Das Problem liegt an der Übergabe der LBA-Festplattengeometriedaten vom SCSI-Controller zum BIOS. Hier hat GRUB keine Chance. Auch LILO kann hier nichts ausrichten. Der Trick besteht in der Installation von GAG (Graphical Boot Manager). Dieser Bootmanager kann zwar weder Linux noch Windows allein booten, doch er kann auf vorhandene Booteinstellungen zugreifen und er hat kein Problem mit dem oben beschriebenen Bug. Wichtig ist hier, dass der Grub nicht mehr im MBR sondern auf der Linux Bootpartition installiert wird. Und das beste an diesem Manager ist, dass er direkt beim Booten konfigurierbar ist. Um Grub auf einer Partition (hier hda5) zu installieren, muss zum Beispiel folgendes als root eingeben:
grub-install /dev/sda5
Aber erst nach der Installation von GAG (link siehe unten).
==== GRUB Error 12, 13 und 21 ====
==== Error vor dem GRUB-Bootmenü ====
Sollte die Fehlermeldung kommen, bevor der GRUB das Bootmenü auflistet, kann die Ursache mehrere Quellen haben.
=== Ursache 1 ===
GRUB ist nicht auf der richtigen Festplatte/Partition installiert.
:!: Bei einer Standardinstallation darauf achten, dass die Festplatte, auf die Ubuntu installiert werden soll, auch an erster Stelle in der Bios-Bootreihenfolge steht. Da GRUB automatisch auf (hd0,0) installiert wird. Sollte auf dieser Festplatte der Master Boot Record eines anderes Betriebssystem sein, so wird dieser überschrieben. Um ihn wiederherzustellen, müsst man den MBR wieder herstellen. Wie das geht, steht weiter unten [[#deinstallation|im Artikel]].
=== Ursache 2 ===
Die Einträge "groot" und "kopt" in der **menu.lst** sind nicht korrekt. Um herauszufinden, welche Festplatte dort eingetragen werden muss, gibt man mit Hilfe einer Live-CD in der Konsole
fdisk -l
ein.
:!: Die erhaltene Liste kann man folgendermaßen verstehen. **/dev/sda1** ist die erste Festplatte, dafür steht das "a", und die "1" steht für die erste Partition dieser Festplatte. PATA Festplatten werden als **/dev/hda1** aufgelistet. Unter dem Punkt "boot" zeigt das * an, wo ein MBR vorhanden ist.
Für "groot" und "kopt=root" müsste nun, wenn der MBR von Ubuntu auf der **/dev/sda1** liegt,
groot=(hd0,0) und für kopt=root=/dev/sda1 ro
eingetragen werden.
:!: Dies müssen nicht unbedingt die richtigen Einträge für Root in den [[http://wiki.ubuntuusers.de/menu.lst|Kerneleinträgen]] für Ubuntu sein.
==== Error nach dem GRUB-Bootmenü ====
Es kommt des Öfteren vor, dass GRUB zwar das Bootmenü auflistet, man aber beim Auswählen eines Betriebssystems eine Fehlermeldung zurückbekommt. Sollte der Fehler Error 12, Error 13 und Error 21 sein, drückt man im GRUB-Bootmenü C. Jetzt befindet man sich in der Grubkonsole. Hier gibt man
find /vmlinuz
ein, damit wird angezeigt, auf welcher Partition GRUB Ubuntu erwartet. Dies gibt man anschließend in der **menu.lst** bei den Kerneleinträgen unter [[http://wiki.ubuntuusers.de/menu.lst|root]] ein.
=== Fehler bei Windows-Boot ===
Sollte eine Fehlermeldung bei der Auswahl von Windows erscheinen, so lässt dies entweder
- einen falsch eingegebenen "root"-Eintrag vermuten
- die Weiterleitung des GRUB zum Windows-Bootloader mittels "chainload +1" ist nicht eingegeben
- oder es muss noch der "map-Trick" angewendet werden. Ein Hinweis auf dieses Problem ist, wenn nach Wahl des Menüeintrags nur die Meldung "Starting up..." ohne weitere Fehlermeldung erscheint. Einzelheiten zur Anwendung der map-Anweisung findet man im Artikel [[http://wiki.ubuntuusers.de/menu.lst#menu_lst-map|menu.lst]]
Zuerst muss man aber herausfinden, auf welcher Festplatte GRUB Windows erwartet. Hier die Möglichkeiten, wie man die richtige Festplatte für den "root"-Eintrag findet.
== Möglichkeit 1 ==
Beispiel: Eingebaut sind zwei Festplatten. Auf Festplatte eins ist Windows. Auf Festplatte zwei sind Ubuntu und GRUB installiert. Im Bios steht Festplatte zwei an erster Stelle zum Booten. Damit glaubt GRUB Ubuntu muss auf (hd0,0) sein. Die Festplatte eins steht an der zweiten Stelle. Damit müsste sich für GRUB Windows auf (hd1,0) befinden.
== Möglichkeit 2 ==
Eine zwar nicht so elegante, aber dennoch effektive Methode ist es, Windows einfach mit allen möglichen Varianten in der **menu.lst** zu erstellen und anschließend auszuprobieren. Damit erspart man sich die langen Ladezeiten der [[http://wiki.ubuntuusers.de/Live-CD|Live-CD]].
== Eine Platte mit sechs Partitionen ==
* Jeweils von (hd0,0) bis (hd0,6) bei Windows unter "root" eintragen.
== Zwei Festplatten mit je drei Partitionen ==
* Jeweils von (hd0,0) bis (hd0,3) und (hd1,0) bis (hd1,3) bei Windows unter "root" eintragen.
:!: Bei Raid 0 werden beide Festplatten als eine erkannt. Das heißt, (hd0,0) steht in diesem Fall für **sda** und **sdb**. Und eine dritte Festplatte folgt mit (hd1,0). Es ist auch möglich, dass die Raid 0 = SATA1 + SATA2 Festplatten als (hd1,0) erkannt werden und die SATA 3 als (hd0,0). Darum ist es immer besser, alle Varianten durchzuprobieren.
===== GRUB deinstallieren =====
Um GRUB aus dem Master Boot Record zu entfernen, gibt es verschiedene Möglichkeiten.
Falls man ein reines Linux-System hat, kann man eine alte Sicherung des Master Boot Records einspielen (siehe [[#MBR_sichern_und_wiederherstellen|oben]]).
Falls man ein Dualbootsystem mit Windows 2000/XP hat, kann man von der Windows Installations-CD booten und im Setup mit der Taste R die Wiederherstellungskonsole starten. Nun wählt man aus der Liste die eigene Windows-Installation aus und gibt das Administratorkennwort ein. Mit dem Befehl **fixmbr** wird der MBR überschrieben und GRUB deinstalliert. Dabei bleiben die Partitionen erhalten. Danach wird mit dem Befehl **fixboot** der Bootsektor der Windows-Partition neu geschrieben. Mit **exit** verlässt man die Wiederherstellungskonsole und startet den Computer neu. Nun wird Windows booten.
:!: Die Wiederherstellungskonsole gibt es nicht auf allen Windows-CDs. So ist diese bei einigen OEM- oder Recovery-Versionen nicht vorhanden! Wer keine Installations-CD zur Hand hat, führt ''fdisk /mbr'' in der Eingabeaufforderung ein.
Alternativ kann sich unter [[windows:Windows]] NT, 2000 und XP auch das Tool **MbrFix.exe** herunterladen werden (Download [[http://www.sysint.no/en/Download.aspx|hier]] , Doku [[http://www.sysint.no/Nedlasting/MbrFix.htm|hier]] ) und dann in einem Terminal unter Windows den Befehl
MbrFix /drive fixmbr
eingeben, wobei für die Laufwerksnummer (Zählung beginnt mit Null) anzugeben ist. Falls Windows Vista verwendet wird, lautet der Befehl
MbrFix /drive fixmbr /vista
:!: Eine fehlerhafte Verwendung der Software kann möglicherweise zu einem Totalverlust der Daten auf der Festplatte führen!
===== Auf welcher Festplatte ist GRUB installiert? =====
Um herauszufinden, auf welcher Festplatte (oder Partition) der Bootloader installiert ist, kann man eine der hier beschriebenen Methoden verwenden: [[http://wiki.ubuntuusers.de/Skripte/GRUB_finden|Skripte/GRUB finden]].
===== Hintergrund: Stages =====
Die "Stages" sind die Phasen in denen sich Grub befindet:
- stage1 (im MBR): lädt stage1_5 und stage2 nach, die auf der Festplatte selbst liegen
- stage1_5: Zugriff auf verschiedene Dateisysteme
- stage2: Der eigentliche Bootloader.