LPI-Prüfungsvorbereitung LPIC-2

> # LILO Troubleshooting

> Bewertung: 1

> Die Kandidaten sollten in der Lage sein, zwischen Fehlern spezifischer Bootstufen zu unterscheiden und entsprechende Lösungstechniken anzuwenden.

> Schlüsseldateien, Begriffe und Hilfsmittel beinhalten:

> - Kenntnis der Bedeutung von: L, LI, LIL, LILO und scrollenden 010101 Fehlern.
> - Kenntnis der verschiedenen Stellen, an denen LILO installiert sein kann, MBR, /dev/fd0 oder primäre/erweiterte Partition.
> - /boot/boot.b
> - Kenntnis der Signifikanz von /boot/boot.### Dateien

> ### Nochmal die prinzipielle Funktion von LILO

> Der Bootmanager LILO arbeitet nach einem Prinzip, das auf den ersten Blick sehr einfach aussieht, auf den zweiten Blick jedoch einige Fehlermöglichkeiten bietet. Hier soll jetzt nochmal kurz die prinzipielle Funktionsweise erläutert werden, damit die möglichen Fehler auch verstanden werdn können.

> LILO arbeitet eine Konfigurationsdatei (in der Regel `/etc/lilo.conf`) ab, die unter anderem die folgenden Einstellungen enthält:

> - Wohin soll der Bootmanager installiert werden
> - Welche Betriebssysteme sollen gebootet werden können

> Die Angaben, die das Booten von Linux selbst betreffen sind in dieser Datei in einer Form gemacht, die aus der Sicht von Linux logisch erscheinen, nämlich als Dateinamen. Sowohl die Frage, wohin der Bootmanager installiert wird, als auch die Frage, welche Kerneldateien gebootet werden sollen, werden also mit Hilfe von Dateinamen gelöst, entweder als Gerätedateien (wohin) oder als reguläre Dateien (Kernel). Das sieht auf den ersten Blick logisch aus, jedoch hat diese Angabe einen großen Nachteil. Denn während des Bootvorgangs hat das BIOS nicht die Möglichkeit, auf Dateisystemebene auf bestimmte Dateien zuzugreifen. Denn das BIOS kennt weder die Linux-Dateisysteme (ext2/3, Reiserfs,...) noch die Mount-Tabelle (/etc/fstab), die besagt, auf welchem physikalischen Laufwerk sich denn die Dateien tatsächlich befinden.

> Aus diesem Grund muß LILO die Angaben der Dateien in allgemeinverständliche (absolute) Adressen übersetzen, die dann auch vom BIOS verstanden werden. Das aber hat den Nachteil, dass bei einer Veränderung am Dateisystem diese Adressen nicht mehr stimmen müssen, und der Bootmanager also an den angegebenen Stellen die erforderliche Information nicht mehr finden kann.

> Da die üblichen Stellen, auf die der Bootmanager installiert werden kann alle sehr wenig Speicherplatz bieten, legt LILO dort nur ein sehr kleines Programm ab, das dann vom BIOS geladen wird. Dieses kleine Programm läd dann ein weiteres Programm (`boot.b`), das irgendwo auf der Festplatte liegen kann. Erst `boot.b` enthält jetzt die tatsächlichen Informationen, welche Systeme geladen werden können. Sowohl das erste kleine Programm, als auch `boot.b` können aber nicht auf Linux-Dateisysteme zugreifen. Das bedeutet, dass beide Programme mit absoluten Adressen der Sektoren der Platte arbeiten müssen, um später auf die entsprechenden Informationen zugreifen zu können. Die Adressen der zu bootenden Kernel werden in der Datei `boot.map` oder nur `map` abgelegt.

> Wenn nun z.B. ein neuer Kernel erstellt wird, so reicht es eben nicht, die neue Kerneldatei einfach unter dem selben Namen abzuspeichern, wie die alte. Denn die neue Datei wird physikalisch auf einem anderen Sektor liegen und wahrscheinlich auch unterschiedlich gross sein. Damit der Bootmanager weiterhin funktioniert, muss das Programm `lilo` jetzt nochmal aufgerufen werden. Dieser Aufruf erstellt die entsprechenden Dateien mit den physikalischen Adressen neu und sorgt so dafür, dass LILO beim booten die richtigen Adressen kennt.

