Zurück | Kapitel 7. Systemadministration | Weiter

## Kapitel 7. Systemadministration

## 7.1 Bootloader

Vor dem Laden des Linux-Kernels wird mit dem so genannten Bootloader ein kleines Programm geladen, das Ihnen eine Auswahl zwischen verschiedenen installierten Betriebssystemen erlaubt. Die unter GNU/Linux gebräuchlichsten Bootloader sind LILO und `grub` auf der i386-Hardware-Architektur. Andere Architekturen verwenden Bootloader wie SILO, MILO oder auch yaboot. Eine kleine Übersicht finden Sie unter http://www.metrowerks.com/MW/Develop/Embedded/Linux/bootloaders.htm.

Mit Debian Sarge (3.1) wurde vom bisher verwendeten Bootloader `lilo` zu `grub` gewechselt.

Auf anderen Hardware-Architekturen wie i386 kommen andere Bootloader wie beispielsweise `elilo` (ia64) oder yaboot (powerpc) zum Einsatz.

### 7.1.1 LILO

Bei der Installation von Debian GNU/Linux auf Ihrem System wurde bis zur Version 3.1 von Debian der Bootloader LILO auf Ihrer Festplatte installiert und so eingerichtet, dass das neue Debian GNU/Linux-System gestartet wird.

#### 7.1.1.1 LILO einrichten

