next up previous contents index
Next: Die Vorgänge bei Up: Das System starten Previous: Von Diskette booten

Von Festplatte booten

  Beim Booten von Festplatte ist der Vorgang etwas komplizierter. Die Festplatten für PC können in maximal vier primäre Partitionen unterteilt werden, auf denen jeweils ein anderes Betriebssystem installiert sein kann. Diese Partitionen sind in einer Partitionstabelle beschrieben, die im ersten Block der Festplatte enthalten ist. Um ein bestimmtes Betriebssystem von einer der Partitionen laden zu können, befindet sich in diesem Block auch der Primary-Boot-Loader, der Block als Ganzes wird als Master-Boot-Record (MBR) bezeichnet.

Weil die unterschiedlichen Ansprüche der verschiedenen für PC denkbaren Betriebssysteme nicht mit einem einzigen Primary-Boot-Loader erfüllt werden können, lädt dieser einen betriebssystemspezifischen Secondary-Boot-Loader vom ersten Block einer Partition.gif Mit Ausnahme einer erweiterten Partition enthalten die primären Partitionen selbst keine Partitionstabellen. Trotzdem wird bei allen Dateisystemen der erste Block für den Boot-Loader freigehalten.

Der erste Block reicht natürlich nicht für das komplette Betriebssystem, die darauffolgenden Blöcke der Linux-Dateisysteme sind für spezielle Verwaltungsdaten vorgesehen, können also den Kernel auch nicht aufnehmen. Allein das Xia-Dateisystem kann so eingerichtet werden, daß die ersten Blöcke der Partition für das Betriebssystem frei bleiben. Mit dem mkboot-Programm (-> Seite gif) von Frank Xia kann auf so einer primären Partition ein bootfähiger Linux-Kernel installiert werden.

LILO

   Für beliebige Linux-Partitionen geeignet ist der Generic boot loader for Linux, kurz LILO von Werner Almesberger. Dessen Vielseitigkeit beruht vor allem darauf, daß er mit einer als map bezeichneten Tabelle das Kernel-Image und andere Daten von beliebigen Plattenblöcken, sogar von beliebigen Festplatten holen kann. Einzige Voraussetzung ist, daß der Bootsektor von LILO auf einer primären Partition der ersten Festplatte installiert werden kann.gif

Hier soll nur die Verwendung von LILO zum Booten von einer primären Linux-Partition auf der ersten Festplatte /dev/hda beschrieben werden. Für Einzelheiten und Spezialfragen (beispielsweise wenn Sie von einer SCSI-Festplatte booten wollen) sollten Sie sich die ausgezeichnete Dokumentation durchlesen, die zusammen mit den LILO-Sourcen verteilt wird.

Installation

In den meisten Linux-Distributionen ist eine installationsfähige Version des LILO-Pakets enthalten. Meistens werden allerdings nicht die Quelltexte verteilt, und -- das ist ein besonderer Nachteil -- die Dokumentation im LaTeX -Format fehlt.

Je nachdem, ob sich die Distributoren Ihres Linux-Paketes an die Empfehlungen des neuen File-System-Standards halten oder nicht, befinden sich die Dateien des LILO-Pakets zusammen im Verzeichnis /etc/lilo (alte Konfiguration), oder sie sind ihren Funktionen entsprechend auf die Verzeichnisse /boot, /sbin und /etc aufgeteilt.

Um Ihre Linux-Partition bootfähig zu machen, müssen Sie die LILO-Konfigurationsdatei /etc/lilo.conf editieren/erstellen und das lilo-Kommando zur Installation des Boot-Loaders und der Map aufrufen.gif

Das folgende Beispiel zeigt eine solche Konfigurationsdatei für ein System, bei dem auf der ersten Partition einer AT-Bus-Festplatte ( /dev/hda1) MS-DOS und auf der zweiten (primären) Partition ( dev/hda2) Linux installiert ist.

boot=/dev/hda2
install=/boot/boot.b
map=/boot/map
vga=3
delay=5
image=/vmlinuz
        label=linux
        root=/dev/hda2
        read-only
other=/dev/hda1
        label=mess-dos
        table=/dev/hda
