
Créer un double boot entre (typiquement) Windows et Linux, c’est hélas toujours et encore source de problème. Le sujet est assez technique à appréhender, et l’on a vite des sueurs froides si tout ne se passe pas comme prévu.
L’autre jour, je suis tombé sur cet article, qui présente rEFInd et ses avantages. S’il est limité aux machines équipées de l’UEFI (apparu en 2007, et donc largement répandu aujourd’hui), il offre un énorme avantage pour les configurations « multi-boot » : rEFInd scanne le système à chaque démarrage pour détecter les OS existants. En outre, il est facile à configurer, offre un mode graphique, des thèmes, supporte le Secure boot, macOS, etc… Enfin, son installation est on ne peut plus simple, puisque c’est un paquet disponible comme n’importe quel autre sous Linux.
Bref, il n’y a aucun raison de continuer à utiliser GRUB, pourtant toujours présent sur la majorité des distributions Linux, et ce pour une seule raison : la compatibilité avec les vieux PCs qui n’ont pas d'(U)EFI. Or GRUB est complexe, statique, avec des fichiers de configurations pas évidents à modifier. De nos jours, le choix est vite fait si l’on veut faire du multi-boot.
J’en ai donc profité pour réinstallé mon laptop Asus en double boot, avec Windows 10 et Debian 12. Et voilà le résultat au démarrage après l’installation d’un thème :

C’est quand même autre chose que le menu de GRUB non ?
Revoyons tout ça, cet article s’est révélé plus long que prévu : je l’ai démarré avec l’idée de simplement décrire l’installation de rEFInd et d’un thème, mais j’ai creusé le sujet au fur et à mesure pour mieux comprendre le boot EFI. 😎
Les bases à connaître
UEFI vs BIOS
UEFI signifie Unified Extensible Firmware Interface. Il s’agit d’une solution moderne qui a remplacé progressivement le BIOS (Basic Input-Output System) traditionnel sur les PC. Tout ce qui suit concerne donc un PC équipé d’un firmware de type UEFI.

GPT
Le corollaire d’un boot UEFI est un disque disposant d’une table de partition GUID ou GPT (GUID Partition Table), plus moderne, qui vient en lieu et place de l’ancien MBR (limité à 4 partitions, etc…). L’une des partition sera obligatoirement une partition de type EFI, sur laquelle on viendra charger le « boot loader » choisi.

NOTE : On peut migrer les partitions de type MBR en GPT, voir cet article, c’est ce que j’avais fait sous Ubuntu en 2018.
Boot loaders et Boot managers
J’ai volontairement laissé les termes anglais pour simplifier la lecture de documents sur le sujet.
- Un boot loader (chargeur d’amorçage) charge un noyau de système d’exploitation dans la mémoire et l’exécute.
- Un boot manager (gestionnaire d’amorçage) transfère le contrôle à un autre boot loader.
- GRUB est à la fois un boot loader et un boot manager.
- rEFInd n’est qu’un boot manager.
Comme tout noyau Linux incorpore de nos jours un EFI-boot loader, un boot manager est suffisant pour passer le contrôle au noyau Linux que l’on veut démarrer. Le noyau va se charger tout seul en mémoire, au lieu de dépendre d’un boot loader externe comme GRUB. Windows dispose de ses propres boot manager & boot loader.
GRUB sera ainsi capable d’utiliser sa fonction de boot loader pour démarrer un système Linux, et d’utiliser sa fonction de boot manager pour lancer le boot manager spécifique de MS Windows (bootmgfw.efi
).
Lire cette page qui explique comment forcer rEFInd comme boot loader par défaut, et empêcher Windows 10 de se (re)déclarer à chaque démarrage du PC, c’est très instructif.
Une fois ces principes en tête, il est temps d’installer Windows et Debian sur mon laptop.
Installation des deux OS
Mon portable est un Asus Zenbook UX301LA, qui a déjà dix ans maintenant. Je m’en sers peu, et j’avais depuis longtemps effacé Windows pour y installer d’abord Ubuntu puis désormais Debian. Il est équipé de 2 SSD Sandisk de 128 Go, configurés en RAID 1 (miroir) lors de l’achat.
J’ai donc désactivé ce RAID pour installer Windows sur le premier SSD, puis Debian 12 sur le second. Il faut toujours installer Linux en second, car lui prendra en compte la présence de Windows, la réciproque n’étant pas vraie (merci MS). J’ai laissé toutes les valeurs par défaut concernant le partitionnement des disques pour chaque OS.
Les deux installations se passent sans problème particulier, et au redémarrage, Grub me propose alors cet écran de démarrage :

