Bootloader Grub2
Allgemeines
Grub2 ist die zweite Generation des Bootloaders
GNU Grub ∞. Seit Excalibur ist
Grub2 der Standard-Bootloader von KANOTIX. Das entsprechende Paket heißt "grub-pc", die Vorgängerversion wird als "grub-legacy".bezeichnet.
Grub2 wurde völlig neu entwickelt und unterscheidet sich von grub-legacy in vielen Punkten, besonders der Konfiguration.
Einige neue Merkmale von GRUB 2 sind:
*Unterstützung des Bootens von
ext4?, LVM und RAID (sowohl Hard- als auch Software)
*Unterstützung von EFI
*direkte Unterstützung von UUID
*Modulares Laden der Komponenten zur Laufzeit
*Grafische Benutzeroberfläche mit Unterstützung von Themes
*Unterstützung von Skripten
*Benutzerdefinierte Boot-Einträge
*Verbesserte Partitionsbezeichnung
*Rettungsmodus zum Beheben von Bootproblemen
Dateien und Ordner
/boot/grub/grub.cfg
Während grub-legacy über eine zentrale Konfigurationsdatei verfügt (/boot/grub/menu.lst) ist die Konfiguration von
Grub2 über mehrere Dateien in verschiedenen Verzeichnissen verteilt.
Zentral ist die Datei /boot/grub/grub.cfg. Diese Datei enthält die eigentliche Konfiguration und wird von
Grub2 ausgelesen. Sie ist aber nur als lesbar gespeichert und sollte nicht bearbeitet werden. Dieses wird auch durch einen Hinweis am Anfang von /boot/grub/grub.cfg deutlich. Eine typische grub.cfg sieht etwa so aus:
#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by /usr/sbin/grub-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#
### BEGIN /etc/grub.d/00_header ###
set default=0
set timeout=5
set root=(hd0,7)
search --no-floppy --fs-uuid --set b19bef40-4496-475c-8113-cde814a96541
if loadfont /usr/share/grub/ascii.pf2 ; then
set gfxmode=640x480
insmod gfxterm
insmod vbe
if terminal_output gfxterm ; then true ; else
# For backward compatibility with versions of terminal.mod that don't
# understand terminal_output
terminal gfxterm
fi
fi
### END /etc/grub.d/00_header ###
### BEGIN /etc/grub.d/05_debian_theme ###
set root=(hd0,7)
search --no-floppy --fs-uuid --set b19bef40-4496-475c-8113-cde814a96541
insmod png
if background_image /boot/grub/KanotixPenguins.png ; then
set color_normal=light-blue/black
set color_highlight=white/blue
else
set menu_color_normal=cyan/blue
set menu_color_highlight=white/blue
fi
### END /etc/grub.d/05_debian_theme ###
### BEGIN /etc/grub.d/10_linux ###
menuentry "Kanotix GNU/Linux, Linux 2.6.31-9-generic" {
set root=(hd0,7)
search --no-floppy --fs-uuid --set b19bef40-4496-475c-8113-cde814a96541
linux /boot/vmlinuz-2.6.31-9-generic root=UUID=b19bef40-4496-475c-8113-cde814a96541 ro vga=794
initrd /boot/initrd.img-2.6.31-9-generic
}
menuentry "Kanotix GNU/Linux, Linux 2.6.31-5-generic" {
set root=(hd0,7)
search --no-floppy --fs-uuid --set b19bef40-4496-475c-8113-cde814a96541
linux /boot/vmlinuz-2.6.31-5-generic root=UUID=b19bef40-4496-475c-8113-cde814a96541 ro vga=794
initrd /boot/initrd.img-2.6.31-5-generic
}
menuentry "Kanotix GNU/Linux, Linux 2.6.30-9-generic" {
set root=(hd0,7)
search --no-floppy --fs-uuid --set b19bef40-4496-475c-8113-cde814a96541
linux /boot/vmlinuz-2.6.30-9-generic root=UUID=b19bef40-4496-475c-8113-cde814a96541 ro vga=794
initrd /boot/initrd.img-2.6.30-9-generic
}
### END /etc/grub.d/10_linux ###
### BEGIN /etc/grub.d/30_os-prober ###
menuentry "Debian GNU/Linux, kernel 2.6.26-2-686 (on /dev/sda1)" {
set root=(hd0,1)
search --no-floppy --fs-uuid --set b940432d-0741-493a-b58f-59160224b033
linux /boot/vmlinuz-2.6.26-2-686 root=/dev/hda1 ro vga=794
initrd /boot/initrd.img-2.6.26-2-686
}
menuentry "Debian GNU/Linux, kernel 2.6.26-2-686 (single-user mode) (on /dev/sda1)" {
set root=(hd0,1)
search --no-floppy --fs-uuid --set b940432d-0741-493a-b58f-59160224b033
linux /boot/vmlinuz-2.6.26-2-686 root=/dev/hda1 ro single
initrd /boot/initrd.img-2.6.26-2-686
}
menuentry "Kanotix GNU/Linux, Linux 2.6.30-10-generic (on /dev/sda9)" {
set root=(hd0,9)
search --no-floppy --fs-uuid --set b90e78f8-6bce-4633-8b9b-3e8e09db256e
linux /boot/vmlinuz-2.6.30-10-generic root=UUID=b90e78f8-6bce-4633-8b9b-3e8e09db256e ro vga=794
initrd /boot/initrd.img-2.6.30-10-generic
}
menuentry "Kanotix GNU/Linux, Linux 2.6.30-10-generic (recovery mode) (on /dev/sda9)" {
set root=(hd0,9)
search --no-floppy --fs-uuid --set b90e78f8-6bce-4633-8b9b-3e8e09db256e
linux /boot/vmlinuz-2.6.30-10-generic root=UUID=b90e78f8-6bce-4633-8b9b-3e8e09db256e ro single
initrd /boot/initrd.img-2.6.30-10-generic
}
### END /etc/grub.d/30_os-prober ###
### BEGIN /etc/grub.d/40_custom ###
# This file is an example on how to add custom entries
### END /etc/grub.d/40_custom ###
Es ist zwar grundsätzlich möglich diese Datei schreibbar zu machen und zu editieren, aber es ist nicht der vorgesehene Weg. Die Konfiguration erfolgt über Dateien in /etc und anschließendem
"update-grub" welche die Einträge in der grub.cfg erzeugt und eigene Editierungen wieder überschreibt. Nach einem Kernel-Update wird zum Beispiel
"update-grub" immer erneut ausgeführt.
Die Konfiguration von
Grub2 erfolgt also grundsätzlich über die vorgesehenen Dateien in /etc. Dieses sind /etc/default/grub und alle Dateien in /etc/grub.d/ .
/etc/default/grub
In /etc/default/grub werden einige grundsätzliche Parameter bestimmt und von
"update-grub" zu Einträgen in /boot/grub/grub.cfg generiert werden. Sie sieht in etwa so aus:
# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
GRUB_DEFAULT=0
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR=`[ "$(uname -m)" = "x86_64" ] && echo Kanotix64 || echo Kanotix`
GRUB_CMDLINE_LINUX_DEFAULT="quiet vga=791 splash"
# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL=console
# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
#GRUB_GFXMODE=640x480
GRUB_DEFAULT ist das Äquivalent zum Parameter
"default" in der menu.lst von grub-legacy und kennzeichnet den Boot-Eintrag der Standardmäßig angwählt ist (beginnend bei 0, welches der erste Eintrag ist. 1 würde dem zweiten Eintrag entsprechen).
GRUB_TIMEOUT ist das Äquivalent zu
"timeout" in der menu.lst von grub-legacy und bestimmt die Wartezeit in Sekunden bis der Eintrag von
GRUB_DEFAULT gebootet wird.
GRUB_CMDLINE_LINUX_DEFAULT ist das Äquivalent zu
"defoptions" in der menu.lst von grub-legacy und diese Parameter werden in der Zeile "linux" der Bootparameter hinzugefügt. "vga=xxx" ist eine Option welche mit
Grub2 funktioniert aber als "deprecated" gilt. Beim Starten weisst
Grub2 auch kurz darauf hin und sagt man möge
"gfxpayload" verwenden. Diese Funktion scheint aber derzeitig noch nicht vernünftig implementiert zu sein.
Wer die recovery-modes als Booteintrag nicht mag kann sie noch mit folgendem Eintrag deaktivieren:
# Uncomment to disable generation of recovery mode menu entrys
GRUB_DISABLE_LINUX_RECOVERY="true"
#### WICHTIG ####
Nach jeder Änderung unbedingt ein
"update-grub" (als root) ausführen. Ansonsten werden die Änderungen nicht übernommen.
/etc/grub.d/
In /etc/grub.d/ sind diverse Skripte enthalten welche von
"update-grub" ausgeführt und zu Einträgen in /boot/grub/grub.cfg generiert werden:
00_header
05_debian_theme
10_linux
30_os-prober
40_custom
README
00_header erzeugt einige grundlegende Parameter in grub.cfg welche vor allem aus der /etc/default/grub entnommen werden.
05_debian_theme bestimmt das Aussehen von
Grub2 (Hintergrund, Schriftart, Farbe usw.).
10_linux erzeugt die Booteinträge für die Kernel des gerade laufenden Betriebssystems.
30_os-prober findet alle anderen Betriebssysteme (auch Windows) und erzeugt dafür Booteinträge. Wer dieses nicht möchte kann 30_os-prober das Ausführrecht entziehen:
chmod -x /etc/grub.d /30_os-prober
oder das Paket os-prober entfernen:
40_custom ist gedacht für eigene Erweiterungen.
Die Skripte werden der Reihe nach abgearbeitet wobei die führenden Nummern bestimmend sind. Wer also an erster Stelle im Bootmenü lieber eigene Einträge generieren lassen möchte statt dem was
10_linux generiert erstelle ein Skript mit einer führenden Zahl <10, aber nicht<6, wie z.B.
09_custom. Dort kann man dann z.B. folgendes eintragen:
#! /bin/sh -e
echo "Adding custom boot entry(s)" >&2
cat << EOF
menuentry "My KANOTIX" {
set root=(hd0,7)
search --no-floppy --fs-uuid --set b19bef40-4496-475c-8113-cde814a96541
linux /boot/vmlinuz-2.6.31-9-generic root=UUID=b19bef40-4496-475c-8113-cde814a96541 ro vga=794
initrd /boot/initrd.img-2.6.31-9-generic
}
EOF
Oder wer es lieber per Chainloading mag kann eine Datei
11_chainload erstellen:
#! /bin/sh -e
echo "Adding custom boot entry(s)" >&2
cat << EOF
menuentry "Chainload Ubuntu" {
set root=(hd0,10)
chainloader +1
}
EOF
cat << EOF
menuentry "Chainload Arch Linux (/dev/sda5)" {
set root=(hd0,5)
chainloader +1
}
EOF
Bitte beachten: Die Zuweisungen bei root=(
hd0?,5) haben sich gegenüber grub-legacy geändert. Während bei grub-legacy für beide Ziffern bei 0 angefangen wurde zu zählen ist es bei
Grub2 nun etwas anders.
Die Zählung der ersten Ziffer (Festplatten) bleibt bestehen. "0" heißt also die erste Festplatte (/dev/sda), "1" wäre /dev/sdb. Bei der zweiten Ziffer (den Partitionen) wird hingegen nun bei "1" angefangen zu zählen. D.h. root=(
hd0?,1) ist die erste Partition auf der ersten Festplatte. root=(
hd1?,5) wäre die fünfte Partition auf der zweiten Festplatte.
Da
Grub2 standardmäßig mit UUID arbeitet betrifft die neue Syntax vorrangig das Chainloading per (hdx,x). Wenn in der root-Zeile eine UUID verwendet wurde wird bei mir kein Device gefunden.
#### WICHTIG ####
Die Skripte müssen natürlich ausführbar sein:
# chmod +x /etc/grub.d /09_custom
# chmod +x /etc/grub.d /11_chainload
und per
"update-grub" aktualisiert werden:
# update-grub
Generating grub.cfg ...
Found Kanotix background: KanotixPenguins.png
Adding custom boot entry(s)
Found linux image: /boot/vmlinuz-2.6.31-9-generic
Found initrd image: /boot/initrd.img-2.6.31-9-generic
Found linux image: /boot/vmlinuz-2.6.31-5-generic
Found initrd image: /boot/initrd.img-2.6.31-5-generic
Found linux image: /boot/vmlinuz-2.6.30-9-generic
Found initrd image: /boot/initrd.img-2.6.30-9-generic
Adding custom boot entry(s)
Found Debian GNU/Linux (5.0.3) on /dev/sda1
Found Ubuntu 9.04 (9.04) on /dev/sda10
Found Arch on /dev/sda5
Found Debian GNU/Linux (squeeze/sid) on /dev/sda6
Found Debian GNU/Linux (squeeze/sid) on /dev/sda8
Found Debian GNU/Linux (5.0.3) on /dev/sda9
done
Wenn in den Skripten kein
"echo "Adding custom boot entry(s)" >&2" steht gibt es keine Meldung das dort etwas passiert. Es kann aber natürlich auch weggelassen oder anderweitig benannt werden. Wenn Fehlermeldungen auftauchen bitte ernstnehmen. Evtl. passt die Syntax nicht, etc.
Update von Grub2
Wenn per Update eine neue Version von
Grub2 installiert wird fragt der Paketmanager nach wie mit der neuen Version verfahren werden soll.
Wir wählen dort
"Version des Paket-Betreuers installieren" da wir die aktuelle Version haben möchten.
Dann erfolgt eine Abfrage wo
Grub2 standardmäßig installiert werden soll. Der MBR (hier:/dev/sda) mag oft eine gute Wahl sein. Dann setze man mittels
Leertaste ein Sternchen im entsprechenden Feld vor /dev/sda.Per default ist dort keines. Per
TAB wechselt man dann auf
"OK" und bestätigt mit
Enter
#### ACHTUNG ####
Wenn
Grub2 nicht in den MBR, sondern in eine Partiton installiert werden soll
muss nach einem Update von
Grub2 nochmals explizit
Grub2 in die entsprechende Partiton installiert werden:
grub-install /dev/sda7 ## Grub2 in die siebente Partiton der ersten Festplatte installieren ##
Wenn dieses nicht gemacht wird kann es passieren dass das System nicht mehr gebootet werden kann, da die alte (installierte) Version von
Grub2 nicht die Syntax von den neuen Konfigurationsdateien versteht und einen Fehler ausgibt.
Themes
Hintergrundbild
Grundsätzlich ist es in
Grub2 möglich im graphischen Modus zu arbeiten und Hintergrundbilder einzubinden. Die Auflösung kann in der Datei /etc/default/grub bestimmt werden in dem man das Kommentarzeichen # vor
"GRUB_GFXMODE=640x480" entfernt und die gewünschte Auflösung einträgt:
Ist nichts angegeben oder die Zeile auskommentiert # wird eine Auflösung von 640x480 benutzt.
Welche Auflösungen möglich sind erfährt man im Auswahlmenü durch Wechsel in den Commandline-Modus mittels drücken der Taste
c und anschließender Eingabe von:
Das weitere Aussehen von
Grub2 wird vorrangig durch das Skript
05_debian_theme in /etc/grub.d/ bestimmt. Möchte man ein eigenes Hintergrundbild verwenden muss in diesem Skript der Pfad zum Bild angegeben werden. Dazu öffne man die Datei /etc/grub.d/05_debian_theme mit einem Editor und als Root. Die Zeile 16 bestimmt das Hintergrundbild:
for i in {/boot/grub,/usr/share/images/grub}/Kanotix{,64}Penguins.{png,tga,jpg,jpeg} ; do
Am besten man kopiert diese Zeile und fügt sie genau darunter wieder ein. Anschließend wird die Originalzeile auskommentiert mit #. Vorausgesetzt das neue Bild befindet sich in einem der angegebenen Verzeichnisse {/boot/grub,/usr/share/images/grub} wird nun noch der exakte Name des Bildes angegeben und anstatt dem Namen des Kanotix-Bildes eingetragen. Wichtig ist der Punkt (.) hinter dem Dateinamen. Dieser muss dort stehen.
for i in {/boot/grub,/usr/share/images/grub}/My_Grub2Picture.{png,tga,jpg,jpeg} ; do
Das neue Hintergrundbild
muss in einem der angegebenen Formate vorhanden sein {png,tga,jpg,jpeg}, andere sind nicht möglich. Außerdem muss die Größe des Bildes exakt die eingestellten Auflösung entsprechen. Ansonsten kann man mit Bildbearbeitungsprogrammen wie Gimp nachhelfen.
Als Pfadangabe kann zusätzlich auch z.B. ein Pfad im /home-Verzeichnis angegeben werden. Als Trenner bei Pfadangaben oder Dateiendungen darf nur ein Komma (,) verwendet werden.
for i in {/home/Benutzer/Bilder,/boot/grub,/usr/share/images/grub}/My_Grub2Picture.{png,tga,jpg,jpeg} ; do
Schriftfarben
Je nach Hintergrundbild kann es sein dass die Schriftfarbe im Auswahlmenü kaum oder garnicht zu lesen ist. Dieses kann auch in der /etc/grub.d/05_debian_theme geändert werden, und zwar in den Zeilen 40 und 41:
set color_normal=light-blue/black
set color_highlight=white/blue
set color_normal bezeichnet die Standardschriftfarbe im Auswahlmenü.
set color_highlight bezeichnet die Schriftfarbe für den gewählten Menüpunkt.
Der erste Farbwert bezeichnet jeweils die Schriftfarbe, der zweite Farbwert gibt die Hintergrundfarbe an.
black bedeutet dabei nicht etwas schwarz, sondern transparent.
Nachdem alle Änderungen gemacht wurden nicht vergessen ein
update-grub durchzuführen. Ansonsten werden die Änderungen nicht wirksam. In der Ausgabe von
update-grub kann man schon erkennen ob das neue Hintergrundbild auch erkannt wurde:
# update-grub
Generating grub.cfg ...
Found Kanotix background: My_Grub2Picture.tga
[...]
Wenn alles korrekt gemacht wurde kann man beim nächsten Bootvorgang das Ergebnis sehen.
Für alle, die es lieber graphisch haben
...Gibt es den selbst erklärenden
Grub Customizer. Man kann ihn
hier∞ herunterladen, entpacken, Installieren mit
cmake .
make
sudo make install]