In der Regel sollte es ausreichen, die Bezeichnungen der Gerätedateien sowie den Namen des Kernel-Images dem konkreten System anzupassen. Sie müssen darauf achten, daß als Bootdevice nicht die rohe Festplatte angegeben wird ( boot=/dev/hda).

Bevor Sie den Boot-Loader der Konfiguration entsprechend durch Aufruf des lilo-Kommandos installieren, sollten Sie auf jeden Fall eine Sicherungskopie Ihres alten Bootsektors machen, damit Sie ihn nötigenfalls restaurieren können. Das folgende Beispiel zeigt, wie Sie den Bootsektor von /dev/hda2 in die Datei /boot/bootsector schreiben können:

# dd if=/dev/hda2 of=/boot/bootsector bs=512 count=1
1+0 records in
1+0 records out
# _
Das Input-File muß mit dem bei der boot-Variablen in der Konfigurationsdatei angegebenen Device übereinstimmen. Sie sollten die Sicherungsdatei außerdem auf einer Diskette speichern.

Konfigurationsdatei

Das oben gezeigte Beispiel kann meistens mit leichten Veränderungen übernommen werden. Die folgende Liste erklärt Ihnen die Funktion der einzelnen Einträge in der oben gezeigten Konfigurationsdatei. Der LILO-Boot-Loader erlaubt noch wesentlich mehr Einstellungen. Eine vollständige Liste finden Sie im Dokument von W. Almesberger.

Die Konfigurationsdatei enthält Schalter und Variable. Variablen wird durch eine Gleichung ein Wert zugewiesen.

boot= Partition
Diese Variable bestimmt die Partition, auf die der Boot-Loader geschrieben werden soll. Wenn diese Angabe in der Konfigurationsdatei fehlt, wird der Bootsektor auf die aktuelle Rootpartition geschrieben. Um mit dem normalen Master-Boot-Record (MBR) vom MS-DOS davon booten zu können, muß es sich um eine primäre Partition der ersten Festplatte handeln. Für kompliziertere Systemkonstellationen gibt es die Möglichkeit, den Boot-Loader auf dem Master-Boot-Record oder auf der erweiterten (primären) Partition zu installieren. Bevor Sie sich für eine dieser Varianten entscheiden, sollten Sie die Dokumentation zum LILO-Paket sorgfältig durchlesen.
install= Bootsektor
Der Bootsektor wird aus der angegebenen Datei gelesen. Falls diese Angabe fehlt, wird der bestehende Bootsektor verändert.
delay= Zehntelsekunden
Mit der delay-Variablen kann die Zeit eingestellt werden, die LILO auf eine der unten beschriebenen Tasten zur Ausgabe des Boot-Prompts wartet. Wenn diese Zeit verstrichen ist, wird automatisch das erste in der Konfigurationsdatei definierte Kernelimage geladen.
prompt
Mit diesem Schalter bringt LILO immer den Bootprompt auf den Bildschirm, auch wenn keine der unten beschriebenen Tasten gedrückt wurde.
timeout= Zehntelsekunden
Mit dieser Variablen wird die Zeit eingestellt, die LILO nach dem Bootprompt auf eine Eingabe der Systemverwalterin wartet, bevor es zum automatischen Laden der ersten konfigurierten Kerneldatei zurückkehrt. Wenn die Variable timeout nicht gesetzt ist, wartet LILO endlos auf eine Eingabe.
image= Kerneldatei
Mit dem image Eintrag wird eine Kerneldatei (mit absolutem Pfad auf der Rootpartition) angegeben. Dieser Eintrag leitet einen speziellen Teil in der Konfigurationsdatei ein. Alle Einträge bis zum nächsten image oder bis zum Dateiende gelten nur für diese Kerneldatei. Die folgenden kernelspezifischen Einstellungen können vorgenommen werden:
label = Name
Zur Auswahl einer von mehreren konfigurierten Kerneldateien wird nach dem Bootprompt (siehe unten) entweder die Kerneldatei oder der unter label angegebene Name angegeben. Mit Hilfe vom label kann ein image auch mehr als einmal benutzt werden. LILO speichert die Konfiguration im Bootsektor, nicht in der Kerneldatei.
vga = Videomodus
Der Kernel wird in dem angegebenen Textmodus gestartet. Die Modi sind bei dem rdev-Kommando auf Seite gif beschrieben. Wenn dieser Eintrag in der Konfigurationsdatei fehlt, wird der in der Kerneldatei gespeicherte Videomodus beibehalten.
ramdisk = Kilobytes
Es wird eine RAM-Disk in der angegebenen Größe eingerichtet, unabhängig davon, ob dies beim Übersetzen des Kernels so bestimmt wurde. Siehe auch beim rdev-Kommando auf Seite gif.
root = Rootfilesystem
Die Variable root enthält den Namen der Gerätedatei für die Festplattenpartition mit dem Rootfilesystem. Wenn anstelle einer Gerätedatei das Wort current angegeben ist, wird die aktuelle Rootpartition angenommen. Wenn dieser Eintrag ganz fehlt, wird die beim Übersetzen des Kernels bestimmte Rootpartition beibehalten.