LILO (http://lilo.go.dyndns.org/) ist ein vollständiger Boot-Manager, mit dem nicht nur Linux gebootet werden kann, sondern auch jedes andere System, das sich an die im PC vorherrschenden Konventionen hält. Konfiguriert wird dieser Boot-Manager über die Datei `/etc/lilo.conf`.

Wann immer Sie diese Datei ändern, müssen Sie das Programm `lilo` auf der Kommandozeile als Superuser aufrufen, um die Änderungen tatsächlich zu übernehmen. Es reicht nicht, nur die Konfigurationsdatei zu verändern!

Wichtig in diesem Zusammenhang sind die Zeilen, die mit `image` und `other` anfangen, sowie die jeweils nachfolgende Zeile. Diese Schlüsselwörter dürfen mehrfach verwendet werden. Jede so beginnende Zeile bezeichnet ein System, das von LILO gebootet werden kann. Eine solche Partition kann einen Kernel, eine Root-Partition oder ein anderes, Nicht-Linux-System (other), beinhalten. Die Reihenfolge dieser Systeme ist entscheidend, denn das erste wird automatisch gebootet, wenn die Wartezeit (Konfigurationsoption `delay` in der LILO-Konfiguration) abgelaufen ist und LILO nicht durch Drücken der SHIFT-Taste angehalten wurde. Nach einer Erstinstallation existiert lediglich ein einziger Eintrag , der das aktuelle Debian GNU/Linux-System bootet. Hat der Debian-Installer weitere Betriebssysteme auf anderen Partitionen gefunden, so werden diese in die Bootloader-Konfiguration aufgenommen.

Um ein zweites Linux-System zu booten (z.B. unter Verwendung eines anderen Kernels), müssen Sie die Datei /etc/lilo.conf um folgende Zeilen ergänzen:

    image=/boot/vmlinuz.neu
    label=neu
    append='mcd=0x320,11'
    read-only

Lediglich die ersten beiden Zeilen sind erforderlich. Um die Bedeutung der nachfolgenden Zeilen zu erfahren, lesen Sie bitte die Dokumentation zu LILO.

#### 7.1.1.2 LILO und fremde Betriebssysteme

Um ein anderes System als Linux zu booten, verwenden Sie das Schlüsselwort `other` wie folgt:

    other=/dev/hda1
    label=win

Rufen Sie danach `lilo` als Superuser auf, um LILO neu zu installieren. Bei einem Neustart des Systems können Sie nun am Bootprompt durch Eingeben von „win“ das Betriebssystem auf der Partition `/dev/hda1` starten.

### 7.1.2 GRUB

GRUB (GRand Unified Bootloader, bedeutet in deutscher Sprache „Larve“) http://www.gnu.org/software/grub/grub.html ist ein Bootloader, dessen Aufgabe es ist, nach dem Einschalten des Rechners die weitere Kontrolle an das Betriebssystem (also zunächst den Kernel) zu übergeben. Das Betriebssystem initialisiert dann über die geeigneten Treiber alle weitere Hardware im System. GRUB ist in der Lage, viele verschiedene Betriebssysteme zu laden. Wird ein Betriebssystem nicht direkt von GRUB unterstützt, so kann dieses dennoch von GRUB über einen so genannten „Chain-Bootloader“ geladen werden. Für die wichtigsten Betriebssysteme sind diese bereits im GRUB-Paket enthalten.

Debian verwendet ab der Version 3.1 „Sarge“ GRUB als Standard-Bootloader.

Einer der größten Vorteile von GRUB ist, dass GRUB in der Lage ist, auf das Dateisystem direkt zuzugreifen. Das bedeutet, dass GRUB nicht wissen muss, wo genau der zu ladende Kernel auf der Festplatte liegt. Sie können also jederzeit einen neuen Kernel erzeugen und müssen hinterher nicht noch einmal GRUB im MBR der Festplatte installieren. Es ist ebenfalls nicht notwendig, alle Kernel-Versionen, die sich auf der Festplatte befinden, in die Konfigurationsdatei einzutragen. Sie können mit GRUB jederzeit auf jeden Kernel auf Ihrer Festplatte zugreifen, wenn auch mit ein wenig Tipparbeit. Unterstützte Dateisysteme sind dabei Fat32, Fat16, ext2 und ReiserFS (unter Linux),UFS (BSD) und Minix.

GRUB kann durch die Unterstützung von BIOS-Erweiterungen Partitionen oberhalb der 8 GByte booten und es ist möglich Betriebssysteme von der 2. Festplatte zu starten. Auch kann ein Betriebssystem über das Netzwerk geladen werden.

#### 7.1.2.1 Installation

Die Installation von GRUB unter Debian ist wie üblich mit einem einfachen `apt-get install grub` so gut wie abgeschlossen. Sie sollten danach zunächst das Paket `lilo`, falls installiert, entfernen; dieses wird nicht mehr benötigt.

Um die notwendigen Daten (die Stage-1- und -2-Bootloader) in den Masterboot-Record der Festplatte zu schreiben, benutzen Sie das Programm „grub-install“. Wenn Sie „grub-install“ zunächst ohne Optionen aufrufen, bekommen Sie eine kurze Übersicht der möglichen Optionen angezeigt:

    debian:~# grub-install
    install_device not specified.
    Usage: grub-install [OPTION] install_device
    Install GRUB on your drive.

    -h, --help              print this message and exit
    -v, --version           print the version information and exit
    --root-directory=DIR    install GRUB images under the directory DIR
                            instead of the root directory.
    --grub-shell=FILE       use FILE as the grub shell.
    --force-lba             force GRUB to use LBA mode even for a buggy BIOS.
    --recheck               probe a device map even if it already exists.

    INSTALL_DEVICE can be a GRUB device name or a system device filename.

    Reports bugs to <bug-grub@gnu.org>.

In den meisten Fällen ist es ausreichend, lediglich das gewünschte Device anzugeben, auf dem die Daten installiert werden sollen. Dies wird bei einer IDE-Festplatte meist `/dev/hda` sein.

    surimi:/home/fr# grub-install /dev/hda
    Installation finished. No error reported.
    This is the contents of the device map /boot/grub/device.map.
    Check if this is correct or not. If any of the lines is incorrect,
    fix it and re-run the script `grub-install'.

    (fd0)	/dev/fd0
    (hd0)	/dev/hda
    (hd1)	/dev/hdb

GRUB ist nun funktionsfähig installiert. Sie sollten aber noch ein Menü einrichten, um nicht bei jedem Systemstart die Parameter für das Root-Device und den Kernel von Hand eingeben zu müssen. Kopieren Sie hierzu am besten das mitgelieferte Beispiel an die entsprechende Stelle.

#### 7.1.2.2 Konfiguration

Die Konfiguration von GRUB kann herkömmlich, mittels eines Editors, erfolgen oder aber ganz elegant mittels `update-grub`.

##### 7.1.2.2.1 update-grub

`` ist Bestandteil des GRUB-Debian-Pakets. Existiert noch keine Konfigurationsdatei, so wird diese automatisch erstellt. Als Basis dienen dazu die Kernel- und RAM-Disk-Images im Verzeichnis `/boot/`. Zu jedem vorhandenen Kernel wird jeweils ein Eintrag für den normalen Start sowie für den Start im Single-User-Modus erstellt.

    wasabi:~# update-grub
    Searching for GRUB installation directory ...
    found: /boot/grub .
    Testing for an existing GRUB menu.list file...

    Could not find /boot/grub/menu.lst file. Would you like one
    generated for you? (y/N) y
    Updating /boot/grub/menu.lst ... done

    Please note that configuration parameters for GRUB are stored in
    /boot/grub/menu.lst . You must edit this file in order to set the options
    which GRUB passes to the kernel, as well as the drive which GRUB looks in to
    for the kernel.

    Everything on the line after "kopt=" is passed to the kernel as parameters,
    and "groot=" must be set to the partition(in GRUB terms, such as "(hd0,0)")
    which GRUB will load the kernel from.

    After you have edited /boot/grub/menu.lst , please re-run 'update-grub'.

Natürlich sind Veränderungen an der automatisch erstellten Konfiguration möglich. In der Konfigurationsdatei gibt es einen Abschnitt, der mit

    ### BEGIN AUTOMAGIC KERNELS LIST

beginnt. Diese Einträge können verändert werden; es dürfen aber auf keinen Fall die Kommentarzeichen (`#`) am Anfang jeder Zeile verändert werden! Ein Beispiel: Aus

    # kopt=root=/dev/hda1 ro

wird:

    # kopt=root=/dev/hda1 ro apm=on ide2=0x180,0x386

Die hinzugefügten Parameter werden beim Starten des Kernels übergeben. Nach der Änderung wird nochmals `update-grub` aufgerufen, und die Änderungen werden in die eigentliche Konfiguration am Ende der Datei übernommen.

##### 7.1.2.2.2 grub-reboot

Das Kommando `grub-reboot` erlaubt es einen bestimmten Eintrag aus der GRUB-Konfiguration auszuwählen und, einmalig, zu starten. Dies entspricht der der von LILO bekannten Option `-R`.

Wird dieses Programm auf einem entfernten Rechner ausgeführt, so ist zu beachten dass Einträge die in der GRUB-Konfiguration mit einem Passwort versehen sind, einen Administrator Vor-Ort verlangen der dieses Passwort eingibt. Das Passwort kann nicht als Option auf der Kommandozeile von `grub-reboot` angegeben werden.

##### 7.1.2.2.3 Manuelle Konfiguration

Wenn Sie im Verzeichnis `/boot/grub/` eine Datei `menu.lst` erzeugen, so wird GRUB beim nächsten Start aus dieser Datei ein Menü erstellen, und Sie können dann aus den verschiedenen Einträgen dieses Menüs den gewünschten auswählen. Ein Beispiel für ein solches Menü finden Sie unter `/usr/share/doc/grub/examples/menu.lst`.

    debian:~# cp /usr/share/doc/grub/examples/menu.lst /boot/grub/

In dem Beispiel finden Sie einige Einträge für die verschiedensten Betriebssysteme sowie einige andere Goodies, die Sie mit GRUB anstellen können. Eine funktionsfähige Minimalkonfiguration könnte wie folgt aussehen:

    timeout 10
    default 0

    # For booting Linux
    title  Debian GNU/Linux
    root (hd0,0)
    kernel /vmlinuz root=/dev/hda1

Wenn ein Kernel-Paket verwendet wird, so ist darauf zu achten, dass diese normalerweise eine Init-Ramdisk (initrd) verwenden. Ein entsprechender Eintrag, um eben diese Ramdisk ergänzt, sieht wie folgt aus:

    title   GNU/Linux 2.4.6 SMP
    root    (hd0,6)
    kernel  /vmlinuz-2.4.6-686-smp root=/dev/hda1
    read-only
    initrd  /initrd-2.4.6-686-smp

Dieses Beispiel verwendet einen SMP-Kernel und eine etwas andere Festplattenaufteilung, aber das Prinzip sollte erkennbar sein.

###### 7.1.2.2.3.1 Splashscreen

Die Benutzung von Grafiken innerhalb des Bootloaders GRUB ist eine nicht-offizielle Erweiterung, die noch nicht in den Quellcode von GRUB eingeflossen ist. Trotzdem ist ein optisch ansprechender Hintergrund eine sehr attraktive Funktion, die bereits in viele Linux-Distributionen eingeflossen ist. Zuerst tauchte diese Erweiterung im Jahr 2001 auf einer GRUB-Mailingliste auf. Sie wird endgültig ab der Version 1.0 von GRUB auch im offiziellen Quellcode von GRUB auftauchen.

Unabhängig davon ist im Debian-Paket von GRUB dieser Patch bereits integriert. Es sind aber einige Änderungen an der Konfigurationsdatei notwendig.

Ältere Versionen des Debian-Pakets von GRUB waren noch nicht mit diesem Patch ausgestattet, so dass bei einem Upgrade von GRUB auch unbedingt das Kommando `grub-install` nochmals auszuführen ist.

Weiterhin benötigt man eine Grafikdatei im komprimierten XPM-Format mit maximal 14 Farben und einer Auflösung vom 640x480 Punkten. Diese kann mit folgenden Kommandozeilen aus einer JPEG-Datei erzeugt werden:

    $ convert -colors 14 -geometry 640x480 grubsplash.jpg grubsplash.xpm
    $ gzip grubsplash.xpm

Abschließend ist noch eine Anpassung an der Konfigurationsdatei von GRUB vorzunehmen. Um die Grafikdatei zu laden, muss in der GRUB-Konfigurationsdatei (`/boot/grub/menu.lst`) angegeben werden, wo diese Datei zu finden ist. Da GRUB das Dateisystem direkt lesen kann, muss diese Datei nicht zwingend auf der Partition liegen, auf der auch die GRUB-Konfigurationsdatei zu finden ist. Ein entsprechender Eintrag könnte wie folgt aussehen:

    splashimage=(hd0,5)/boot/grub/grubsplash.xpm.gz

Nach einem Neustart müssen eventuell noch die Farben angepasst werden, so dass der Text lesbar ist.

#### 7.1.2.3 Hardwarebezeichnungen

Vielleicht haben Sie sich schon über die etwas ungewohnten Bezeichnungen der Laufwerke in der Konfigurationsdatei gewundert. GRUB benutzt die vom HURD-Kernel verwendeten Bezeichnungen für Gerätedateien; die Umstellung ist aber für den geübten Linux-Admin nicht sehr groß.

Zunächst ist zu bemerken, dass alle Bezeichnungen für Geräte in Klammern () geschrieben werden. Statt der unter Linux üblichen Buchstaben (z.B. `hda`) werden die einzelnen Festplatten mit fortlaufenden Zahlen ab 0 bezeichnet. `hda` entspricht also `hd0`. Die einzelnen Partitionen einer Festplatte werden wie unter Linux mit Zahlen bezeichnet, allerdings beginnend mit 0 und getrennt mit einem Komma. Somit entspricht `/dev/hda1` also `(hd0,0)`.

Weitere Geräte werden als `(fd0)` (Diskette) und `(sd0)` (SCSI-Festplatte) bezeichnet. Sie können GRUB auch zum Booten über das Netz, über PXE, einsetzen oder das Root-Filesystem per NFS mounten. Die Bezeichnung des Netzwerkdevices lautet `(nd)`.

#### 7.1.2.4 Kommandozeile

GRUB verfügt auch über eine sehr leistungsfähige Kommandozeile. Bedenken Sie dabei, dass zu dieser Zeit noch kein kompletter Kernel oder gar ein komplettes Betriebssystem geladen ist! Sollte es Ihnen nicht gelungen sein, ein funktionsfähiges Menü zu erstellen, so landen Sie automatisch auf der GRUB-Kommandozeile. Sie können hier alle Kommandos, Laufwerksbezeichnungen und Dateinamen mit der TAB-Taste automatisch vervollständigen lassen; dieses Feature kennen Sie sicher schon aus der Shell.

Wenn jedoch ein Menü angezeigt wird, können Sie dieses mit der Taste c verlassen und auf der Kommandozeile zum Beispiel von Hand einen anderen Kernel starten. Fehlerhafte Einträge im Menü lassen sich aus dem Menü mit der Taste e temporär verändern. Vergessen Sie nicht, diese Änderungen später in die Datei `/boot/grub/menu.lst` einzutragen.

Da zu diesem Zeitpunkt (GRUB wurde von der Festplatte gestartet, es ist kein Betriebssystem geladen), noch keine Tastaturbelegung geladen wurde ist zu beachten, dass eine US-Tastenbelegung gilt. Dies kann durch Anpassungen in der GRUB Konfigurationsdatei (`/boot/grub/menu.lst)`) verändert werden. Das GRUB-Kommando `setkey alt neu` erlaubt es Tasten umzubelegen. Um die wichtigsten Tasten einer in Deutschland gebräuchlichen Tastatur richtig zu belegen sind die folgenden Einträge in der GRUB-Konfigurationsdatei notwendig.

    setkey  y z
    setkey 	z y
    setkey 	Y Z
    setkey 	Z Y
    setkey 	underscore question
    setkey 	question underscore
    setkey  ampersand percent
    setkey 	percent caret
    setkey 	equal parenright
    setkey 	semicolon less
    setkey 	parenright parenleft
    setkey 	less numbersign
    setkey 	parenleft asterisk
    setkey 	numbersign backslash
    setkey 	doublequote at
    setkey 	colon greater
    setkey 	plus bracketright
    setkey 	greater bar
    setkey 	minus slash
    setkey 	asterisk braceright
    setkey 	slash ampersand

Wird GRUB von einem laufenden Betriebssystem aus aufgerufen, so gilt die aktuell geladene Tastaturbelegung.

### Testen eines neuen Kernels mit GRUB

GRUB unterstützt eine Option, die es erlaubt, einen Kernel nur ein einziges Mal zu starten, um dann beim folgenden Start wieder einen Default-Kernel zu starten. Dies ist insbesondere nützlich, wenn das System in einem Rechenzentrum untergebracht ist oder am Standort des Systems keine Administratoren Zugriff auf das System haben, die in der Lage sind, einen Fehler beim Starten des Kernels zu beheben. Auch der Bootloader LILO kennt hierzu die Option `-R`.

Wird zur Konfiguration von GRUB das Skript `update-grub` eingesetzt, so sind keine Anpassungen an der Konfigurationsdatei notwendig. Sie müssen lediglich auf der Kommandozeile die GRUB-Shell starten (durch den Aufruf von `grub`). Dort ist die Kommandozeile

    savedefault --default=N --once

einzugeben. `N` steht dabei für die Nummer des Eintrags in der Konfigurationsdatei; die Zählung beginnt bei 0. Beim nächsten Neustart wird nun der gewünschte (neue) Kernel gestartet, beim übernächsten Start der in der GRUB-Konfiguration eingestellte Kernel. Das folgende Skript erspart Ihnen das Eintippen des Kommandos in der GRUB-Shell, Sie müssen lediglich den gewünschten Eintrag angeben.

    #!/bin/sh

    if [ `id -u` != 0 ] ; then
    	echo "you must be root!"
    else

    	if [ ! $1 ] ; then
    		echo "Usage: "$0" kernelnumber"
    	else
    		echo "setting kernel "$1" once"
    		grub --batch <<EOT
    		savedefault --default=$1 --once
    		quit
    EOT

    	fi
    fi

#### 7.1.2.5 Weitere Informationen

Weitere Informationen zu GRUB finden Sie auf Ihrem System unter file:///usr/share/doc/grub-doc/ (hierzu muss auch das Paket `grub-doc` installiert sein) und auf den Projekt-Webseiten zu GRUB.

Zurück |  | Weiter
6.13 Erstellen von eigenen Debian GNU/Linux-CD-ROMs | Zum Anfang | 7.2 Init-Skripte

© 1999-2006 Frank Ronneburg - Dieser Inhalt ist unter einem Creative Commons Namensnennung - Nicht-kommerziell - Keine Bearbeitung Lizenzvertrag lizenziert (creativecommons.org/licenses/by-nc-nd/2.0/de/legalcode).