BIOS Legacy
- Firmware 16 bits, interface texte, conçu dans les années 1980
- Cherche un bootloader dans le MBR — les 512 premiers octets du disque
- Limite de 2 To par disque (MBR) et 4 partitions primaires maximum
- Démarre en mode réel 16 bits — lent avant de passer en 32 bits
UEFI
- Firmware 32/64 bits avec interface graphique, souris, réseau
- Cherche un fichier .efi dans la partition ESP (EFI System Partition)
- Supporte GPT → disques > 2 To, jusqu'à 128 partitions
- Boot direct en 64 bits → démarrage plus rapide
- Intègre Secure Boot — vérification des signatures numériques
- Gestionnaire de boot intégré, manipulable via
efibootmgr
GPT (GUID Partition Table) est le schéma de partitionnement moderne qui remplace le MBR.
MBR — ancien
512 octets · 4 partitions primaires · limite 2 To · pas de redondance · pas de CRC
GPT — moderne
128 partitions · disques > 2 To · table dupliquée en fin de disque · CRC32 pour intégrité
GPT est nécessaire avec UEFI car le firmware UEFI s'attend à trouver une partition de type ESP (code EF00) qui ne peut exister que dans un schéma GPT. Sans GPT → pas d'ESP → l'UEFI ne sait pas où charger le bootloader.
L'ESP (EFI System Partition) est le point de départ universel du démarrage UEFI. Elle contient tous les chargeurs de boot installés sur la machine — Linux, Windows, etc.
Pourquoi FAT32 ?
Le firmware UEFI doit lire l'ESP avant tout OS. Il a besoin d'un système de fichiers qu'il comprend nativement. La spécification UEFI impose FAT32 car c'est un format simple, universel, lisible par n'importe quel firmware. Ext4, NTFS ou Btrfs seraient invisibles pour le firmware.
/sys/firmware/efi existe → UEFI. S'il est absent → BIOS legacy. C'est la méthode la plus fiable.
Secure Boot est une fonctionnalité UEFI qui vérifie la signature cryptographique de chaque composant chargé au démarrage. Seuls les binaires .efi signés avec des clés reconnues par le firmware sont autorisés.
Le problème avec Linux
Par défaut, les firmwares UEFI font confiance aux clés Microsoft. Le noyau Linux et GRUB2 ne sont pas signés par Microsoft → refus de démarrage si Secure Boot est activé.
La solution — shimx64.efi
shimx64.efi — signé par Microsoft ✓grubx64.efi — signé Canonical via MOK ✓/etc/default/grub + scripts /etc/grub.d/) sont compilées en un fichier final (/boot/grub/grub.cfg). On ne modifie jamais le binaire final directement.
/etc/default/grub
Variables globales : timeout, entrée par défaut, paramètres noyau. C'est ici qu'on édite les options GRUB.
/etc/grub.d/
Scripts exécutables numérotés qui génèrent des sections de grub.cfg. Exécutés dans l'ordre : 00_header, 10_linux, 30_os-prober...
/boot/grub/grub.cfg
Fichier final généré automatiquement. NE JAMAIS ÉDITER MANUELLEMENT. Résultat de update-grub.
/boot/efi/EFI/ubuntu/grub.cfg
Mini-fichier dans l'ESP. Dit juste à GRUB de chercher le vrai grub.cfg dans /boot/grub/. Lu en premier par GRUB.
update-grub est un simple wrapper shell qui appelle grub-mkconfig avec les bons arguments. Ils font exactement la même chose.
Les deux commandes : exécutent tous les scripts /etc/grub.d/* dans l'ordre numérique, lisent /etc/default/grub, et génèrent le nouveau /boot/grub/grub.cfg.
update-grub est propre à Ubuntu/Debian. Sur Fedora/RHEL/Arch, utiliser directement grub-mkconfig -o /boot/grub/grub.cfg ou grub2-mkconfig.
Séquence complète de démarrage UEFI + GRUB2
shimx64.efi ou grubx64.efi depuis l'ESPsearch pour trouver la partition /boot/boot/grub/grub.cfg10_linux/boot/vmlinuz-x.x.x et /boot/initrd.img-x.x.x en RAMUn fichier .efi est un exécutable au format PE32+ (Portable Executable) — le même format que les .exe Windows — compilé pour l'environnement UEFI. Le firmware UEFI sait les lire et les exécuter nativement, avant même qu'un OS soit chargé.
grubaa64.efi.
/boot/grub/grub.cfg directement — vos changements seront écrasés au prochain update-grub.
Méthode universelle — chroot
grub rescue> apparaît quand GRUB ne trouve pas ses modules ou sa configuration. Version minimale de GRUB sans modules chargés.
ls ne montre aucune partition, le problème est matériel ou la table GPT est corrompue. Passer directement au live USB.
Windows (surtout les grosses mises à jour) réécrit l'entrée UEFI par défaut pour pointer vers son propre bootloader, ou écrase le fallback bootx64.efi.
GRUB2 utilise os-prober, un script qui scanne tous les disques pour détecter d'autres systèmes d'exploitation installés.
bootmgfw.efi) et lui passe le contrôle. Windows prend en charge le reste.
efibootmgr lit et modifie la NVRAM UEFI — les variables stockées dans le firmware qui définissent l'ordre et les entrées de boot.
Le shim est un minuscule programme intermédiaire signé par Microsoft. Il résout le problème de confiance entre le firmware UEFI (qui ne fait confiance qu'à Microsoft) et GRUB/Linux.
Chaîne de confiance complète
shimx64.efi — signé Microsoft ✓grubx64.efi — signé Canonical via MOK ✓Étape 1 — Préparation
5 minScénario A — grub.cfg disparu
Facilegrub rescue>, (hd0,gpt2)/boot/grub comme prefix,
et la syntaxe insmod normal && normal. Les trois sont incorrects sur cette config.
Voir les notes de session ci-dessous.
grub.cfg est un script — il contient exactement les commandes tapées manuellement
(set root, linux, initrd). Le fichier automatise ce que vous avez fait à la main.
Supprimer grub.cfg = devoir rejouer ces commandes manuellement à chaque boot.
grub.cfg peut remplacer la ligne linux /vmlinuz
par un noyau malveillant. Le chemin de récupération ci-dessus est exactement ce qu'un attaquant
exploite — root sur /boot suffit pour rediriger l'exécution avant le chargement de l'OS.
TPM + Secure Boot mesurent cette partition pour détecter la modification.
Scénario B — Chargeur EFI corrompu
IntermédiaireScénario C — Entrée UEFI supprimée
AvancéÉtape 4 — Vérification finale
5 min/boot/efi/EFI/ubuntu/grub.cfg est un mini-fichier dans l'ESP (FAT32). Il contient seulement un search pour trouver la partition /boot et un configfile qui pointe vers le vrai fichier. Lu en premier par GRUB, avant de monter le système de fichiers Linux.
/boot/grub/grub.cfg est le vrai fichier de configuration, généré par update-grub, avec toutes les entrées menuentry, les paramètres noyau, et la configuration complète.
Live USB → chroot → grub-install → update-grub → efibootmgr -v pour vérifier que l'entrée est recréée → efibootmgr -o pour mettre Linux en tête.
Simplement lancer sudo update-grub. Le script 10_linux va scanner tous les noyaux présents dans /boot/ et les ajouter automatiquement au grub.cfg.