Hilfe zum GRUB

Wir bieten persönliche Hilfe am Mittwoch ab 18:00 in der Lehrter Straße 53 an. Wir freuen uns über eine Mail an kontakt@belug.de mit einer kurzen Problembeschreibung.

Grub Bootloader

GNU GRUB - GRand Unified Bootloader

Dieser Artikel beschreibt GNU GRUB (grand unified bootloader) übersetzt etwa "großartiger, einheitlicher Startmanager". GNU/GRUB entstand aus GRUB, der ursprünglich von Erich Stefan Boleyn entwickelt wurde.

Ein Startmanager oder bootloader ist das erste Programm das gestartet wird, wenn ein Computer angeschaltet wird. Er ist verantwortlich für das eigentliche Starten des Betriebssystems, beispielsweise von Hurd, Windows, oder Linux. Der bootloader übergibt danach die Kontrolle an den gestarteten Betriebssystemkern und beendet sich. Der Betriebssystemkern kümmert sich von nun an um das restliche Initialisieren der Hardwarekomponenten und Starten der Anwendungsprogramme.

Einführung

GRUB kann im Gegensatz zu LiLO (ein anderer bekannter Bootloader) Dateisysteme wie ext2, ReiserFS, FAT32, BSD FFS oder xfs direkt lesen. Deshalb muss nach der Installation eines neuen Kernels oder eines neuen Betriebssystems nur die Konfigurationsdatei von Grub angepasst werden. Es ist keine komplette Neuinstallation des bootloaders, wie bei LiLO nötig.

Installation von Grub

Grub wird am einfachstem mit dem Packetmanager Ihrer Distribution (apt, yast...) installiert. Bei Debian reicht dafür ein simples:

apt-get install grub

als root auf der Kommandozeile.

Alternativ kann Grub auch aus den Quellen compiliert werden. Dazu benötigen Sie den Quellcode von der Grub-Homepage:

cd /usr/src
mkdir grub
cd grub
wget ftp://alpha.gnu.org/gnu/grub/grub-0.97.tar.gz
unp grub-0.97.tar.gz
cd grub-0.97
./configure
make
su
make install

Die Installation ist mit dem üblichen Dreierschritt configure/make/make install sehr einfach. Die reine Installation von Grub, über den Paketmanager der Distribution oder durch eigenes Compilieren, verändert den Bootsektor der Festplatte noch nicht.

Grub auf Bootdiskette installieren

Eine Bootdiskette kann auf unterschiedliche Art und Weise erstellt werden. Der einfachste Weg ist der Aufruf von:

grub-install /dev/fd0

Dieser Befehl installiert Grub auf die Diskette. Wenn Grub bereits auf einer Festplatte installiert ist, kann man auch einfach den bootsektor oder masterbootrecord kopieren::

dd if=/dev/hda of=/dev/fd0 bs=512 count=1

Alternativ können Sie auch von der Grub-Shell aus arbeiten:

linux:$ su
linux:# grub
Probing devices to guess BIOS drives. This may take a long time.

    GNU GRUB  version 0.97  (640K lower / 3072K upper memory)

       [ Minimal BASH-like line editing is supported.   For
         the   first   word,  TAB  lists  possible  command
         completions.  Anywhere else TAB lists the possible
         completions of a device/filename. ]

grub> root (hd0,2)
 Filesystem type is ext2fs, partition type 0x83

grub> setup (fd0)
 Checking if "/boot/grub/stage1" exists... no
 Checking if "/grub/stage1" exists... yes
 Checking if "/grub/stage2" exists... yes
 Checking if "/grub/e2fs_stage1_5" exists... yes
 Running "embed /grub/e2fs_stage1_5 (fd0)"...  15 sectors are embedded.
succeeded
 Running "install /grub/stage1 (fd0) (fd0)1+15 p (hd0,2)/grub/stage2 /grub/menu
.lst"... succeeded
Done.

grub>quit
linux:# exit
linux:$ exit