On voit que Debian est défini comme système par défaut. Si je voulais mettre Windows à la place, il me faudrait éditer en tant que root le fichier /etc/default/grub
, modifier la ligne GRUB_DEFAULT=0
en GRUB_DEFAULT=2
, sauvegarder le fichier, puis lancer la commande update-grub
pour que le fichier /boot/grub/grub/cfg
soit mis à jour. Si on modifie manuellement ce dernier, il sera écrasé à la prochaine mise à jour.
Mais bon, tout fonctionne, je peux choisir de démarrer Windows ou Debian, et c’est bien là l’essentiel. Voir en fin d’article quelques actions à prendre si le boot Windows n’apparaît pas dans le menu Grub.
Disques et partitions
En démarrant l’un ou l’autre des systèmes, je peux aller voir les deux disques :
Gestionnaire de disques Windows

Gestionnaire de disque Gnome


On voit que chaque système a créé sa propre partition EFI pour démarrer : /dev/sda2
pour Windows et /dev/sdb1
pour Debian. Les UUID de chacune sont aussi également affichées.
J’aurais pu faire différemment, et demander lors de l’installation de Debian d’utiliser la même partition EFI que Windows, mais j’ai fait au plus simple, mon but premier étant de tester et d’utiliser rEFInd. D’autre part, cela rend les disques indépendants l’un de l’autre : si l’un tombe en rade, je peux toujours démarrer sur l’autre (partition EFI nécessaire).
Partitions EFI
Au démarrage, un PC UEFI va charger le boot loader spécifié par le boot manager intégré de l’UEFI. Ce gestionnaire de démarrage maintient une liste d’options de démarrage dans la NVRAM du PC, ainsi qu’un ordre dans lequel les essayer. Voilà ce que j’ai désormais dans l’UEFI (aka BIOS) du PC :

