15%

15% auf alle Hosting-Dienste sparen

Teste deine Fähigkeiten und erhalte Rabatt auf jeden Hosting-Plan

Benutze den Code:

Skills
Anfangen
08.10.2024

Was ist LILO (Linux Loader)? Architektur, Konfiguration und Vergleich mit GRUB

LILO (Linux Loader) ist ein veralteter Bootloader für Linux und Unix-ähnliche Betriebssysteme, der den Kernel direkt von einer zum Installationszeitpunkt gespeicherten Festplattenadresse lädt, ohne während der Bootsequenz Unterstützung durch Dateisystemtreiber zu benötigen. Er arbeitet in der Pre-OS-Phase — entweder vom Master Boot Record (MBR) oder einem Partitions-Bootsektor — und übergibt die CPU-Kontrolle an den Linux-Kernel, nachdem dieser in den Speicher geladen wurde.

Für die meisten Produktionssysteme wurde LILO heute durch GRUB2 abgelöst. Das Verständnis seiner internen Funktionsweise bleibt jedoch für Ingenieure unerlässlich, die Legacy-Infrastruktur, eingebettete Systeme oder Air-Gap-Server warten, bei denen ein minimaler, deterministischer Bootloader eine bewusste architektonische Entscheidung ist.

Wie der LILO-Bootprozess auf niedriger Ebene funktioniert

Wenn eine Maschine eingeschaltet wird, führt das BIOS den POST (Power-On Self-Test) durch und liest dann die ersten 512 Bytes des bootfähigen Datenträgers — den MBR. Wenn LILO dort installiert ist, enthalten diese 512 Bytes LILOs Erstphasen-Loader. Die Sequenz läuft wie folgt ab:

  1. Phase 1 (MBR-Code): Das BIOS lädt 512 Bytes vom MBR in den Speicher an Adresse `0x7C00` und überträgt die Ausführung dorthin. Dieser kleine Stub kennt nur eine Aufgabe: Phase 2 zu finden und zu laden.
  2. Phase 2 (Map-Datei): LILO liest seine Map-Datei (`/boot/map`), die zum Installationszeitpunkt durch den Befehl `lilo` geschrieben wurde. Diese Map enthält die absoluten Festplattenblock-Adressen jedes Kernel-Images und jedes Chain-Loader-Eintrags. Hier findet kein Dateisystem-Parsing statt — LILO verwendet rohe LBA/CHS-Sektoradressen.
  3. Bootmenü-Anzeige: Wenn `prompt` in `lilo.conf` gesetzt ist, zeigt LILO ein Textmenü an. Die Direktive `timeout` steuert, wie lange gewartet wird, bevor der Standardwert verwendet wird.
  4. Kernel-Laden: LILO liest das Kernel-Image von den vorberechneten Festplattenaddressen in den unteren Speicher, dekomprimiert und verschiebt es dann.
  5. Kontrollübergabe: LILO übergibt die Kernel-Befehlszeilenparameter und den Speicherort der initialen RAM-Disk (`initrd`) an den Kernel, der die Hardware-Initialisierung übernimmt.

Kritische architektonische Implikation: Da LILO absolute Festplattenblock-Adressen zum Installationszeitpunkt kodiert, erfordert jede Änderung an der Kernel-Datei, dem Partitionslayout oder `lilo.conf` ein erneutes Ausführen von `/sbin/lilo`, um die Map neu zu generieren. Das Vergessen dieses Schritts nach einem Kernel-Update ist die mit Abstand häufigste Ursache für LILO-Bootfehler.

LILO-Konfiguration: Ein tiefer Einblick in `/etc/lilo.conf`

LILO wird vollständig über `/etc/lilo.conf` konfiguriert. Nachfolgend ein produktionsrepräsentatives Beispiel mit Anmerkungen zu Optionen, die die ursprüngliche Dokumentation häufig auslässt:

