19.04.2024, 14:50 UhrDeutsch | English
Hallo Gast [ Registrierung | Anmelden ]

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
*Grafisches Benutzeroberfläche mit Unterstütztun 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 lesbar 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:

apt-get remove os-prober


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.


zurück

XML Revisions of $tag
Seiten-History :: Letzter Editor : krishan1 :: Eigentümer : krishan1 ::
Powered by pnWikka 1.0
 
 
Deutsch | English
Logos and trademarks are the property of their respective owners, comments are property of their posters, the rest is © 2004 - 2006 by Jörg Schirottke (Kano).
Consult Impressum and Legal Terms for details. Kanotix is Free Software released under the GNU/GPL license.
This CMS is powered by PostNuke, all themes used at this site are released under the GNU/GPL license. designed and hosted by w3you. Our web server is running on Kanotix64-2006.