Wie auch immer Sie diese Diskette erstellen -- auf jeden Fall sollten Sie sie testen!

Grub auf Festplatte installieren

Sie sollten vor der Installation von Grub in den Bootsektor oder Masterbootrecord eine Bootdiskette erstellen und diese auch auf Funktion testen! Um Grub in den Masterbootrecord der Festplatte zu installieren geben Sie auf der Grub-Konsole ein:

 

grub> find /boot/grub/stage1  

Die Ausgabe (bei mir hd0,9) sollte nun die Festplattenpartition sein, auf der /boot/grub liegt. Das ist nützlich, wenn Sie nicht genau wissen, wo die einzelnen stages auf der Platte liegen. Der Befehl "find" zeigt sie an. 

grub> root (hd0,9)

Dieser Befehl teilt Grub mit, wo seine Dateien (stages, Konfiguration) liegen. Nun können Sie Grub mit:

grub> setup (hd0) 

in den Bootsektor der ersten Festplatte installieren. Grub mit:: 

grub> quit 

wieder verlassen und neu booten.

Konfiguration

Festplatten und Partitionen werden bei Grub durchgezählt und stehen in Klammern: (hd0,0) = erste Partition auf erster Platte, aka /dev/hda1.

Probleme macht diese Zählweise immer dann,  wenn verschiedene Bussysteme im Rechner verbaut sind. Dann muss man Grub mitteilen, wie das BIOS (Basic Input/ Output System) die Platten sieht. Das Ganze wird in der Datei /boot/grub/device.map erledigt. Ein kleines Beispiel mit 4 über Parallel-ATA, 4 über Seriell-ATA und 4 über einen zusätzlichen Hardware-Raid-Controller angeschlossenen Platten zeigt das Problem: Das Gerät /dev/sde ist hier die Platte, die vom Hardware-Raid-Controller bereit gestellt wird. Im ersten Fall wird der Controller vom Bios ignoriert:

device.map:

(hd0)   /dev/sda
(hd1)   /dev/sdb
(hd2)   /dev/sdc
(hd3)   /dev/sdd
(hd4)   /dev/hda
(hd5)   /dev/hdb
(hd6)   /dev/hdc
(hd7)   /dev/hdd
(hd8)   /dev/sde

Erkennt das Bios jedoch den Hardware-Raid-Controller und initialisiert ihn zuerst, dann ändert sich die Reihenfolge der Erkennung, obwohl das dahinter liegende Betriebssystem unter Umständen seine Zuordnung der Gerätenamen nicht ändert. Dann müsste die Datei /boot/grub/device.map folgendermaßen angepasst werden:

device.map:

(hd0)   /dev/sde
(hd1)   /dev/sda
(hd2)   /dev/sdb
(hd3)   /dev/sdc
(hd4)   /dev/sdd
(hd5)   /dev/hda
(hd6)   /dev/hdb
(hd7)   /dev/hdc
(hd8)   /dev/hdd

Das Problem hierbei ist eigentlich nur, herauszufinden, wie genau das Bios nun die Platten zählt. Dabei kann eine Bootdiskette oder CD mit Grub helfen. Dazu einfach die Grub-Diskette booten und im Bootmenü die Taste "c" drücken, um auf die Grub-shell zu kommen. Dann können mit der Eingabe von:

root (hd<TAB>

die Festplatten und die Sichtweise des Bios angezeigt werden. Das Ganze funktioniert nicht zuverlässig, wenn bereits ein System gebootet ist.

Einfache Konfigurationen

Bearbeiten Sie die Datei /boot/grub/menu.lst.

Beachten Sie dabei, dass die Festplatten und Partitionen durchgezählt werden (nochmal: bei 0 beginnen mit Zählen). Zeilen, die mit einer Raute # beginnen, sind Kommentare (was dahinter steht, wird vom System nicht gelesen bzw. ausgewertet). Das folgende Beispiel enthält Kommentare, die die minimale menu.lst eigentlich selbst erklären sollten.

menu.lst:

# Konfiguration meines Computers zum booten
#
# Standardmässig wird der erste Eintrag gebootet.
default 0
#
# Automatisch booten nach 30 Sekunden
timeout 30
#
# Debian Booteintrag
title Debian
kernel (hd0,9)/vmlinuz root=/dev/hda10 ro

Diese minimale Konfiguration ist bereits zum booten eines Betriebssystems ausreichend. Mit der folgenden Konfiguration können schon mehrere Betriebssysteme gestartet werden: 

# Konfiguration meines Computers zum booten
#
# Standardmässig wird der erste Eintrag gebootet.
default 0
#
# Automatisch booten nach 30 Sekunden
timeout 30
#
# Debian Booteintrag
title Debian
root (hd0,9)
kernel /vmlinuz root=/dev/hda10 vga=0x318 read-only
#
# Mandrake Booteintrag
title Mandrake
kernel (hd0,4)/boot/vmlinuz root=/dev/hda5 hdb=ide-scsi vga=0x318
initrd (hd0,4)/boot/initrd.img
#
# Debian mit Kernel 2.4.18 Booteintrag
title Debian 2.4.18-bf2.4
kernel (hd0,9)/boot/vmlinuz-2.4.18-bf2.4 root=/dev/hda10 vga=0x318 read-only
#
# Debian mit Kernel 2.4.20 Booteintrag
title Debian 2.4.20
kernel (hd0,9)/boot/vmlinuz-2.4.20 root=/dev/hda10 vga=0x318 read-only
#
# Windows98 Booteintrag
title Windows 98
root (hd0,0)
makeactive
chainloader +1
#
# Booten von einer Diskette
title Floppy
root (fd0)
chainloader +1 

farbiges Menu

Das angezeigte Menü im Beispiel "Einfache Konfiguration" ist sehr schlicht. Etwas Farbe bekommt man durch folgenden Eintrag:

# Konfiguration meines Computers zum booten
#
# Standardmässig wird der erste Eintrag gebootet.
default 0
#
# Automatisch booten nach 30 Sekunden
timeout 30
#
#farbiges Menü
color yellow/blue blink-light-red/dark-grey

#
# Debian Booteintrag
title Debian
kernel (hd0,9)/vmlinuz root=/dev/hda10 ro

Die ersten beiden Farben (yellow/blue) stehen für die gesamte Menüfarbe Vordergrund/Hintergrund, die hinteren beiden Farben (red/black) stehen für den momentan ausgewählten Menüeintrag. Folgende Farben sind für Vordergrund/Hintergrund gültig:

  • black, blue, green,cyan,red,magenta,brown,light-gray

Zusätzlich sind folgende Farben nur für den Vordergrund gültig:

  • dark-gray, light-blue,light-green,light-red,light-magenta,yellow,white

Man kann den Vordergrund zusätzlich blinken lassen, wenn man den Präfix blink- angibt, wie im Beispiel zu sehen.

splashimage (bunte Bilder in Grub)

Auch einfache Bilder kann Grub anzeigen:

...
splashimage (hd0,0)/grub/splash.xpm.gz
...

Das Bild muss ein gezipptes 640x480 großes XPM mit einer Palette mit 14 Farben sein:

convert -size 640x480 bild.jpg -resize 640x480 -colors 15 bild.xpm && gzip bild.xpm  

Passwörter

Grub kann wahlweise einzelne Booteinträge, die gesamte Konfiguration oder alternative Bootmenüs mit einem Passwort schützen. Die MD5-Summe des Passwortes steht dabei in der Datei menu.lst, deshalb sollte sie mit den Zugriffsrechten 0600 gesichert werden, wenn man Passwörter in der Grubkonsole einsetzt. So gesichert kann nur root diese Datei lesen und schreiben.
Hinweis: In den folgenden Beispielen wird als Passwort "sehrgeheim" verwendet, sie sollten natürlich ein anderes Passwort verwenden!

Ein Passwort für Grub kann folgendermaßen erzeugt werden:

$su
Password:
# grub-md5-crypt
Password: #Eingabe: sehrgeheim
Retype password: #Eingabe: sehrgeheim
$1$emjE/$0MuSq9rcLzkDoR73UVsGA/

Dieses Passwort kann dann kopiert und in die Konfiguration eingesetzt werden. Alternativ können Sie das Passwort natürlich auch mit der Grub-Shell erzeugen:

$su
Password:
# grub
grub> md5crypt
Password: #eingabe: sehrgeheim
$1$emjE/$0MuSq9rcLzkDoR73UVsGA/
grub> quit
#exit
$

Weiterhin können auch Klartextpasswörter in der Konfiguration verwendet werden. Davon rate ich jedoch ab.

Die Grub-Konsole mit Passwort absichern:

# Konfiguration meines Computers zum booten
#
# Standardmässig wird der erste Eintrag gebootet.
default 0
#
# Automatisch booten nach 30 Sekunden
timeout 30
#
# Passwort für die Grubkonsole (klartext)
# password=sehrgeheim
#
# Passwort für die Grubkonsole (md5)
password --md5 $1$emjE/$0MuSq9rcLzkDoR73UVsGA/

#
# Debian Booteintrag
title Debian
kernel (hd0,9)/vmlinuz root=/dev/hda10 ro
Einen Booteintrag erst nach Passworteingabe starten:
# Konfiguration meines Computers zum booten
#
# Standardmässig wird der erste Eintrag gebootet.
default 0
#
# Automatisch booten nach 30 Sekunden
timeout 30
#
# Passwort für die Grubkonsole (md5)
password --md5 $1$emjE/$0MuSq9rcLzkDoR73UVsGA/
#
# Debian Booteintrag, Passwortgeschützt wie Grubkonsole
title Debian
lock
kernel (hd0,9)/vmlinuz root=/dev/hda10 ro
Einen Booteintrag mit extra Passwort absichern:
# Konfiguration meines Computers zum booten
#
# Standardmässig wird der erste Eintrag gebootet.
default 0
#
# Automatisch booten nach 30 Sekunden
timeout 30
#
# Debian Booteintrag, Passwortgeschützt
title Debian
password=$1$emjE/$0MuSq9rcLzkDoR73UVsGA/
kernel (hd0,9)/vmlinuz root=/dev/hda10 ro

spezielle Konfiguration nach Passwort-Eingabe laden:

...
password -md5 $1$emjE/$0MuSq9rcLzkDoR73UVsGA/ /boot/grub/spezielle_config.menu.lst
...

deutsche Tastatur auf Grubshell

Da der GRUB die englische Tastatur benutzt ist es zuweilen recht lästig, wenn man versucht, Bootparameter zu ändern und die Tasten nicht findet.  Auch das Eintippen von Passwörtern gestaltet sich dann mitunter etwas schwierig.

Einfach an den Anfang der /boot/grub/menu.lst folgendes eintragen:

# setkey verändert die Tastaturbelegung auf die deutsche Tastatur
setkey y z
setkey  z y
setkey Y Z
setkey Z Y
setkey equal parenright
setkey parenright parenleft
setkey parenleft asterisk
setkey doublequote at
setkey plus bracketright
setkey minus slash
setkey slash ampersand
setkey ampersand percent
setkey percent caret
setkey underscore question
setkey question underscore
setkey semicolon less
setkey less numbersign
setkey numbersign backslash
setkey colon greater
setkey greater bar
setkey asterisk braceright

Danach kommt der Rest der menu.lst. Ab sofort hat man dann die deutsche Tastaturbelegung im GRUB. Diese Einträge sind so ziemlich das einzige, was nicht direkt beim booten aus der Grub- Shell erledigt werden kann. Nach Eingabe von  "setkey y z" ist es unmöglich, den Buchstaben "y" einzugeben, deswegen ist die darauf folgende Eingabe von "setkey z y" unmöglich!

Booten eines Kernels direkt vom Netzwerk

GRUB kann den Kernel auch von einem TFTP-Server holen. Das setzt natürlich voraus, daß eine Netzwerkkarte im Rechner ist, die von GRUB unterstützt wird und mit der eine Verbindung zum TFTP-Server hergestellt werden kann. Das Booten würde dann folgendermaßen aussehen::

grub> ifconfig --adress=192.168.1.3 --server=192.168.1.1
grub> root (nd)
grub> kernel /vmlinuz root=/dev/hda1
grub> boot

Der erste Unterschied zum "normalen" Vorgang ist, dass die Netzwerkkarte mittels ifconfig aktiviert werden muss. Dabei gibt address die eigene IP und server die IP des TFTP-Servers an. Außerdem gibt man bei root als Platte/Partition nd an. Natürlich kann GRUB die Netzwerk-Informationen auch von einem DHCP-, BOOTP- oder RARP-Server abholen.

booten eines Kernels von CD aus Grub heraus

Öfter kommt bei älteren Notebooks oder Computern vor, das nicht direkt von CD gestartet werdenkann, einfach weil das Bios das nicht unterstützt. In diesen Fall kann man einen Bootmanager verwenden, der booten von CD unterstützt, beispielsweise den Smart Boot Manager, den FreeDos in seinen Bootdisketten integriert hat. Grub unterstützt diese Möglichkeit nicht direkt. Um dennoch aus Grub von einer CD-ROM booten zu können braucht es zwei kleine Umwege via memdisk und sbm.

Der Eintrag sieht wie folgt aus:

title Boot "El Torito" CD mit Hilfe von memdisk und smart boot manager
root (hd0,2)
kernel /boot/boot_cdrom/memdisk.bin
initrd /boot/boot_cdrom/sbootmgr.dsk
boot 
Die zwei kleinen benötigten Dateien können hier heruntergeladen werden:
memdisk.bin: http://www.lrz-muenchen.de/~bernhard/memdisk.bin
sbootmgr.dsk: http://www.lrz-muenchen.de/~bernhard/sbootmgr.dsk

Erstellen einer grub-bootcd

Grub unterstützt den "no emulation mode" der El Torito Spezifikation. Das bedeutet, das die komplette CD-Rom von Grub aus genutzt werden kann. Ärger und Kompatibilitätsprobleme mit Diskettensimulationen oder Festplattenimages gehören so der Vergangenheit an. Um von einer CD booten zu können benutzt Grub eine spezielle Stage 2 Datei "stage2_eltorito". Das ist eigentlich auch die Einzige Datei die Sie dann wirklich zum booten benötigen, plus eventuell noch eine Konfigurationsdatei menu.lst.

Die Dateien stage1 oder stage2 werden zum booten von einer CD nicht benötigt, da der EL Torido ist ein völlig anderer Bootprozess ist und fast nichts mit dem normalen booten von Festplatte gemeinsam hat. Eine bootbare CD kann mit folgenden Schritten hergestellt werden:

## Ein Arbeitsverzeichnis erstellen:
$ mkdir -p boot_cd/boot/grub
## Die Datei stage2_eltorito kopieren:
cp /usr/lib/grub/i386-pc/stage2_eltorito boot_cd/boot/grub
## Optional: Konfiguration erstellen/kopieren:
vim boot_cd/boot/grub/menu.lst

Jetzt kann der eigentliche Inhalt der CD nach boot_cd/ kopiert werden. Zuletzt wird ein ISO9660-Image erstellt:

mkisofs -R -b boot/grub/stage2_eltorito -no-emul-boot -boot-load-size 4 -boot-info-table -o grub.iso boot_cd

Das erzeugt eine Datei grub.iso, die auf CD gebrannt werden kann. mkisofs hat das ISO schon so modifiziert, das direkt von der CD gebootet werden kann, es ist also kein zweiter Aufruf von Grub nötig. Der Zusatz "-boot-load-size 4" ist für die Kompatibilität mit dem BIOS vieler älterer Maschinen nötig.

GRUB vom Windows-Bootmanager aus starten

Dabei wird Grub nicht in den MBR der Festplatte geschrieben, sondern in den Bootsektor der Partition. Danach kopiert man einfach diesen bootsektor  als Datei auf die Partition, die das Windows enthält. Wenn nicht direkt auf das Windows-Dateisystem geschrieben werden kann, kopiert man den bootsektor einfach auf eine Diskette oder einen USB-Stick und von Dort nach Windows. Nachdem der bootsektor kopiert wurde muss noch der bootmanager von Windows angepasst werden. Angenommen das sich Windows auf der ersten, und Linux auf der dritten Partition der ersten Festplatte befindet, würde sich folgender Ablauf ergeben:

dd if=/dev/hda3 of=./grubboot.bin bs=512 count=1
cp ./linuxboot.bin /media/windows/c/
reboot 

Danach wird Windows gestartet und die Datei C:\boot.ini bearbeitet. Folgendes muss hinzugefügt werden:

c:\grubboot.bin="Grub Bootmanager"

Eventuell muss noch der Timeout verändert werden, damit das Bootmenü von Windows auch angezeigt wird. Danach kann Grub vom Windows-Bootmanager aus gestartet werden

Grub und Raid 1

Festplatten vorbereiten: partitionieren

Beispiel cfdisk:

  Name Flags Part Type FS Type
------------------------------------------------------------| #wird später:
hdc1 Boot Primary Linux raid autodetect | #(md0)-->boot
hdc2 Primary Linux raid autodetect | #(md1)-->root
hdc3 Primary Linux swap / Solaris | #kein raid!!!-->swap
hdc5 Logical Linux raid autodetect | #(md2)-->dienst1
hdc6 Logical Linux raid autodetect | #(md3)-->dienst2

Den Typ auf Linux raid autodetect stellen das ist die Nummer fd Danach den Raid1 erstellen:

mdadm --create /dev/md0 -l 1 -n 2 -x 0 /dev/sda1 missing

# create = erstellen Array
# /dev/md0 = Name des Array’s
# -l 1 = Raid 1
# -n 2 = 2 Geräte im Array
# -x 0 = keine Reservegeräte
# /dev/sda1 = Name 1. Gerät
# missing = 2. Gerät fehlt

Die restlichen Array's werden analog dazu erstellt. Das formatieren ist dann ganz normal, aber nicht mehr auf /dev/sda1 sondern auf /dev/md0, also etwa in dieser Art:

mkfs.ext2 -Lboot /dev/md0
mkfs.ext3 -Lroot /dev/md1
mkswap -Lswap /dev/sda3
#mkswap -Lswap /dev/sdb3 #später
mkfs.ext3 -Ldienst1 /dev/md2
...

Das Daten überspielen ist dann auch ganz normal, entweder mit cp, tar, von Live-CD..., wie Sie mögen.

Wenn Sie vom laufendendem System kopieren müssen: wechseln zu init S, die Verzeichnisse  /proc, /sys (und den mountpoint für das raid!!!) auslassen, die fstab anpassen, grub neu installieren, Verzeichnisse /proc und /sys auf dem raid nur anlegen (mkdir /target/md0/sys;mkdir /target/md0/proc), Fertig. Ich bevorzuge jedoch eine Live-CD (am liebsten grml), mounte die alte und neue Platte und gehe so vor:

mkdir /source
mount /dev/<alte_platte_rootpartition> /source
# analog /boot:
mount /dev/<alte_platte_bootpartition> /source/boot
# und alle anderen alten Partitionen genau so...
#
mkdir -p /target/source
# neues rootdateisystem (md1)
mount /dev/md1 /target/source
# analog /boot: (md0)
mkdir /target/source/boot
mount /dev/md0 target/source/boot
# und alle anderen alten Partitionen genau so...
#
# und dann...
cd /target
tar c -- /source |tar x --
#
# und warten..., oder 2te Konsole aufmachen und dem Spiel zuschauen:
watch -n10 df -h

Nachdem der Rechner vom unvollständigen Raid bootet kann die zweiter Platte eingebaut werden. Sie wird genau wie die erste Platte formatiert, dann muss sie nur noch ins Raid eingehangen werden:

mdadm --manage /dev/md0 --add /dev/sda1

/etc/grub.conf ändern: sollte von der ersten Platte nicht gebootet werden können, automatisch auf der zweiten Platte nach einer Bootmöglichkeit suchen:

# Booten automatisch nach 10 Sekunden
timeout 10
# Standard Booten von hd0
default 0
# Fallback auf hd1, falls hd0 scheitert
fallback 1
# Booten disc 0
kernel (hd0,1)/boot/vmlinuz root=/dev/md0
initrd (hd0,1)/boot/initrd
# Booten disc 1
kernel ((hd1,1)/boot/vmlinuz root=/dev/md0
initrd (hd1,1)/boot/initrd

Damit weiß grub, von welcher Platte/Partition er alternativ booten soll.

Grub auf beide platten installieren (hd0 und hd1):

#grub

grub> root (hd0,0)
grub> setup (hd0)
grub> root (hd1,0)
grub> setup (hd1)
grub> quit
#exit
$exit

wie geht es meinem raid?

cat /proc/mdstat

oder alternativ mdadmd einrichten, dann werden mails verschickt, wenn es dem Raid nicht gut geht.Wenn eine Platte kaputt geht und im laufendem Betrieb gewechselt wird, muss sie wieder ins Raid eingehangen werden. Dabei vorher überprüfen, ob nur noch die funktionierende Platte im RAID ist, neue Platte anstecken, genau wie die alte Platte formatieren und dann:

raidhotadd /dev/md0 /dev/sda1

... analog die anderen Partitionen. Hier wurde die Platte sda ausgetauscht! Es ist also die Partition anzugeben, die neu hinzugefügt wurde!

serielle Konsole

Für alle Rechner, an denen nicht dauerhaft eine Tastatur oder ein Monitor angeschlossen ist (aka Server) kann eine Serielle Konsole helfen, teure Betriebsausfälle zu vermeiden. Es sind jedoch einige Besonderheiten zu beachten, beispielsweise ist kein farbiges Menü möglich. Der Einfachkeit halber hier ein Beispiel:

default         0
timeout         20
# WICHTIG! keine hübschen Farben, das geht nicht.
#color cyan/blue white/blue
#und _DAS_ geht schon gar nicht!
#splashimage (hd0,0)/grub/splash.xpm.gz
#
#serielle Schnittstelle angeben
serial --unit=0 --speed=9600
terminal --timeout=20 serial console

#
title Debian GNU/Linux, kernel 2.6.15.3
root (hd0,0)
kernel /boot/vmlinuz-2.6.15.3
root=/dev/md0 ro console=tty0 console=ttyS0,9600
savedefault
boot

Die /etc/inittab muss noch angepasst werden, damit auch ein Login auf der seriellen Konsole möglich ist:

co:23:respawn:/sbin/getty -L ttyS0 9600 vt102 

/etc/securetty: Auch hier muss die serielle Konsole eingetragen werden, sonst kann sich root nicht anmelden:

/securetty
...
/dev/ttyS0
...

 

Mapping von Festplatten

Mittels mapping kann man vor dem Starten eines Betriebssystem die Festplatten vertauschen (die zweite wird zur ersten und umgekehrt). Dies ist zum Beispiel für Windows nötig, da dies scheinbar immer auf der ersten Festplatte sein will.

Falls Windows zum Beispiel auf der zweiten Festplatte auf der ersten Partion ist sieht der Eintrag wie folgt aus:

title Windows
rootnoverify (hd1,0)
map (hd0) (hd1)
map (hd1) (hd0)
makeactive
chainloader +1

VGA Parameter 

Ich frage mich, warum ich die Tabelle aus mehreren Webseiten zusammensuchen muss, Kerneldoku lese, und
nirgends die komplette Tabelle steht. Naja, mache ich mir eben selbst die Mühe, hier ist sie:

Kernel VESA mode codes: (für VESA mode numbers einfach 0x200 abziehen)

für eine Auflösung von 1024x768 einfach den bootparameter vga=791 oder vga=0x317 nehmen. Nicht alle bootparameter funktionieren überall. Bis 1024x768 sollte jedoch immer gehen. Anmerkung: framebuffer ist sehr langsam! 

Codetabelle für VGA

 

col/res

640x400

640x480

800x600

1024x768

1152x864

1280x1024

1600x1200

 

2 (4bit)

x

x

(770)

x

x

x

x

 

256 (8bit)

0x300 (768)

0x301 (769)

0x303 (771)

0x305 (773)

0x161 (353)

0x307 (775)

0x31C (796)

 

32k (15bit)

x

0x310 (784)

0x313 (787)

0x316 (790)

0x162 (354)

0x319 (793)

0x31D (797)

 

64k (16bit)

x

0x311 (785)

0x314 (788)

0x317 (791)

0x163 (355)

0x31A (794)

0x31E (798)

 

16M (24bit)

x

0x312 (786)

0x315 (789)

0x318 (792)

x

0x31B (795)

0x31F (799)

 

16M (32bit)

x

x

x

x

0x164 (356)

x

x

Fazit:

Grub ist ein ausgewachsener , zuverlässiger und sehr vielseitiger Bootmanager geworden. Zur Zeit entsteht der Nachfolger grub2, der von Grund auf neu geschrieben wurde und erweiterte Möglichkeiten mit sich bringt, modularisierbar ist und auf noch mehr Hardware-Plattformen lauffähig ist.

GRUB 2 targets at the following goals:

  • Scripting support, such as conditionals, loops, variables and functions.
  • Graphical interface.
  • Dynamic loading of modules in order to extend itself at the run time rather than at the build time.
  • Portability for various architectures.
  • Internationalization. This includes support for non-ASCII character code, message catalogs like gettext, fonts, graphics console, and so on.
  • Real memory management, to make GNU GRUB more extensible.
  • Modular, hierarchical, object-oriented framework for file systems, files, devices, drives, terminals, commands, partition tables and OS loaders.
  • Cross-platform installation which allows for installing GRUB from a different architecture.
  • Rescue mode saves unbootable cases. Stage 1.5 was eliminated.
  • Fix design mistakes in GRUB Legacy, which could not be solved for backward-compatibility, such as the way of numbering partitions.

Links

gnu/grub oder grub-legacy genannt (Version 0.9.xx):
http://www.gnu.org/software/grub/grub-legacy.en.html

grub2:
http://www.gnu.org/software/grub/

Bootsplash:
http://ruslug.rutgers.edu/~mcgrof/grub-images/
http://www.bootsplash.org/

Artikel zu Grub:
http://www.pl-berichte.de/t_system/grub-howto.html

alternative Bootloader:
http://freshmeat.net/projects/lilo/

Chain-Loader für grub:
http://bernhard.userweb.mwn.de/grub-chain-cd.html
http://www.lrz-muenchen.de/~bernhard/grub-chain-cd.html (Link geht auf archive.org)

Mapping:
http://f24.parsimony.net/cgi-bin/topic-indent.cgi?Nummer=54930&ThreadNummer=47493

serielle Konsole:
http://www.faqs.org/docs/Linux-HOWTO/Remote-Serial-Console-HOWTO.html

 

Dieser Artikel darf -auch Teilweise-  auf anderen Webseiten frei verwendet, kopiert und zitiert werden, solange ein Link auf die ursprüngliche Seite gesetzt und dieser Hinweis nicht entfernt wird. Bei Publikation in Printmedien ist vor Drucklegung meine Zustimmung nötig. Über Mails mit Ergänzungen/Kritik zu diesen Artikel freue ich mich.
Zuletzt geändert im Oktober 2012, Version 1.4 Lutz Willek lutz.willek(at)belug.de