“`ini

Global section

boot=/dev/sda # Install LILO to the MBR of /dev/sda

map=/boot/map # Path to the map file (must be on a non-LVM, non-RAID partition)

install=/boot/boot.b # Second-stage boot loader binary

prompt # Always show the boot menu

timeout=100 # Wait 10 seconds (units are 1/10th of a second)

default=linux-stable # Default entry label

lba32 # Enable LBA32 addressing — critical for disks > 8 GB

compact # Merge adjacent read requests; speeds up boot on HDD

Linux kernel entry

image=/boot/vmlinuz-5.4.0

label=linux-stable

initrd=/boot/initrd.img-5.4.0

root=/dev/sda1

read-only # Mount root read-only initially; fsck runs before remount rw

append="quiet splash"

Fallback kernel entry

image=/boot/vmlinuz-4.19.0

label=linux-fallback

initrd=/boot/initrd.img-4.19.0

root=/dev/sda1

read-only

Chain-load Windows from a second partition

other=/dev/sda2

label=windows

table=/dev/sda # Partition table to pass to the Windows bootloader

“`

Nach jeder Bearbeitung werden die Änderungen angewendet mit:

“`bash

sudo /sbin/lilo -v

“`

Das Flag `-v` aktiviert die ausführliche Ausgabe und zeigt jeden Kernel- und Chain-Loader-Eintrag, der gemappt wird. Überprüfen Sie immer den Exit-Code — ein Wert ungleich null bedeutet, dass die Map nicht erfolgreich geschrieben wurde.

Häufig übersehene Konfigurationsparameter

  • `lba32`: Ohne diese Direktive auf Festplatten größer als 8 GB fällt LILO auf CHS-Adressierung zurück und kann Kernel jenseits der 8-GB-Grenze nicht finden. Dies ist ein stiller Fehlermodus, der auf Legacy-Hardware unzählige Produktionsausfälle verursacht hat.
  • `compact`: Reduziert die Bootzeit auf rotierenden Festplatten durch Zusammenfassen benachbarter Sektorlesevorgänge. Inkompatibel mit einigen Floppy-Boot-Szenarien.
  • `vga=`: Übergibt einen Videomodusparameter an den Kernel. Nützlich für Headless-Server, bei denen eine bestimmte Framebuffer-Auflösung in der Konsole gewünscht wird.
  • `append=`: Übergibt beliebige Kernel-Befehlszeilenparameter. Entspricht den `linux`-Zeilenargumenten von GRUB.
  • `password=`: Schränkt das Booten eines bestimmten Eintrags mit einem Passwort ein. Beachten Sie, dass dieses Passwort im Klartext in `lilo.conf` gespeichert wird, daher sind Dateiberechtigungen (`chmod 600`) obligatorisch.

LILO-Installationsszenarien

Installation im MBR

“`bash

Verify the target device

lsblk -o NAME,SIZE,TYPE,MOUNTPOINT

Install LILO to MBR of /dev/sda

sudo /sbin/lilo -b /dev/sda

“`

Installation im Partitions-Bootsektor

Bei Verwendung eines Boot-Managers wie System Commander möchten Sie LILO möglicherweise im Bootsektor einer Partition statt im MBR installieren:

“`ini

boot=/dev/sda1 # Install to partition boot sector, not MBR

“`

Dies ist auch der richtige Ansatz, wenn LILO von einem anderen Bootloader chain-geladen wird.

LILO entfernen

So stellen Sie den ursprünglichen MBR wieder her (z. B. vor dem Ersetzen durch GRUB):

“`bash

Overwrite MBR with a generic boot sector, preserving the partition table

sudo dd if=/usr/lib/syslinux/mbr/mbr.bin of=/dev/sda bs=440 count=1

“`

Verwenden Sie niemals `dd if=/dev/zero` auf dem vollständigen MBR — dies zerstört die Partitionstabelle.

LILO vs. GRUB: Technischer Vergleich

Die folgende Tabelle behandelt die Dimensionen, die für einen Systemadministrator bei der Wahl zwischen den beiden am wichtigsten sind, einschließlich mehrerer Nuancen, die in den meisten Vergleichen fehlen:

