Qu’est-ce que LILO (Linux Loader) ? Architecture, configuration et comparaison avec GRUB
LILO (Linux Loader) est un chargeur d’amorçage hérité pour Linux et les systèmes d’exploitation de type Unix qui charge le noyau directement depuis une adresse disque stockée au moment de l’installation, sans nécessiter la prise en charge d’un pilote de système de fichiers pendant la séquence de démarrage. Il fonctionne au stade pré-OS — soit depuis le Master Boot Record (MBR) soit depuis un secteur d’amorçage de partition — et transfère le contrôle du CPU au noyau Linux après l’avoir chargé en mémoire.
Pour la plupart des systèmes de production actuels, LILO a été remplacé par GRUB2. Cependant, la compréhension de ses mécanismes internes reste essentielle pour les ingénieurs qui maintiennent des infrastructures héritées, des systèmes embarqués ou des serveurs isolés où un chargeur d’amorçage minimal et déterministe est un choix architectural délibéré.
Comment fonctionne le processus de démarrage LILO à bas niveau
Lorsqu’une machine s’allume, le BIOS exécute le POST (Power-On Self-Test), puis lit les 512 premiers octets du disque amorçable — le MBR. Si LILO y est installé, ces 512 octets contiennent le chargeur de première étape de LILO. La séquence se déroule comme suit :
- Étape 1 (code MBR) : Le BIOS charge 512 octets depuis le MBR en mémoire à l’adresse `0x7C00` et lui transfère l’exécution. Ce minuscule stub ne connaît qu’une seule tâche : localiser et charger l’étape 2.
- Étape 2 (fichier map) : LILO lit son fichier map (`/boot/map`), qui a été écrit au moment de l’installation par la commande `lilo`. Ce fichier map contient les adresses absolues des blocs disque de chaque image de noyau et de chaque entrée de chaîne de chargement. Aucune analyse du système de fichiers n’a lieu ici — LILO utilise des adresses de secteurs LBA/CHS brutes.
- Présentation du menu de démarrage : Si `prompt` est défini dans `lilo.conf`, LILO affiche un menu texte. La directive `timeout` contrôle le temps d’attente avant de passer à l’entrée par défaut.
- Chargement du noyau : LILO lit l’image du noyau depuis les adresses disque précalculées en mémoire basse, puis la décompresse et la relogie.
- Transfert de contrôle : LILO transmet les paramètres de ligne de commande du noyau et l’emplacement du disque RAM initial (`initrd`) au noyau, qui prend en charge l’initialisation du matériel.
Implication architecturale critique : Parce que LILO encode les adresses absolues des blocs disque au moment de l’installation, tout changement apporté au fichier du noyau, à la disposition des partitions ou à `lilo.conf` nécessite de relancer `/sbin/lilo` pour régénérer le fichier map. Oublier cette étape après une mise à jour du noyau est la cause la plus fréquente des échecs de démarrage LILO.
Configuration de LILO : Analyse approfondie de `/etc/lilo.conf`
LILO est entièrement configuré via `/etc/lilo.conf`. Voici un exemple représentatif d’un environnement de production avec des annotations couvrant des options que la documentation originale omet fréquemment :
“`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
“`
Après chaque modification, appliquez les changements avec :
“`bash
sudo /sbin/lilo -v
“`
L’option `-v` active la sortie détaillée, affichant chaque entrée de noyau et de chaîne de chargement en cours de mappage. Vérifiez toujours le code de sortie — un retour non nul signifie que le fichier map n’a pas été écrit avec succès.
Paramètres de configuration fréquemment négligés
- `lba32` : Sans cette directive sur les disques de plus de 8 Go, LILO revient à l’adressage CHS et ne parviendra pas à localiser les noyaux au-delà de la limite de 8 Go. Il s’agit d’un mode de défaillance silencieux qui a causé d’innombrables pannes en production sur du matériel hérité.
- `compact` : Réduit le temps de démarrage sur les disques rotatifs en regroupant les lectures de secteurs adjacents. Incompatible avec certains scénarios de démarrage par disquette.
- `vga=` : Transmet un paramètre de mode vidéo au noyau. Utile pour les serveurs sans tête où vous souhaitez une résolution de framebuffer spécifique dans la console.
- `append=` : Transmet des paramètres arbitraires de ligne de commande au noyau. Équivalent aux arguments de ligne `linux` de GRUB.
- `password=` : Restreint le démarrage d’une entrée spécifique avec un mot de passe. Notez que ce mot de passe est stocké en clair dans `lilo.conf`, donc les permissions de fichier (`chmod 600`) sont obligatoires.
Scénarios d’installation de LILO
Installation dans le 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 dans un secteur d’amorçage de partition
Lors de l’utilisation d’un gestionnaire de démarrage comme System Commander, vous pouvez souhaiter que LILO soit sur le secteur d’amorçage d’une partition plutôt que dans le MBR :
“`ini
boot=/dev/sda1 # Install to partition boot sector, not MBR
“`
C’est également la bonne approche lorsque LILO est chargé en chaîne par un autre chargeur d’amorçage.
Suppression de LILO
Pour restaurer le MBR d’origine (par exemple, avant de le remplacer par 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
“`
N’utilisez jamais `dd if=/dev/zero` sur l’intégralité du MBR — cela détruira la table de partitions.
LILO vs. GRUB : Comparaison technique
Le tableau suivant couvre les dimensions les plus importantes pour un administrateur système choisissant entre les deux, incluant plusieurs nuances absentes de la plupart des comparaisons :
| Fonctionnalité | LILO | GRUB2 |
|---|
| — | — | — |
|---|
| **Connaissance du système de fichiers** | Aucune — utilise des adresses de blocs disque brutes | Prise en charge complète de ext2/3/4, XFS, Btrfs, ZFS, FAT, NTFS |
|---|
| **Méthode d’application de la configuration** | Doit exécuter `/sbin/lilo` après chaque modification | Lit `grub.cfg` dynamiquement au démarrage |
|---|
| **Gestion des mises à jour du noyau** | Relance manuelle requise ; facile à oublier | `update-grub` / `grub-mkconfig` automatise cela |
|---|
| **Modification des paramètres de démarrage** | Impossible au moment du démarrage | Éditeur interactif dans le menu de démarrage (appuyer sur `e`) |
|---|
| **Prise en charge UEFI** | Non | Oui (GRUB2 prend en charge UEFI Secure Boot) |
|---|
| **Table de partitions GPT** | Limitée / peu fiable | Prise en charge complète |
|---|
| **Limite de taille de disque** | 8 Go sans `lba32` ; pratiquement illimitée avec | Aucune limite pratique |
|---|
| **Démarrage réseau (PXE)** | Non | Oui (via `grub-efi` et modules tftp) |
|---|
| **Mode de secours / récupération** | Aucun intégré | Shell de secours intégré |
|---|
| **Scripts dans la configuration** | Non | Oui (scripts de type bash dans `grub.cfg`) |
|---|
| **Prise en charge Initrd/initramfs** | Oui | Oui |
|---|
| **Détection multi-OS** | Entrées manuelles uniquement | `os-prober` détecte automatiquement les OS installés |
|---|
| **Taille binaire / empreinte** | Très petite (~20 Ko) | Plus grande (~1–4 Mo avec les modules) |
|---|
| **Développement actif** | Abandonné (dernière version en 2015) | Activement maintenu |
|---|
| **Secure Boot** | Non | Oui (via shim + GRUB signé) |
|---|
Verdict pour les systèmes de production : GRUB2 est le choix correct pour tout système exécutant un noyau plus récent qu’environ la version 3.x, utilisant GPT, UEFI, LVM ou un RAID logiciel. La proposition de valeur de LILO aujourd’hui se limite aux environnements embarqués ou hérités où son modèle de chargement déterministe et indépendant du système de fichiers est un atout plutôt qu’un inconvénient.
Quand LILO est encore le bon outil
Malgré son âge, LILO reste approprié dans des scénarios spécifiques :
- Systèmes Linux embarqués où l’empreinte du chargeur d’amorçage doit être inférieure à 32 Ko et l’emplacement du noyau ne change jamais.
- Matériel hérité (avant 2000) où les modules GRUB2 dépassent la mémoire disponible ou le BIOS présente des problèmes de compatibilité avec le chargement par étapes de GRUB.
- Environnements forensiques et de récupération où un chargeur d’amorçage minimal et connu comme fiable est préférable à un chargeur complexe avec des capacités de script.
- Systèmes isolés où la simplicité et l’auditabilité du modèle de configuration plat de LILO réduisent la surface d’attaque.
- À des fins éducatives — le code source et la séquence de démarrage de LILO sont nettement plus simples que ceux de GRUB2, ce qui en fait un excellent sujet pour les cours sur les mécanismes internes des OS.
Pour tout déploiement moderne — que vous provisionniez un environnement Hébergement VPS, configuriez un Serveur Dédié, ou mettiez en place une pile de développement sur un Hébergement Web Mutualisé — GRUB2 est le choix de chargeur d’amorçage par défaut et correct.
Modes de défaillance courants de LILO et diagnostics
Comprendre les codes d’erreur de LILO est essentiel pour la récupération. LILO affiche une chaîne partielle de `LILO` pendant le démarrage pour indiquer la progression :
| Caractères affichés | Étape atteinte | Cause probable de la défaillance |
|---|
| — | — | — |
|---|
| _(rien)_ | MBR non chargé | BIOS ne trouve pas de périphérique amorçable |
|---|
| `L` | Étape 1 chargée | Erreur de chargement de l’étape 2 ; chemin du fichier map incorrect |
|---|
| `LI` | Étape 2 chargée | Binaire de l’étape 2 incompatible ou corrompu |
|---|
| `LIL` | Fichier map trouvé | Fichier map corrompu ou à une mauvaise adresse |
|---|
| `LIL?` | Fichier map chargé | Fichier map chargé depuis une mauvaise adresse |
|---|
| `LILO` | Chargement complet | Menu de démarrage affiché avec succès |
|---|
Procédure de récupération
Si LILO ne parvient pas à démarrer après une mise à jour du noyau :
- Démarrez depuis un CD live ou un environnement de secours.
- Montez la partition racine : `mount /dev/sda1 /mnt`
- Chroot : `chroot /mnt`
- Vérifiez que `/etc/lilo.conf` pointe vers le bon chemin du noyau.
- Relancez : `/sbin/lilo -v`
- Redémarrez.
Si le fichier map lui-même est corrompu, vous devrez peut-être réinstaller le paquet `lilo` pour restaurer `/boot/boot.b` avant de relancer la commande.
Considérations de sécurité
LILO est antérieur aux modèles de sécurité des micrologiciels modernes et présente plusieurs limitations importantes :
- Pas de prise en charge du Secure Boot : LILO ne peut pas participer à la chaîne de confiance UEFI Secure Boot. Sur les systèmes où la vérification de l’intégrité du micrologiciel est requise, GRUB2 avec un shim signé est obligatoire.
- Faiblesses de la protection par mot de passe : La directive `password=` dans `lilo.conf` stocke les identifiants en clair. Restreignez strictement les permissions de fichier (`chmod 600 /etc/lilo.conf`, appartenant à root).
- Vulnérabilité à l’accès physique : Sans mot de passe BIOS/UEFI, un attaquant ayant un accès physique peut démarrer depuis un support externe et contourner complètement LILO.
- Pas d’intégration TPM : LILO ne peut pas effectuer de démarrage mesuré ni interagir avec un TPM pour l’attestation, contrairement à GRUB2 avec les modules appropriés.
Pour les serveurs où le chiffrement de disque, le démarrage mesuré ou l’attestation à distance font partie de l’architecture de sécurité — comme un VPS avec cPanel ou un Serveur Dédié renforcé — ces limitations rendent LILO inadapté.
Migration de LILO vers GRUB2
Si vous maintenez un système hérité fonctionnant encore sous LILO et que vous devez migrer :
“`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
“`
Ne supprimez pas le paquet `lilo` tant que vous n’avez pas confirmé que GRUB2 démarre avec succès. Gardez une clé USB de secours live disponible pendant la migration.
Si votre serveur utilise des Panneaux de contrôle VPS qui interagissent avec le chargeur d’amorçage (par exemple, pour le changement de noyau ou le mode de secours), vérifiez la compatibilité du panneau avec GRUB2 avant de migrer.
Points techniques clés : Matrice de décision
Utilisez cette liste de contrôle pour déterminer si LILO est approprié pour votre environnement :
Utilisez LILO si :
- Le système utilise un micrologiciel BIOS (pas UEFI)
- Le disque utilise une table de partitions MBR (pas GPT)
- Le noyau et la disposition des partitions sont statiques et changent rarement
- L’empreinte du chargeur d’amorçage doit être minimisée (systèmes embarqués)
- Vous étudiez les mécanismes internes de la séquence de démarrage à des fins éducatives
N’utilisez pas LILO si :
- Le système utilise un micrologiciel UEFI (LILO est incompatible)
- Le disque utilise le partitionnement GPT
- Les noyaux sont mis à jour régulièrement via le gestionnaire de paquets
- Vous avez besoin du Secure Boot, de l’attestation TPM ou du démarrage mesuré
- Le système utilise LVM, un RAID logiciel ou Btrfs pour le système de fichiers racine
- Vous avez besoin d’une modification interactive des paramètres de démarrage pour le dépannage
- Le système est exposé à Internet ou soumis à des exigences de conformité en matière de sécurité
Règle opérationnelle : Chaque fois que vous modifiez `/etc/lilo.conf` ou mettez à jour un noyau sur un système géré par LILO, l’exécution de `/sbin/lilo -v` n’est pas optionnelle — elle est aussi obligatoire que la modification elle-même. Automatisez cela avec un hook post-installation du noyau si votre gestionnaire de paquets le prend en charge.
Foire aux questions
Que se passe-t-il si je mets à jour le noyau Linux sur un système LILO sans exécuter `/sbin/lilo` ?
Le fichier map de LILO pointe toujours vers les anciennes adresses de blocs disque du noyau. Le système démarrera l’ancien noyau comme si la mise à jour n’avait jamais eu lieu — ou, si l’ancienne image du noyau a été écrasée sur place, il chargera des données corrompues et paniquera. Exécutez toujours `/sbin/lilo -v` immédiatement après toute mise à jour du noyau.
LILO peut-il démarrer depuis un disque partitionné en GPT ?
Pas de manière fiable. LILO a été conçu pour les tables de partitions MBR. Les disques GPT utilisent un MBR de protection qui permet techniquement l’installation de LILO, mais LILO n’a aucune connaissance des entrées de partitions GPT et ne peut pas localiser de manière fiable les partitions au-delà des quatre premières. Utilisez GRUB2 pour tout disque GPT.
LILO est-il compatible avec les systèmes UEFI ?
Non. LILO est un chargeur d’amorçage de l’ère BIOS sans prise en charge des applications EFI. Sur les systèmes UEFI, le micrologiciel attend un binaire `.efi` au format PE dans la partition système EFI. LILO ne peut pas fournir cela. GRUB2, systemd-boot ou rEFInd sont les choix corrects pour UEFI.
Quelle est la différence entre la valeur `timeout` de LILO et les secondes réelles ?
La directive `timeout` est mesurée en dixièmes de seconde. Une valeur de `50` équivaut à 5 secondes, `100` équivaut à 10 secondes. Il s’agit d’une erreur de configuration courante — les administrateurs qui s’attendent à un délai d’expiration de 50 secondes et qui définissent `timeout=50` obtiendront une fenêtre de 5 secondes à la place.
LILO peut-il démarrer depuis des volumes LVM ou RAID logiciel ?
Non. Parce que LILO résout les emplacements des noyaux en adresses absolues de blocs disque au moment de l’installation, il ne peut pas gérer les couches d’abstraction introduites par LVM ou MD RAID. La partition `/boot` doit résider sur une partition ordinaire directement accessible par le BIOS. C’est l’une des principales raisons architecturales pour lesquelles GRUB2 a remplacé LILO dans les distributions Linux modernes.