> Jedesmal, wenn `lilo` den Bootsektor mit neuen Informationen überschreibt (also eigentlich jedesmal, wenn lilo aufgerufen wird), legt es eine Backup-Datei an, in der der alte Bootsektor gesichert wird. Diese Datei trägt den Namen `/boot/boot.NNNn` wobei `NNNN` die hexadezimale Nummer der Partition bzw. der Platte ist.Das wäre z.B. 0300 für /dev/hda oder 0800 für /dev/sda. Sollen diese Backups zuückgespielt werden genügt der Befehl

>       dd if=/boot/boot.0300 of=/dev/hda bs=446 count=1

> oder entsprechend

>       dd if=/boot/boot.0800 of=/dev/sda bs=446 count=1

> und der alte Bootsektor ist wieder hergestellt.

> ### Mögliche Speicherorte für LILO

> In der Datei `/etc/lilo.conf` wird eingetragen, wohin LILO den Grundeintrag schreiben soll. Der Grundeintrag ist das kleine Programm, das vom BIOS geladen werden soll und das dann die Aufgabe hat, die Datei `boot.b` zu laden. Dieser Eintrag in `/etc/lilo.conf` wird mit der Direktive `boot =` erstellt. Die folgenden Möglichkeiten existieren:

> boot = /dev/fd0
>   Der Bootloader wird auf den Bootsektor einer Diskette geschrieben. Zum Booten von Linux muß dann immer diese Diskette eingelegt sein. Das darf nicht verwechselt werden mit der Erstellung einer echten Bootdiskette. Nur der Bootloader liegt auf der Diskette, die Datei `boot.b` muß nicht zwangsläufig auch auf dieser Diskette liegen. Auch die zu bootenden Kernel können an beliebigen Stellen der Festplatte liegen.
> boot = /dev/hdxn
>   Eine beliebige Plattenpartition kann hier angegeben werden. Statt `hd...` (IDE) kann selbstverständlich auch `sd...` (SCSI) Verwendung finden. Diese Möglichkeit ist dann in Betracht zu ziehen, wenn bereits ein Bootmanager eines anderen Betriebssystems (WinNT, OS/2) als Hauptbootmanager verwendet wird. Dieser Hauptbootmanager bekommt dann die Information, dass Linux auf der entsprechenden Partition zu finden ist. Auf dem Bootsektor dieser Partition findet er dann den Bootloader von Linux.
> boot = /dev/hda
>   Der Master-Boot-Record der ersten Festplatte wird als Ziel für den Bootloader angegeben. Das wird immer dann benutzt, wenn LILO der Haupt-Bootmanager sein soll. Zu beachten ist hier, dass der Angabe die Partitionsnummer fehlt. Es geht ja eben nicht um eine bestimmte Partition, sondern um die physikalische Platte selbst.

> ### LILO Fehlermeldungen

> Das Wort LILO wird während des Bootvorganges Zeichen für Zeichen auf den Schirm geschrieben. Falls es zu einem Fehler während des Bootmanager-Vorgangs kommt, so kann dieser Fehler anhand der Tatsache eingekreist werden, wieviele Buchstaben schon geschrieben wurden. Die folgenden Schritte werden jeweils durchgeführt, wenn ein Buchstabe geschrieben wurde:

> nichts
>   Kein Teil von Lilo wurde geladen. Entweder ist lilo nicht installiert oder er sitzt auf einem Bootsektor einer Partition, die nicht aktiviert ist.
> LFehlernummer
>   Der erste Teil des Bootloaders wurde lokalisiert und geladen, aber er kann den zweiten Teil nicht laden. Die zweistellige Fehlernummer gibt genauere Hinweise auf den Grund an. In der Regel deutet dieser Fehler auf ein Problem mit der Plattenoberfläche oder falschen Plattenparametern im BIOS hin. Die wichtigsten Fehlernummern finden Sie etwas weiter unten.
> LI
>   Der erste Teil des Bootloaders hat den zweiten Teil geladen, kann ihn aber nicht ausführen. Das kann daran liegen, dass es entweder eine Inkompatibilität mit der Plattengeometrie gibt, oder die Datei /boot/boot.b wurde von der Stelle bewegt, an der sie lag, als lilo installiert (aufgerufen) wurde.
> LIL
>   Der zweite Teil des Bootloaders wurde gestartet, kann aber die Beschreibungstabelle des map-files nicht laden. Typischerweise ein Medien-Fehler (Oberflächenbeschädigung) oder unpassende Plattengeometrie.
> LIL?
>   Der zweite Teil des Bootloaders wurde an eine falsche Adresse geladen. Auch hier ist die wahrscheinlichste Ursache, dass die Datei /boot/boot.b verändert oder bewegt wurde.
> LIL-
>   Die Beschreibngstabelle ist beschädigt. Entweder ein Oberflächenfehler, oder die Datei /boot/map wurde verändert oder bewegt.
> LILO
>   Alle Teile von lilo wurden ordnungsgemäß geladen.

> In jedem Fall ist bei einem Fehler immer der erste Versuch, lilo nochmal aufzurufen, nachdem das System über eine andere Technik (Bootdiskette, BootCD) gebootet wurde. War es der erste Versuch, der gescheitert ist, also hat lilo noch nie vorher funktioniert, so sollte davor aber nochmal die Datei /etc/lilo.conf überprüft werden.

> ### Fehlernummern und ihre Bedeutung

> 0x00
>   Interner Fehler - Dieser Fehler wird von der Sektor-Suchroutine des Bootloaders ausgelöst, wenn er auf eine interne Inkonsistenz stößt. In der Regel durch fehlerhafte Dateien ausgelöst. Meist durch erneuten Aufruf des `lilo` Befehls lösbar. Eine andere Möglichkeit ist der versuchte Zugriff auf Sektoren oberhalb des 1024. Zylinders bei gleichzeitiger Nutzung der LINEAR Option.
> 0x01
>   Illegales Kommando - Ausgelöst durch den versuchten Zugriff auf ein Gerät, das nicht vom BIOS unterstützt wird.
> 0x02
>   Adresse nicht gefunden - Normalerweise ein Problem mit der Plattenoberfläche. `lilo` erneut ausführen und nochmal probieren.
> 0x03
>   Schreibgeschütztes Laufwerk - Passiert nicht beim Booten, sondern nur bei schreibendem Zugriff.
> 0x04
>   Sektor nicht gefunden - Das ist typischerweise ein Fehler, der durch eine fehlerhafte Plattengeometrie hervorgerufen wurde. Bei großen Platten kann die Verwendung von LBA32 oder LINEAR helfen oder die Option COMPACT sollte deaktiviert werden.
> 0x07
>   Fehlerhafte Initialisierung - Das BIOS konnte den Plattencontroler nicht initialisieren. Einstellungen im CMOS-Setup überprüfen.
> 0x08
>   DMA Überlauf - Sollte nicht vorkommen. Nochmal versuchen zu booten.
> 0x0C
>   Fehlerhaftes Medium - Fehler auf der Oberfläche. LILO erneut installieren und nochmal probieren.
> 0x10
>   CRC Fehler - Schwerwiegender Oberflächenfehler. LILO erneut installieren und nochmal probieren. Wenn das nicht geht - Platte austauschen.
> 0x11
>   ECC Korrektur erfolgreich - Ein Lesefehler trat auf, wurde aber korrigiert. Erneut booten.
> 0x20
>   Kontroller Fehler
> 0x80
>   Platten Timeout - Die Platte dreht sich nicht.

> [ Zurück zur Startseite LPI 201 ] [ Zurück zur LPI-Seite ] [ Zurück zur Hauptseite von Linux-Praxis ] [ Guestbook ] [ Kontakt ]

> Diese und die darunterliegenden Seiten wurden erstellt von F. Kalhammer

> © 2001 by F.Kalhammer - all rights reserved.