FunktionLILOGRUB2
**Dateisystembewusstsein**Keines — verwendet rohe Festplattenblock-AdressenVollständige Unterstützung für ext2/3/4, XFS, Btrfs, ZFS, FAT, NTFS
**Methode zur Konfigurationsanwendung**`/sbin/lilo` muss nach jeder Änderung ausgeführt werdenLiest `grub.cfg` dynamisch zur Bootzeit
**Handhabung von Kernel-Updates**Manueller Neustart erforderlich; leicht zu vergessen`update-grub` / `grub-mkconfig` automatisiert dies
**Bearbeitung von Boot-Parametern**Zur Bootzeit nicht möglichInteraktiver Editor im Bootmenü (`e` drücken)
**UEFI-Unterstützung**NeinJa (GRUB2 unterstützt UEFI Secure Boot)
**GPT-Partitionstabelle**Eingeschränkt / unzuverlässigVollständige Unterstützung
**Festplattengrößenlimit**8 GB ohne `lba32`; praktisch unbegrenzt damitKein praktisches Limit
**Netzwerkboot (PXE)**NeinJa (über `grub-efi` und tftp-Module)
**Rettungs-/Wiederherstellungsmodus**Keiner eingebautEingebaute Rettungsshell
**Skripting in der Konfiguration**NeinJa (bash-ähnliches Skripting in `grub.cfg`)
**Initrd/initramfs-Unterstützung**JaJa
**Multi-OS-Erkennung**Nur manuelle Einträge`os-prober` erkennt installierte Betriebssysteme automatisch
**Binärgröße / Footprint**Sehr klein (~20 KB)Größer (~1–4 MB mit Modulen)
**Aktive Entwicklung**Eingestellt (letztes Release 2015)Aktiv gepflegt
**Secure Boot**NeinJa (über shim + signiertes GRUB)

Fazit für Produktionssysteme: GRUB2 ist die richtige Wahl für jedes System, das einen Kernel neuer als ungefähr 3.x verwendet, GPT, UEFI, LVM oder Software-RAID nutzt. LILOs Mehrwert beschränkt sich heute auf eingebettete oder Legacy-Umgebungen, in denen sein deterministisches, dateisystemunabhängiges Lademodell ein Vorteil statt einer Einschränkung ist.

Wann LILO noch das richtige Werkzeug ist

Trotz seines Alters bleibt LILO in bestimmten Szenarien geeignet:

  • Eingebettete Linux-Systeme, bei denen der Bootloader-Footprint unter 32 KB liegen muss und sich der Kernel-Speicherort nie ändert.
  • Legacy-Hardware (vor 2000), bei der GRUB2-Module den verfügbaren Speicher überschreiten oder das BIOS Kompatibilitätsprobleme mit GRUBs Phasenladen hat.
  • Forensische und Wiederherstellungsumgebungen, in denen ein bekanntermaßen funktionierender, minimaler Bootloader einem komplexen mit Skripting-Fähigkeiten vorzuziehen ist.
  • Air-Gap-Systeme, bei denen die Einfachheit und Prüfbarkeit von LILOs flachem Konfigurationsmodell die Angriffsfläche reduziert.
  • Bildungszwecke — LILOs Quellcode und Bootsequenz sind deutlich einfacher als GRUB2, was ihn zu einem hervorragenden Thema für Kurse über Betriebssystem-Interna macht.

Für jede moderne Bereitstellung — ob Sie eine VPS Hosting-Umgebung bereitstellen, einen Dedicated Server konfigurieren oder einen Entwicklungs-Stack auf Shared Web Hosting einrichten — ist GRUB2 die standardmäßige und richtige Bootloader-Wahl.

Häufige LILO-Fehlermodi und Diagnose

Das Verständnis von LILOs Fehlercodes ist für die Wiederherstellung entscheidend. LILO gibt während des Boots einen teilweisen String von `LILO` aus, um den Fortschritt anzuzeigen:

Ausgegebene ZeichenErreichte PhaseWahrscheinliche Fehlerursache
_(nichts)_MBR nicht geladenBIOS findet kein bootfähiges Gerät
`L`Phase 1 geladenFehler beim Laden von Phase 2; falscher Map-Dateipfad
`LI`Phase 2 geladenPhase-2-Binärdatei inkompatibel oder beschädigt
`LIL`Map-Datei gefundenMap-Datei beschädigt oder an falscher Adresse
`LIL?`Map-Datei geladenMap-Datei von falscher Adresse geladen
`LILO`Vollständig geladenBootmenü erfolgreich angezeigt

Wiederherstellungsverfahren

Wenn LILO nach einem Kernel-Update nicht bootet:

  1. Von einer Live-CD oder Rettungsumgebung booten.
  2. Root-Partition einbinden: `mount /dev/sda1 /mnt`
  3. Chroot: `chroot /mnt`
  4. Überprüfen, ob `/etc/lilo.conf` auf den richtigen Kernel-Pfad zeigt.
  5. Erneut ausführen: `/sbin/lilo -v`
  6. Neu starten.

Wenn die Map-Datei selbst beschädigt ist, müssen Sie möglicherweise das Paket `lilo` neu installieren, um `/boot/boot.b` wiederherzustellen, bevor Sie den Befehl erneut ausführen.

Sicherheitsüberlegungen

LILO stammt aus einer Zeit vor modernen Firmware-Sicherheitsmodellen und hat mehrere wichtige Einschränkungen:

  • Keine Secure-Boot-Unterstützung: LILO kann nicht an der UEFI-Secure-Boot-Vertrauenskette teilnehmen. Auf Systemen, bei denen eine Firmware-Integritätsprüfung erforderlich ist, ist GRUB2 mit einem signierten Shim obligatorisch.
  • Schwachstellen beim Passwortschutz: Die Direktive `password=` in `lilo.conf` speichert Anmeldedaten im Klartext. Dateiberechtigungen streng einschränken (`chmod 600 /etc/lilo.conf`, im Besitz von root).
  • Schwachstelle bei physischem Zugriff: Ohne ein BIOS/UEFI-Passwort kann ein Angreifer mit physischem Zugriff von externen Medien booten und LILO vollständig umgehen.
  • Keine TPM-Integration: LILO kann im Gegensatz zu GRUB2 mit entsprechenden Modulen keinen Measured Boot durchführen oder mit einem TPM zur Attestierung interagieren.

Für Server, bei denen Festplattenverschlüsselung, Measured Boot oder Remote-Attestierung Teil der Sicherheitsarchitektur sind — wie ein VPS mit cPanel oder ein gehärteter Dedicated Server — machen diese Einschränkungen LILO ungeeignet.

Migration von LILO zu GRUB2

Wenn Sie ein Legacy-System warten, das noch LILO verwendet, und migrieren müssen:

“`bash

1. Install GRUB2

sudo apt-get install grub2 # Debian/Ubuntu

sudo yum install grub2-tools # RHEL/CentOS

2. Install GRUB2 to MBR

sudo grub-install /dev/sda

3. Generate GRUB configuration

sudo update-grub # Debian/Ubuntu

sudo grub2-mkconfig -o /boot/grub2/grub.cfg # RHEL/CentOS

4. Verify the new configuration

sudo grep -i menuentry /boot/grub/grub.cfg

5. Reboot and confirm GRUB2 loads

sudo reboot

“`

Entfernen Sie das Paket `lilo` nicht, bevor Sie bestätigt haben, dass GRUB2 erfolgreich bootet. Halten Sie während der Migration einen Live-Rettungs-USB bereit.

Wenn Ihr Server VPS Control Panels verwendet, die mit dem Bootloader interagieren (z. B. für Kernel-Wechsel oder Rettungsmodus), überprüfen Sie die Panel-Kompatibilität mit GRUB2 vor der Migration.

Wichtige technische Erkenntnisse: Entscheidungsmatrix

Verwenden Sie diese Checkliste, um festzustellen, ob LILO für Ihre Umgebung geeignet ist:

Verwenden Sie LILO, wenn:

  • Das System BIOS-Firmware (nicht UEFI) verwendet
  • Die Festplatte eine MBR-Partitionstabelle (nicht GPT) verwendet
  • Der Kernel und das Partitionslayout statisch sind und sich selten ändern
  • Der Bootloader-Footprint minimiert werden muss (eingebettete Systeme)
  • Sie die Boot-Sequenz-Interna zu Bildungszwecken studieren