Wenn die speziellen Parameter für alle Konfigurationen gleich sind, können die entsprechenden Einträge auch im allgemeinen Teil vorgenommen werden.

Sie können mit LILO auch ein anderes Betriebssystem, beispielsweise MS-DOS, booten. Dazu dienen die folgenden zusätzlichen Variablen:

other = Device
Die Variable other leitet einen speziellen Teil der Konfigurationsdatei ein, wie image. Die hier angegebene Gerätedatei muß den Secondary-Boot-Loader für das andere Betriebssystem enthalten. Beispielsweise muß beim MS-DOS hier die primäre DOS-Partition angegeben werden.
loader = chain_loader
Innerhalb des von other eingeleiteten speziellen Teils wird mit der Variablen loader ein spezielles Programm bestimmt, das bestimmte Vorbereitungen zum Umschalten der Betriebssysteme treffen kann. Das Standardprogramm (Voreinstellung) chain.b übergibt einfach die Kontrolle an den vom LILO-Secondary-Boot-Loader geladenen Secondary-Boot-Loader des fremden Betriebssystems.
table = Device
In der Variablen table kann die Gerätedatei angegeben werden, aus der die Partitionstabelle für das fremde Betriebssystem gelesen werden kann. Im Fall von MS-DOS kann diese Angabe unterbleiben, weil eine Art interner Partitionstabelle im DOS-Dateisystem gespeichert ist.

Der LILO-Prompt

  Wenn beim Booten eine der Tasten ALT, CONTROL, SHIFT gedrückt ist, oder die CAPS-LOCK oder SCROLL-LOCK Schalter gesetzt sind, bringt LILO einen Prompt auf den Bildschirm und wartet die in der Konfigurationsdatei unter timeout bestimmte Zeitspanne auf eine Kommandozeile.

Auf dieser Kommandozeile können zuerst einmal Parameter an den Boot-Loader übergeben werden. Zusätzlich kann der Boot-Loader aber auch einen Teil der Kommandozeile an den Kernel weitergeben.  

Als Kommandozeilenargument für den Boot-Loader selbst kommt vor allem der als label bezeichnete Name des zu ladenden Kernel-Image bzw. das label eines anderen Betriebssystems in Frage. Im Beispiel oben sind das linux oder mess-dos. Eine Liste aller möglichen Labels können Sie durch Eingabe eines TAB oder eines Unterstrichs (das ist auf der US-Tastatur das Fragezeichen) ausgeben lassen.

Alle weiteren Kommandozeilenparameter werden an den Linux-Kernel weitergegeben. Dazu muß natürlich als erstes Kommandozeilenargument das Label für ein gültiges Kernel-Image angegeben werden.

Eine erste Gruppe von Argumenten überlagert die im Kernel-Makefile bzw. mit dem rdev-Kommando eingestellten Parameter.

root= Root-Partition
veranlaßt den Kernel, die angegebene Root-Partition zu mounten.
read-only (ro)
veranlaßt den Kernel, die Root-Partition Read-Only zu mounten.
rw
veranlaßt den Kernel, die Root-Partition mit Schreibberechtigung zu mounten, auch wenn in der Kerneldatei oder in der LILO-Konfigurationsdatei etwas anderes festgelegt ist.
vga= Modus
stellt den Videomodus für den Textbildschirm ein (die Modi entsprechen den beim rdev-Kommando auf S. gif beschriebenen).

