lucidiot's cybrecluster

Sauver le chargeur d'amorçage de Windows

Lucidiot Informatique 2017-07-31
« Tu vois fiston, les meilleures choses dans la vie, ce sont les plus simples. »


J'ai effectué il y a quelques jours ma transition, bien plus rapidement que prévu, vers Arch Linux. J'utilisais déjà Elementary OS sur mon PC portable, mais je n'ai jamais eu autre chose que du Windows sur mon PC fixe. Ayant quand même assez peur de perdre le dernier morceau de Windows de tout mon matériel informatique, j'ai voulu installer Arch Linux en dual-boot. Et ça ne s'est pas très bien passé. Pour une raison qui m'est encore inconnue, la partition de 100 Mo que Windows crée que vous le vouliez ou non a disparu. Pour 100 pauvres mégaoctets, on pourrait n'en avoir rien à faire, mais cette partition est le chargeur d'amorçage (bootloader) de Windows, ce qui fait que Windows démarre. Le fichier bootmgr qu'elle contient s'occupe de dire à l'ordinateur de lancer le kernel de Windows qui se trouve à une adresse donnée du disque dur.

À la différence de Linux, qui nous offrira toujours un shell peu importe à quel point on le casse, Windows gère très mal ce problème. GRUB me permet de réussir quand même à amorcer mon système, et même amorcer un Windows, alors que Windows va soit ne rien afficher du tout (et garder l'écran POST ouvert), soit montrer un bel écran bleu comme à son habitude, soit afficher BOOTMGR is missing. Quoi qu'il en soit, on ne peut pas s'en sortir sans un CD ou une clé USB de récupération.

Je me suis donc amusé avec mon ISO de Windows 8 sur clé USB qui ne bootait pas toute seule, puisque le BIOS ne trouvait justement pas le bootloader, et une autre clé pour GParted, bootable cette fois-ci, et une dernière clé d'installation de Arch Linux, juste pour pouvoir en utiliser le GRUB et booter sur la clé Windows 8. Un sacré bazar.

Avec tout ça, j'ai suivi au moins une dizaine de guides, et j'ai perdu plusieurs heures de ma journée. La plupart des guides recommandent des instructions utilisant bootrec et bcdedit pour créer manuellement le bootloader de Windows ; j'ai dû faire face à 3 ou 4 messages d'erreur différents sans que quoi que ce soit ne permette une bonne récupération. En fait, aucune de ces commandes ne recrée vraiment correctement le bootloader !

Au milieu de mon périple parmi ces guides de sauvetage inutiles et ces erreurs frustrantes, je suis tombé sur une petite réponse assez cachée à une question sur SuperUser, parlant d'un outil beaucoup plus simple que bcdedit pour recréer son bootloader intégralement : bcdboot. Lorsque vous avez une partition de 100 Mo formatée en NTFS, son utilisation est d'une complexité extrême :

bcdboot A:\Windows -s B:\

Attention toutefois : A: est la lettre de lecteur de la partition de Windows et B: est la lettre de lecteur de la partition du chargeur d'amorçage dans cet exemple. Sur un disque de récupération de Windows, les lettres seront mélangées, et votre système, qui se trouve habituellement probablement sur C:, ne sera sans doute plus à sa place, et vous devrez par conséquent trouver les lettres de lecteur. Vous pouvez utiliser l'utilitaire diskpart et la commande list volumes pour lister les volumes et les lettres de lecteur assignées.

La commande s'exécute en quelques secondes, et vous revoilà avec un chargeur d'amorçage tout propre. Attention toutefois, cette commande ainsi que bootrec /rebuildbcd ont tendance à casser le drapeau boot (ou état actif) des partitions de tous les autres disques, donc vous devrez avoir un GParted sous la main ou savoir utiliser diskpart pour maintenir vos disques bootables par la suite.

Pour finir la petite histoire d'introduction de cet article, j'ai finalement viré le Windows, et je suis donc à présent 100% sous Linux, sans que ça ne me gêne, contrairement à ce que j'ai imaginé. Et je ne verrai plus jamais les yaourts de la même manière.


Commentaires

John Doe, 2017-08-09

Il faut sauver le soldat cancer! Or nope en fait, t'as bien fait de le virer Lucidiot une tumeur en moins sur une machine :-D