Verwenden Sie LILO nicht, wenn:

  • Das System UEFI-Firmware verwendet (LILO ist inkompatibel)
  • Die Festplatte GPT-Partitionierung verwendet
  • Kernel regelmäßig über den Paketmanager aktualisiert werden
  • Sie Secure Boot, TPM-Attestierung oder Measured Boot benötigen
  • Das System LVM, Software-RAID oder Btrfs für das Root-Dateisystem verwendet
  • Sie interaktive Boot-Parameter-Bearbeitung zur Fehlerbehebung benötigen
  • Das System mit dem Internet verbunden ist oder Sicherheits-Compliance-Anforderungen unterliegt

Betriebsregel: Jedes Mal, wenn Sie `/etc/lilo.conf` bearbeiten oder einen Kernel auf einem LILO-verwalteten System aktualisieren, ist das Ausführen von `/sbin/lilo -v` nicht optional — es ist genauso obligatorisch wie die Bearbeitung selbst. Automatisieren Sie dies mit einem Post-Install-Kernel-Hook, wenn Ihr Paketmanager dies unterstützt.

Häufig gestellte Fragen

Was passiert, wenn ich den Linux-Kernel auf einem LILO-System aktualisiere, ohne `/sbin/lilo` auszuführen?

LILOs Map-Datei zeigt noch auf die Festplattenblock-Adressen des alten Kernels. Das System bootet den vorherigen Kernel, als ob das Update nie stattgefunden hätte — oder, wenn das alte Kernel-Image an Ort und Stelle überschrieben wurde, lädt es beschädigte Daten und gerät in Panik. Führen Sie `/sbin/lilo -v` immer unmittelbar nach jedem Kernel-Update aus.

Kann LILO von einer GPT-partitionierten Festplatte booten?

Nicht zuverlässig. LILO wurde für MBR-Partitionstabellen entwickelt. GPT-Festplatten verwenden einen schützenden MBR, der technisch die LILO-Installation erlaubt, aber LILO hat kein Bewusstsein für GPT-Partitionseinträge und kann Partitionen jenseits der ersten vier nicht zuverlässig finden. Verwenden Sie GRUB2 für jede GPT-Festplatte.

Ist LILO mit UEFI-Systemen kompatibel?

Nein. LILO ist ein Bootloader aus der BIOS-Ära ohne EFI-Anwendungsunterstützung. Auf UEFI-Systemen erwartet die Firmware eine PE-Format-`.efi`-Binärdatei in der EFI-Systempartition. LILO kann dies nicht bereitstellen. GRUB2, systemd-boot oder rEFInd sind die richtigen Optionen für UEFI.

Was ist der Unterschied zwischen LILOs `timeout`-Wert und tatsächlichen Sekunden?

Die Direktive `timeout` wird in Zehntelsekunden gemessen. Ein Wert von `50` entspricht 5 Sekunden, `100` entspricht 10 Sekunden. Dies ist eine häufige Fehlkonfiguration — Administratoren, die ein 50-Sekunden-Timeout erwarten und `timeout=50` setzen, erhalten stattdessen ein 5-Sekunden-Fenster.

Kann LILO von LVM- oder Software-RAID-Volumes booten?

Nein. Da LILO Kernel-Speicherorte zum Installationszeitpunkt auf absolute Festplattenblock-Adressen auflöst, kann es die Abstraktionsschichten, die durch LVM oder MD RAID eingeführt werden, nicht verarbeiten. Die `/boot`-Partition muss sich auf einer einfachen Partition befinden, die direkt vom BIOS zugänglich ist. Dies ist einer der primären architektonischen Gründe, warum GRUB2 LILO in modernen Linux-Distributionen ersetzt hat.

15%

15% auf alle Hosting-Dienste sparen

Teste deine Fähigkeiten und erhalte Rabatt auf jeden Hosting-Plan

Benutze den Code:

Skills
Anfangen