Eine andere Gruppe von Argumenten dient der Konfiguration bestimmter Gerätetreiber. Wenn eines dieser Argumente auf der Kommandozeile auftaucht, wird die Setup-Funktion für den entsprechenden Gerätetreiber mit den hier angegebenen Parametern aufgerufen. Besonders für die generischen Kernel-Images auf den Bootdisketten der verschiedenen Distributionen ist dies oft die einzige Möglichkeit, eine vom Standard abweichende Konfiguration zum Laufen zu bringen. Die mit der Setup-Funktion dem Gerätetreiber übergebenen Parameter verdecken bei der anschließenden Initialisierung des Gerätes die Defaultwerte aus der Kerneldatei. 

Allgemeine Einstellungen:

reserve= Adresse, Größe[, Adresse, Größe...]
markiert bis zu fünf Adreßbereiche für IO-Ports als belegt und schützt sie so vor dem Zugriff beliebiger Gerätetreiber beim Auto-Probing. Diese Reservierung ist beispielsweise für den IO-Bereich der NE2000-Ethernet-Karten sinnvoll, die nach einem unkontrollierten Zugriff durch einen wilden Gerätetreiber den Rechner blockieren können.
ramdisk= Größe
veranlaßt den Kernel eine RAM-Disk der in Kilobytes angegeben Größe einzurichten.
zfs= Startblock
übergibt dem Kernel die Blocknummer, ab der das komprimierte Root-Dateisystem auf dem Bootmedium liegt. Dies ermöglicht es, bis zu 3 MB große Root- Dateisysteme und einen Bootkernel auf einer einzigen Diskette unterzubringen. Der Defaultwert beträgt 384.
bmouse= IRQ
konfiguriert den Logitech-Busmaustreiber auf den angegebenen Interrupt.

Diskettenlaufwerke:
floppy= Option
teilt dem Diskettentreiber die Art und Anzahl der vorhandenen Diskettenkontroller bzw. Laufwerke mit. Will man mehrere Optionen an den Diskettentreiber übergeben, so muß dieser Boot-Parameter mehrfach angegeben werden. Mögliche Optionen sind thinkpadfür Besitzer eines IBM Thinkpads, two_fdc'' wenn man zwei Diskettenkontroller verwenden will und äll_drives'', wenn man an einem Diskettenkontroller mehr als die zwei per Default vorgesehenen Laufwerke betreiben möchte. Die Option no_unexpected_interrupts'' hilft einem bei manchen Laptops die harmlosen, aber nervtötenden fd0: unexpected interruptMeldungen abzustellen. Es gibt eine Reihe von weiteren Optionen für den Diskettentreiber, die bei Bedarf der Datei ''README.fdïn den Kernelsourcen entnommen werden können.

Netzwerkkarten:

ether= irq, IO-Port, Mem-Start, Mem-End, Device
konfiguriert den allgemeinen Treiber für die Ethernet-Karten mit den angegebenen Parametern. Die Werte für den Beginn und das Ende des Shared-Memory-Bereiches können für WD-80x3-Karten wichtig sein, allerdings werden diese Werte in der Regel automatisch korrekt erkannt, wenn sie hier mit 0 angegeben werden. Das Device wird im Normalfall ëth0ßein.

Festplattenkontroller:

xd= Typ, IRQ, IO-Port, DMA
konfiguriert den Gerätetreiber für den 8-Bit- XT-Festplattencontroller
hd= Cyl, Head, Sect
konfiguriert den Festplattentreiber für die normale (AT-Bus-) Festplatte /dev/hda mit den angegebenen Parametern.
hd x= Cyl, Head, Sect, WPCOM, IRQ
konfiguriert den (E)IDE Treiber für den Betrieb von (E)IDE-Festplatten und ATAPI CD-ROM-Laufwerken wie z.B. NEC, Sony, Mitsumi und Versa. der ''hd x='' Parameter kann für jede Festplatte und jedes CD-ROM-Laufwerk einzeln angegeben werden. Das erste Gerät wird dabei mit ''hda'', das zweite mit ''hdbüsw. bezeichnet. Die Angaben ''wpcomünd ïrqßind optional und mit ''hd x=noprobe'' können einzelne Laufwerke vom Treiber ausgeschlossen werden. Die ''wpcomAngabe wird allerdings vom Treiber ignoriert und stattdessen die Anzahl der Zylinder eingetragen.