En fait, chaque OS, tout comme rEFInd, a déclaré son propre chemin de boot à l’UEFI du PC, qui l’a strocké dans sa NVRAM (mémoire non-volatile). Ce point est très important à comprendre.
On peut aussi obtenir les infos avec la commande efibootmgr
sous Debian :
# efibootmgr
BootCurrent: 0003
Timeout: 0 seconds
BootOrder: 0003,0002,0000,0001,0004,0005
Boot0000* Windows Boot Manager
Boot0001* UEFI:CD/DVD Drive
Boot0002* debian
Boot0003* rEFInd Boot Manager
Boot0004* UEFI:Removable Device
Boot0005* UEFI:Network Device
Voir cette page pour utiliser efibootmgr.
Puis le système démarre sur la partition EFI correspondante, où se trouve le boot manager ou le boot loader sélectionné. Ce sont des fichiers avec l’extension .efi
:
root@pascal-UX301LAA:/# ls /boot/efi/EFI/debian/*.efi
/boot/efi/EFI/debian/fbx64.efi /boot/efi/EFI/debian/mmx64.efi
/boot/efi/EFI/debian/grubx64.efi /boot/efi/EFI/debian/shimx64.efi
root@pascal-UX301LAA:/# ls /boot/efi/EFI/refind/*.efi
/boot/efi/EFI/refind/refind_x64.efi
root@pascal-UX301LAA:/# ls /media/pascal/D0A1-
8658/EFI/Microsoft/Boot/*.efi
/media/pascal/D0A1-8658/EFI/Microsoft/Boot/bootmgfw.efi
/media/pascal/D0A1-8658/EFI/Microsoft/Boot/bootmgr.efi
/media/pascal/D0A1-8658/EFI/Microsoft/Boot/memtest.efi
rEFInd
Pour une information claire et complète sur rEFInd, cette page fournit toutes les informations de base. La page de l’auteur est très détaillée et très technique, et peut servir de référence si l’on veut creuser un aspect particulier.
Installation de rEFInd
L’installation de rEFInd sous debian est on ne peut plus simple :
sudo apt install refind
Voilà, c’est tout, il ne reste plus qu’à redémarrer pour arriver sur le menu rEFInd. Mais auparavant, je vais installer un thème pour améliorer l’affichage. Les thèmes se trouvent sur cette page, et j’ai choisi rEFInd-glassy.
Pour installer le thème c’est assez simple : il faut d’abord localiser le dossier EFI, créer un dossier themes, cloner le thème, puis ajouter une ligne dans le fichier refind.conf
pour inclure le thème. Dans mon cas, cela donne :
$su
# cd /boot/efi/EFI/refind
# mkdir themes ; cd themes
# git clone https://github.com/Pr0cella/rEFInd-glassy
Puis on édite le fichier /boot/efi/EFI/refind/refind.conf pour y ajouter à la fin la ligne suivante :
include themes/rEFInd-glassy/theme.conf
Et on redémarre ! Voilà mon premier écran rEFInd :

C’est pas mal, mais il y a une chose qui ne me convient pas : il y a deux entrées pour Debian d’affichées. J’aimerais aussi changer l’icône Windows.
Pour les deux entrées Debian, il s’agit en fait pour la première de celle correspondant à GRUB, comme on le voit sur l’image avec le chemin affiché. Comme expliqué plus haut (boot loader vs boot manager), je n’ai pas besoin de passer par le boot manager de Grub, autant lancer directement le boot loader de Debian, c’est-à-dire l’icône de droite. Il faudrait donc cacher celle de « Debian Grub ».
Or rEFInd propose bien cette possibilité, sauf qu’elle n’apparaît pas dans les outils fournis (petites icônes grises). Il s’agit de l’outil hidden_tags
défini dans la variable show_tools du fichier /boot/efi/EFI/refind/refind.conf
. En fait, le thème redéfinit cette variable. Il faut donc aller modifier le fichier /boot/efi/EFI/refind/themes/rEFInd-glassy/theme.conf
et y ajouter la valeur hidden_tags :
# grep hidden_tags /boot/efi/EFI/refind/themes/rEFInd-glassy/theme.conf
showtools reboot, hidden_tags, shutdown, firmware
Concernant les icônes, le thème contient un dossier icons
. Il suffit de modifier les icônes de ce dossier pour afficher ce que l’on souhaite, c’est tout simple.
Et voilà, on obtient l’image affichée en début d’article. Jepeux booter Windows ou Debian, le choix par défaut est le dernier utilisé. Je peux aussi accéder au BIOS, arrêter, redémarrer.
Dépannage Grub
Il existe plein de pages expliquant comment réparer un dual-boot Windows-Linux (où l’on se perd d’ailleurs). À toutes fins utiles, je note donc ici les trucs de base à faire quand Windows n’est plus affiché après l’installation de Debian (rappel : toujours installer Windows en premier, puis Debian).
Si Windows n’est pas affiché dans le menu Grub, la première chose à faire est d’aller dans l’UEFI (aka BIOS) du PC si l’on voit le Windows boot manager. S’il n’est pas là, c’est que l’entrée en NVRAM a disparu. Une simple installation de rEFInd peut résoudre avantageusement le problème (en se passant de GRUB).
Pour rajouter Windows au menu GRUB, il faut dans un premier temps s’assurer que GRUB_DISABLE_OS_PROBER=FALSE
est bien défini dans le fichier /etc/default/grub
, puis relancer la commande update-grub
. Cela permet de déclencher op-prober
qui va détecter les autres OS disponibles sur la machine (tout comme fait rEFInd à chaque démarrage).
Si cela ne fonctionne toujours pas, reste la méthode manuelle : il faut d’abord identifier l’UUID de la partition EFI utilisée par Windows, soit de la partition où se trouve Windows si un seul disque a été utilisé. L’UUID est affiché par le gestionnaire de disque (voir les captures d’écran plus haut), ou alors avec la commande blkid
ou lsblk -f
. Une fois ceci fait, on édite le fichier /etc/grub.d/40.custom
et on y ajoute ceci selon la configuration (UEFI ou pas) en renseignant l’UUID :
menuentry "Windows" --class windows --class os {
insmod part_gpt # pour partition EFI
search --no-floppy --set=root --fs-uuid COPIEZ-ICI-LE-UUID
chainloader (${root})/EFI/Microsoft/Boot/bootmgfw.efi
}
Et on relance update-grub
avant de redémarrer.
NOTE : je n’ai pas testé cette solution.
Conclusion
Avec cet article, je comprend désormais mieux le boot EFI, et rEFInd simplifie énormément les problèmes que l’on peut rencontrer avec GRUB dans les donfigurations multi-boot.
Voilà, c’était le dernier article de l’année 2024 ! 😀
Une découverte pour moi : mon dual-boot « Windows-Linux » étant réalisé avec Grub.
Mon prochain défi serait d’y ajouter MacOsx…
Bonne journée !