GRUB2 affiche Windows 7 ou Windows Recovery Environment au lieu de Windows 10

8

Il s'agit d'un Q & A que j'ai récemment compris, j'ai donc posté la réponse ci-dessous.

Après l'installation de Windows 10, à chaque fois que je reçois une mise à jour du noyau ou que je l'exécute, update-grub2elle s'affiche toujours Windows 7ou Windows Recovery Environmentau lieu de Windows 10. Comment résoudre ce problème de façon permanente?

Terrance
la source
Ces changements existent déjà dans (mon Mint 19.2) / usr / lib / os-probes / monté / 20microsoft, mais il renvoie toujours "Windows Vista". Notez que, lorsque le système à double démarrage était Windows 7, il a renvoyé la valeur correcte, il semble donc qu'il soit la source des informations manquantes.
cdg
@cdg Cela devrait être demandé à Linux et Unix car ce site est uniquement pour les versions officielles d'Ubuntu . En outre, vous devez déposer un rapport de bogue avec Mint Development si vous avez déjà tout cela car ils ne le détectent pas correctement.
Terrance

Réponses:

10

Mise à jour: Je viens d'effectuer une nouvelle installation de Xubuntu 14.04 et les entrées du fichier répertorié ci-dessous étaient déjà là. Il semble que l'équipe GRUB ait désormais inclus la mise à jour. Je laisserai cela ici à tous ceux qui pourraient tomber dessus sans la mise à jour de leur système pour le moment.


Mise à jour # 2: si vous créez un Ubuntu 14.04 LiveUSB avec au moins un fichier persistant de 1 Go, cet emplacement de fichier est le même et le fichier persistant permettra aux modifications apportées de rester. Ce fichier ne doit être modifié qu'après le démarrage du système sur la clé USB au Try Ubuntudémarrage.


La raison pour laquelle il affiche toujours Windows 7ou Windows Recovery Environmentau lieu de Windows 10est que le fichier /usr/lib/os-probes/mounted/20microsoftne contient pas l'étiquette pour Windows 10, donc lors de la os-proberdétection du système d'exploitation, il revient à Windows 7ou Windows Recovery Environment.

Pour corriger cela, vous devez apporter les modifications suivantes au fichier suivant (je vais mettre gedit comme éditeur, mais utilisez ce que vous voulez):

sudo gedit /usr/lib/os-probes/mounted/20microsoft

REMARQUE: vous devez toujours effectuer une sauvegarde d'un fichier avant de le modifier!

if item_in_dir -q bootmgr "$2"; then
        # there might be different boot directories in different case as:
        # boot Boot BOOT
        for boot in $(item_in_dir boot "$2"); do
                bcd=$(item_in_dir bcd "$2/$boot")
                if [ -n "$bcd" ]; then
                        if grep -qs "W.i.n.d.o.w.s. .1.0" "$2/$boot/$bcd"; then
                                long="Windows 10 (loader)"
                        elif grep -qs "W.i.n.d.o.w.s. .8" "$2/$boot/$bcd"; then
                                long="Windows 8 (loader)"
                        elif grep -qs "W.i.n.d.o.w.s. .7" "$2/$boot/$bcd"; then
                                long="Windows 7 (loader)"

les changements ci-dessus changent la ligne if grep -qs "W.i.n.d.o.w.s. .8" "$2/$boot/$bcd"; thenen elif grep -qs "W.i.n.d.o.w.s. .8" "$2/$boot/$bcd"; then, et ajoutent if grep -qs "W.i.n.d.o.w.s. .1.0" "$2/$boot/$bcd"; thenet long="Windows 10 (loader)"au-dessus de cette ligne et l'enregistrent.

Une fois enregistré, le fonctionnement os-proberressemble maintenant à ceci:

terrance@terrance-ubuntu:~$ sudo os-prober
[sudo] password for terrance: 
/dev/sdf1:Windows 10 (loader):Windows:chain

puis en l'exécutant update-grub2, vous effectuerez désormais les mises à jour de votre version /boot/grub/grub.cfgpermanente à chaque fois que vous obtiendrez une mise à jour du noyau afin qu'il affiche maintenant la version correcte de Windows (exemple ci-dessous):

terrance@terrance-ubuntu:~$ sudo update-grub2
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.19.0-26-generic
Found initrd image: /boot/initrd.img-3.19.0-26-generic
Found linux image: /boot/vmlinuz-3.13.0-58-generic
Found initrd image: /boot/initrd.img-3.13.0-58-generic
Found linux image: /boot/vmlinuz-3.13.0-57-generic
Found initrd image: /boot/initrd.img-3.13.0-57-generic
Found memtest86+ image: /boot/memtest86+.elf
Found memtest86+ image: /boot/memtest86+.bin
Found Windows 10 (loader) on /dev/sdf1
done

J'espère que cela t'aides!

Terrance
la source
4
Cela a-t-il été publié en amont (sous forme de bogue / correction) pour les responsables de Grub2?
david6
@ david6 Je n'ai aucune idée si c'est le cas. Je viens de faire la découverte hier soir en essayant d'en savoir plus sur GRUB2 et comment il détermine quel système d'exploitation il trouve.
Terrance
Les scripts «20microsoft» semblent désordonnés et peuvent nécessiter d'autres améliorations.
david6