SCSI-Kontroller:

st0x= IO-Port, IRQ
konfiguriert die Seagate st01/st02 SCSI Host-Adapter mit den angegebenen Parametern.
tmc8xx= IO-Port, IRQ
konfiguriert die Future Domain SCSI Host-Adapter TMC-885 und TMC-950.
t128= IO-Port, IRQ
konfiguriert die SCSI Host-Adapter T128/T128F/T228 von Trantor.
ncr5380= IO-Port, IRQ, DMA
konfiguriert den generischen SCSI-Treiber für Host-Adapter mit Chips der NCR 5380 Familie.
ncr53c400= IO-Port, IRQ
konfiguriert den Treiber für NCR 53c400 Kontroller.
aha152x= IO-Port, IRQ, SCSI-ID, Reconnect
konfiguriert den Gerätetreiber für den Adaptec 1520/1522 SCSI Host-Adapter.
aha1542= IO-Port[, Buson|Busoff,[, DMA-Speed]]
konfiguriert den Gerätetreiber für den Adaptec 1542 B/C(F) SCSI Host-Adapter.
aha274x= Option
konfiguriert den Gerätetreiber für den Adaptec 274x(EISA) und 284x(VL-Bus) SCSI Host-Adapter. Als Option wird im Moment nur das Schlüsselwort ëxtendedäusgewertet, das die erweiterte Übersetzung der Zylinderanzahl bei Festplatten mit mehr als 1024 Zylindern erlaubt.
buslogic= IO-Port
konfiguriert die meisten Kontroller der Familie der Buslogic SCSI-Kontroller. Sicher unterstützt werden die Typen 445S und 747S.
pas16= IO-Port,bit IRQ
konfiguriert den Pro Audio Spektrum 16 SCSI-Kontroller. Gibt man für den Interrupt den Wert 255 an, so wird der Kontroller ohne Interrupt betrieben. Es ist nicht möglich den SCSI-Kontroller über den selben Interrupt wie die Soundkarte zu betreiben.
max_scsi_luns= N
gibt dem SCSI-Kontroller an, wieviele SCSI- Geräte maximal am SCSI-Bus angesprochen werden können. N muß zwischen eins und acht liegen.

SCSI-Bandlaufwerke:

st= Puffergröße [, Schwelle [, MaxPuffer ]]
initialisiert den Treiber für SCSI Bandlaufwerke. Die jedem Bandlaufwerk zugeteilte Puffergröße und der Schwellwert beim asynchronen Schreiben werden in Kilobyte angegeben. Wenn mehr als zwei Bandlaufwerke an einem Rechner betrieben werden sollen, kann MaxPuffer entsprechend hochgesetzt werden.

CD-ROM-Laufwerke:

mcd= IO-Port, IRQ
konfiguriert den Treiber für Mitsumi CD-ROM-Laufwerke (nicht FX-Serie!). Die Grundeinstellung ist ''0x300,10''.
cdu31a= IO-Port, IRQ[, PAS]
Die Angabe ''PASïst notwendig, wenn das CD-ROM über die Pro Audio Spektrum- Karte angeschlossen ist. Wird kein Interrupt für das Laufwerk verwendet, so muß der Wert 0 für IRQ angegeben werden. Die Grundeinstellung ist ''0x340,0item[sbpcd= IO-Port,{ SoundBlaster|LaserMate|SPEA}] konfiguriert den Treiber für den Soundblaster Pro Multi-CD-Kontroller. Dieser Treiber sucht die ihm bekannten Laufwerke auf mehreren Ports, was sich anhand der Bootmeldungen mitverfolgen läßt.
sonycd535= IO-Port, IRQ
konfiguriert den Treiber für das Sony 535 CD-ROM-Laufwerk. Verwendet das Laufwerk keinen Interrupt, dann muß ''0äls Interrupt übergeben werden. Die Grundeinstellung des Treiber ist ''0x340,0''.
aztcd= IO-Port, 0x79
konfiguriert den Aztech-CD-ROM- Treiber. Dieser erkennt Aztech, Orchid und Wearnes Laufwerke. Die Grundeinstellung ist ''0x320''.
lmscd= IO-Port, IRQ
konfiguriert den LMS/Philips-CD-ROM-Treiber. Die Grundeinstellung ist ''0x340,5''.
hd x=cdrom
teilt dem EIDE-Treiber mit, daß es sich bei dem Gerät ''/dev/hd xnicht um eine Festplatte, sondern um ein ATAPI CD-ROM-Laufwerk handelt.

