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:
- 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.
- 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.
- 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.
- Kernel-Laden: LILO liest das Kernel-Image von den vorberechneten Festplattenaddressen in den unteren Speicher, dekomprimiert und verschiebt es dann.
- 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:
| Funktion | LILO | GRUB2 |
|---|
| — | — | — |
|---|
| **Dateisystembewusstsein** | Keines — verwendet rohe Festplattenblock-Adressen | Vollständige Unterstützung für ext2/3/4, XFS, Btrfs, ZFS, FAT, NTFS |
|---|
| **Methode zur Konfigurationsanwendung** | `/sbin/lilo` muss nach jeder Änderung ausgeführt werden | Liest `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öglich | Interaktiver Editor im Bootmenü (`e` drücken) |
|---|
| **UEFI-Unterstützung** | Nein | Ja (GRUB2 unterstützt UEFI Secure Boot) |
|---|
| **GPT-Partitionstabelle** | Eingeschränkt / unzuverlässig | Vollständige Unterstützung |
|---|
| **Festplattengrößenlimit** | 8 GB ohne `lba32`; praktisch unbegrenzt damit | Kein praktisches Limit |
|---|
| **Netzwerkboot (PXE)** | Nein | Ja (über `grub-efi` und tftp-Module) |
|---|
| **Rettungs-/Wiederherstellungsmodus** | Keiner eingebaut | Eingebaute Rettungsshell |
|---|
| **Skripting in der Konfiguration** | Nein | Ja (bash-ähnliches Skripting in `grub.cfg`) |
|---|
| **Initrd/initramfs-Unterstützung** | Ja | Ja |
|---|
| **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** | Nein | Ja (ü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 Zeichen | Erreichte Phase | Wahrscheinliche Fehlerursache |
|---|
| — | — | — |
|---|
| _(nichts)_ | MBR nicht geladen | BIOS findet kein bootfähiges Gerät |
|---|
| `L` | Phase 1 geladen | Fehler beim Laden von Phase 2; falscher Map-Dateipfad |
|---|
| `LI` | Phase 2 geladen | Phase-2-Binärdatei inkompatibel oder beschädigt |
|---|
| `LIL` | Map-Datei gefunden | Map-Datei beschädigt oder an falscher Adresse |
|---|
| `LIL?` | Map-Datei geladen | Map-Datei von falscher Adresse geladen |
|---|
| `LILO` | Vollständig geladen | Bootmenü erfolgreich angezeigt |
|---|
Wiederherstellungsverfahren
Wenn LILO nach einem Kernel-Update nicht bootet:
- Von einer Live-CD oder Rettungsumgebung booten.
- Root-Partition einbinden: `mount /dev/sda1 /mnt`
- Chroot: `chroot /mnt`
- Überprüfen, ob `/etc/lilo.conf` auf den richtigen Kernel-Pfad zeigt.
- Erneut ausführen: `/sbin/lilo -v`
- 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.
