31 janvier 2020

Restorer le boot de Windows après installation de CentOS

Il semble que dans certaines configurations RedHat et Centos n’aiment pas cohabiter sur la même machine avec Windows… En effet si sur une machine qui boote déjà sous Windows on installe en plus (Dual Boot) RH/Centos 7 ou 8 on risque de perdre l’option  pour booter sous Windows.

Heureusement il est facile de rattraper cela à la main.
Voici comment.

Depuis une session root exécuter ces 5 étapes:

1) Avec fdisk trouver la partition de boot

# fdisk -l
Device     Boot     Start        End   Sectors   Size Id Type
/dev/sda1  *         2048    1026047   1024000   500M  7 HPFS/NTFS/exFAT
/dev/sda2         1026048  501093039 500066992 238.5G  7 HPFS/NTFS/exFAT
/dev/sda3       501094400  503191551   2097152     1G 83 Linux
/dev/sda4       503191552 1000214527 497022976   237G  5 Extended
/dev/sda5       503193600 1000214527 497020928   237G 8e Linux LVM


(Il s'agit d'une table de partition  au format MBR)

Repérer la partition qui a une étoile (*) dans sa colonne Boot. Ici il s’agit de la partition mixte UEFI + CSM qui servait à booter  Windows, mais que RH/Centos a ignoré. (Il parait que Fedora n'a pas ce problème).

Ici c’est la partition sda1 (partition 1 du disque sda). Notez que cette partition est formatée en NTFS alors que pour du pur UEFI seul FAT32 est possible.

2) Avec blkid trouver l’identifiant de cette partition de boot

# blkid /dev/sda1
/dev/sda1: UUID="B4FC7F32FC7EEE4C" TYPE="ntfs" PARTUUID="646e83a4-01"

Noter la valeur de UUID (sans les quotes).  Ici c'est B4FC7F32FC7EEE4C

3) Modifier la configuration de grub2

# vim /etc/grub.d/grub40_custom

Ne surtout pas toucher aux 5 lignes déjà en place, et ajouter le menuentry comme indiqué ci-dessous.
Dans ce qui suit:
- hd0 c’est sda
- msdos1 c’est la partition 1
- Remplacer B4FC7F32FC7EEE4C  par le UUID de votre partition bootable affiché par blkid.

#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.
menuentry "Windows 10" {
  insmod part_msdos
  insmod ntfs
  set root='(hd0,msdos1)'
  search --no-floppy --fs-uuid --set=root
B4FC7F32FC7EEE4C
  chainloader +1
}



4) Re-construite la configuration de grub :

# grub2-mkconfig -o /boot/grub2/grub.cfg


5) Rebooter

 # reboot

Vous devriez avoir une option de menu « Windows 10 » et vous devriez pouvoir booter sur Windows.

IMPORTANT:

Bien souvent les problèmes de ce type (OS installé mais non bootable) viennent de l'inadéquation entre 

- la configuration de la procédure de boot utilisée par le bios (Legacy ou UEFI+CSM ou UEFI)

- le partitionnement du disque (MBR ou GPT)

- le mode d’installation du nouvel l'OS (Legacy, UEFI), qui découle souvent de comment l'installateur a été démarré.

Les live CD linux sont alors très utiles pour analyser la configuration du disque.