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:

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/

grub2:
http://www.gnu.org/software/grub/grub-2.en.html

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://www.lrz-muenchen.de/~bernhard/grub-chain-cd.html

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 Mai 2007, Version 1.3 Lutz Willek lutz.willek(at)belug.de