Soundtreiber:

sound= Zahl[, Zahl...]
konfiguriert den oder die Soundkarten. Die

Zahl wird in der Form ''0xTaaaIdängegeben, wobei ''Tfür den Typ der Karte steht (1=FM Synth, 2=Soundblaster, 3=ProAudioSpektrum16, 4=Gravis Ultrasound 5=MPU-401, 6=Soundblaster 16, 7=Soundblaster 16 Midi). äaaßteht für die hexadezimale IO-Adresse. I für den Interrupt (hexadezimal!) und d für den DMA-Kanal. Man kann dem Treiber auch mehrere Angaben gleichzeitig machen. Diese müssen dann durch ein Komma getrennt werden.Der Bootparameter könnte also folgendermaßen aussehen: ßound=222071,0x138800''.

Die folgenden beiden Kommandozeilenargumente schalten bestimmte Kernelfunktionen an bzw. ab:
debug
schaltet die Ausgaberoutine für Kernelmeldungen in den Debug-Modus.
no387
schaltet den mathematischen Koprozessor ab. Damit der Kernel trotzdem startet, müssen die Routinen der Mathe-Emulation in den Kernel eingebunden sein.
no-hlt
schaltet den Test der ''hltOperation des Prozessors ab. Dieser Test führt bei einigen 386 Prozessoren dazu, daß der Kern an dieser Stelle hängenbleibt.

Außer den hier aufgeführten Argumenten können noch weitere Optionen (Schalter) angegeben werden, die der Kernel an das init-Programm weiterreicht. Beispielsweise verstehen alle init Programme das Argument single als Befehl, das System im Einbenutzermodus zu starten.

Darüberhinaus können Gleichungen zur Definition von Umgebungsvariablen angegeben werden, die automatisch in der Prozeßumgebung aller laufenden Programme auftauchen.

LILO deinstallieren

Bei einem Programm wie dem Linux-Boot-Loader, das sich buchstäblich am Rand des Geltungsbereichs der Betriebssysteme aufhält, taucht gelegentlich die Frage nach der Entfernung (Deinstallation) auf.

Wenn Sie den Empfehlungen zur Installation von LILO gefolgt sind und eine Sicherheitskopie des Bootsektors angelegt haben, bevor Sie ihn mit dem Boot-Loader überschrieben haben, können Sie einfach diese Sicherheitskopie wieder zurückschreiben. Wenn LILO beispielsweise auf der Partition /dev/hda2 installiert ist und die gesicherten Daten in /boot/bootsector liegen, schreibt das folgende Beispiel den Bootsektor zurück:

# dd if=/boot/bootsector of=/dev/hda2 bs=512 count=1
1+0 records in
1+0 records out
# _
Im Fall der primären Partition /dev/hda2 ist die Rekonstruktion nicht unbedingt notwendig, beispielsweise führt das Löschen der Partition auch zum erwünschten Ergebnis. Wenn der Boot-Loader aus Versehen oder absichtlich im Master-Boot-Record installiert wurde, kann es zu Problemen kommen. Beim Löschen der Partitionen wird im MBR nur die Partitionstabelle, nicht aber der Primary-Boot-Loader gelöscht. Wenn Sie keine Sicherheitskopie des MBR angelegt haben, können Sie den Primary-Boot-Loader vom MS-DOS 5.0 mit dem folgenden (DOS-) Kommando restaurieren:
A:\ >fdisk /mbr
A:\ >
Das mkboot-Kommando (-> S. gif) bietet eine ähnliche Option.



next up previous contents index
Next: Die Vorgänge bei Up: Das System starten Previous: Von Diskette booten



Linux Anwenderhandbuch -- Copyright 1993, 1994, 1995 S. Hetze, D. Hohndel, O. Kirch, M. Müller