Double fenêtre de démarrage sur le deuxième disque dur, système UEFI / GPT

15

J'aimerais installer linux, mais je ne veux pas risquer d'endommager mon installation Windows actuelle car j'ai entendu beaucoup d'histoires d'horreur. Heureusement, j'ai un disque dur supplémentaire. Puis-je installer linux sur cela, puis sur les fenêtres de démarrage double sans avoir à modifier le lecteur Windows?

De plus, j'ai un "BIOS" UEFI et le lecteur Windows est au format GPT.

boucle d'or
la source

Réponses:

18

Je vais utiliser le terme BIOS ci-dessous lorsque réfère à des concepts qui sont les mêmes pour les nouveaux systèmes UEFI et les systèmes BIOS traditionnels, car bien qu'il s'agisse d'une question orientée UEFI, parler des jibes "BIOS" mieux avec, par exemple, la documentation GRUB et "BIOS / UEFI" est trop maladroit. GRUB (en fait, GRUB 2 - il est souvent utilisé de manière ambiguë) est le chargeur de démarrage installé par linux et utilisé pour le double démarrage de Windows.

Tout d'abord, un mot sur l'ordre des lecteurs et l'ordre de démarrage. L'ordre des lecteurs fait référence à l'ordre dans lequel les lecteurs sont physiquement connectés au bus sur la carte mère (premier lecteur, deuxième lecteur, etc.); ces informations sont rapportées par le BIOS. Ordre de démarragefait référence à la séquence dans laquelle le BIOS recherche un lecteur de démarrage. Ce n'est pas nécessairement le même que l'ordre du lecteur et est généralement configurable via l'écran de configuration du BIOS. L'ordre des lecteurs ne doit pas être configurable ou affecté par l'ordre de démarrage, car ce serait une chose très peu conviviale pour le système d'exploitation (mais en théorie, un BIOS obtus pourrait le faire). De plus, si vous débranchez le premier lecteur, le deuxième lecteur deviendra probablement le premier. Nous allons utiliser des UUID dans la configuration du chargeur de démarrage pour essayer d'éviter des problèmes comme celui-ci (les installateurs Linux contemporains le font également).

Le moyen idéal pour obtenir ce que vous voulez est d'installer linux sur le deuxième lecteur en termes d' ordre de lecteur , puis de le sélectionner d'abord en termes d' ordre de démarrage en utilisant la configuration UEFI. Un avantage supplémentaire de ceci est que vous pouvez ensuite utiliser l'ordre de démarrage BIOS / UEFI pour sélectionner le lecteur Windows et contourner grub si vous le souhaitez. La raison pour laquelle je recommande Linux sur le deuxième lecteur est que GRUB doit "charger en chaîne" le chargeur de démarrage natif de Windows, et le chargeur de démarrage de Windows suppose toujours qu'il se trouve sur le premier lecteur. Il existe cependant un moyen de le tromper si vous préférez ou si vous en avez besoin dans l'autre sens.

Si tout va bien, vous pouvez simplement aller de l'avant et utiliser un CD live ou autre chose et faire cela en utilisant l'installateur GUI. Cependant, tous les programmes d'installation ne sont pas créés égaux, et si cela est vissé et que vous vous retrouvez avec des problèmes tels que:

  1. J'ai installé Linux sur le premier disque et maintenant je ne peux pas démarrer Windows, ou

  2. J'ai installé Linux sur le deuxième disque, mais en utilisant le premier disque pour le chargeur de démarrage, et maintenant je ne peux rien démarrer!

Continuez à lire. Dans le second cas, vous devez d'abord essayer de réinstaller linux sur le deuxième disque, et cette fois assurez-vous que c'est là que va le chargeur de démarrage. La façon la plus simple et la plus infaillible de le faire serait de supprimer temporairement le lecteur Windows de la machine, car nous supposerons qu'il n'y a rien de plus installé dessus, quel que soit l'ordre du lecteur.

Une fois que vous avez installé linux et que vous vous êtes assuré qu'il peut démarrer, rebranchez le lecteur Windows (si vous l'avez supprimé - et rappelez-vous, nous le voulons idéalement d'abord en termes d'ordre de lecteur, et le deuxième lecteur en premier en termes de ordre de démarrage) et passez à l'étape suivante.

Accéder à la configuration GRUB

Démarrez Linux, ouvrez un terminal et

> su root

Le mot de passe root vous sera demandé. À partir de ce moment, vous êtes le superutilisateur de ce terminal (pour vérifier, essayez whoami), alors ne faites rien de stupide. Cependant, vous êtes toujours un utilisateur normal dans l'interface graphique, et puisque nous éditerons un fichier texte, si vous préférez un éditeur GUI, nous devrons changer temporairement la propriété de ce fichier et le répertoire dans lequel il se trouve:

> chown -R yourusername /etc/grub.d/

Si vous obtenez "Opération non autorisée", vous ne l'avez pas sucorrectement. Si vous obtenez chown: invalid user: ‘yourusername’, vous avez pris la dernière commande trop littéralement.

Vous pouvez maintenant naviguer /etc/grub.ddans votre navigateur de fichiers et rechercher un fichier appelé 40_custom. Ça devrait ressembler à ça:

#!/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.

Si vous ne le trouvez pas, dans le terminal racine, entrez les commandes suivantes:

> touch /etc/grub.d/40_custom
> chmod 755 /etc/grub.d/40_custom
> chown yourusername /etc/grub.d/40_custom

Ouvrez-le dans votre éditeur de texte, copiez-collez la partie ci-dessus (en commençant par #!/bin/sh) et passez à l'étape suivante.

Ajout d'une option de démarrage Windows

Copiez-collez ceci avec l'éditeur de texte à la fin du fichier:

menuentry "MS Windows" {
        insmod part_gpt
        insmod search_fs_uuid
        insmod ntfs
        insmod chain
}

Voici la liste des modules dont GRUB aura besoin pour faire avancer les choses ( ntfspeut être superflu, mais ne devrait pas non plus faire de mal). Notez qu'il s'agit d'une entrée incomplète - nous devons ajouter quelques commandes cruciales.

Recherche du chargeur de démarrage Windows Second Stage

Votre installation Linux a probablement monté automatiquement votre partition Windows et vous devriez pouvoir la trouver dans un navigateur de fichiers. Sinon, trouvez un moyen de le faire (si vous ne savez pas comment, posez une question sur ce site). Une fois cela fait, nous devons connaître le point de montage - cela devrait être évident dans le navigateur de fichiers, par exemple /media/ASDF23SF23/. Pour économiser du texte, nous allons mettre cela dans une variable shell:

win="/whatever/the/path/is"

Il ne doit y avoir aucun espace de chaque côté du signe égal. N'incluez aucun élément d'un chemin Windows ici. Cela doit pointer vers le dossier de niveau supérieur sur la partition Windows. Maintenant:

cd $win
find . -name bootmgfw.efi

Cela peut prendre quelques minutes si vous avez une grande partition, mais la première chose qu'elle crache est probablement ce que nous recherchons; il peut y avoir d'autres références dans le système de fichiers contenant de longues chaînes goobledygook - ce n'est pas le cas. Utilisez Ctrl-cpour arrêter la recherche une fois que vous voyez quelque chose de court et de simple comme ./Windows/Boot/EFI/bootmgfw.efiou ./EFI/HP/boot/bootmgfw.efi.

Sauf pour le .début, rappelez-vous ce chemin pour plus tard; vous pouvez le copier dans votre éditeur de texte sur une ligne vierge en bas, car nous allons l'utiliser là-bas. Si vous souhaitez revenir à votre répertoire précédent maintenant, utilisez cd -, bien que peu importe où vous êtes dans le shell à partir de maintenant .

Définir les bons paramètres

GRUB doit pouvoir trouver et transmettre le processus de démarrage au chargeur de démarrage Windows de deuxième étape. Nous avons déjà le chemin sur la partition Windows, mais nous avons également besoin de certains paramètres pour indiquer à GRUB où se trouve cette partition. Il devrait y avoir un outil installé sur votre système appelé grub-probeou (sur, par exemple, Fedora) grub2-probe. Tapez grubpuis appuyez Tabdeux ou trois fois; vous devriez voir une liste comprenant l'un ou l'autre.

> grub-probe --target=hints_string $win

Vous devriez voir une chaîne telle que:

--hint-bios=hd1,msdos1 --hint-efi=hd1,msdos1 --hint-baremetal=ahci1,msdos1

Revenez à l'éditeur de texte avec la configuration GRUB et ajoutez une ligne après toutes les insmodcommandes (mais avant l'accolade fermante) pour qu'elle ressemble à:

    insmod chain
    search --fs-uuid --set=root [the complete "hint bios" string]
}

Ne cassez pas cette ligne et ne permettez pas à votre éditeur de texte de le faire. Il peut s'enrouler sur l'affichage - un moyen facile de faire la différence est d'activer la numérotation des lignes. Prochain:

> grub-probe --target=fs_uuid $win

Cela devrait renvoyer une chaîne plus courte de lettres, de chiffres et de tirets possibles tels que "123A456B789X6X" ou "b942fb5c-2573-4222-acc8-bbb883f19043". Ajoutez cela à la fin de la search --fs-uuidligne après la chaîne de bios de l'indice, séparé par un espace.


Ensuite, si (et seulement si) Windows se trouve sur le deuxième lecteur en termes d' ordre de lecteur , ajoutez une ligne après la search --fs-uuidligne:

    drivemap -s hd0 hd1

C'est "l'astuce" mentionnée plus haut. Notez qu'il n'est pas garanti de fonctionner mais cela ne fait pas de mal d'essayer.


Enfin, la dernière ligne devrait être:

    chainloader (${root})[the Windows path to the bootloader]
}

Pour être clair, par exemple:

    chainloader (${root})/Windows/Boot/EFI/bootmgfw.efi

C'est ça. Enregistrez le fichier et vérifiez dans un navigateur de fichiers pour vous assurer qu'il a vraiment été enregistré et qu'il ressemble à ce qu'il devrait.

Ajouter la nouvelle option de menu à GRUB

Cela se fait avec un outil appelé grub-mkconfigou grub2-mkconfig; il figurera dans la liste que vous avez trouvée Tabprécédemment. Vous pouvez également avoir une commande appelée update-grub. Pour vérifier cela, saisissez-le simplement dans le terminal racine. Si vous obtenez "commande introuvable", vous devez utiliser grub-mkconfigdirectement. Sinon (y compris obtenir une erreur plus longue), vous venez de définir la configuration et pouvez parcourir un peu.

Pour utiliser grub-mkconfigdirectement, nous devons d'abord trouver grub.cfg:

> find /boot -name grub.cfg

Ce sera probablement /boot/grub/grub.cfgou /boot/grub2/grub.cfg.

> grub-mkconfig -o /boot/grub/grub.cfg

update-grubanalysera automatiquement la configuration des erreurs. grub-mkconfigne le fera pas, mais il est important de le faire car il est beaucoup plus facile de les gérer maintenant que lorsque vous essayez de démarrer la machine. Pour cela, utilisez grub-script-check(ou grub2-script-check):

> grub-script-check /boot/grub/grub.cfg

Si ceci (ou update-grub) produit une erreur indiquant un numéro de ligne, c'est le numéro de ligne dans grub.cfg, mais vous devez corriger la partie correspondante dans /etc/grub.d/40_custom(le fichier dans votre éditeur de texte). Vous devrez peut-être être root juste pour regarder l'ancien fichier, alors essayez less /boot/grub/grub.cfgdans le terminal, appuyez sur :et entrez le numéro de ligne. Vous devriez voir votre entrée de menu. Recherchez la faute de frappe, corrigez-la dans l'éditeur de texte, puis exécutez update-grubou à grub-mkconfignouveau.

Lorsque vous avez terminé, vous pouvez fermer l'éditeur de texte et saisir exitle terminal pour quitter le mode superutilisateur.

Redémarrez!

Lorsque vous arrivez au menu grub, faites défiler rapidement vers le bas (avant l'expiration du délai, généralement 5 secondes) jusqu'à l'option "Windows" et testez-le. Si vous obtenez une erreur de message texte de grub, quelque chose ne va pas avec la configuration. Si vous obtenez un message d'erreur de Windows , ce problème se situe entre vous et Microsoft. Ne vous inquiétez pas, cependant, votre lecteur Windows n'a pas été modifié et vous pourrez y démarrer directement en le plaçant d'abord (en termes d'ordre de démarrage) via la configuration du BIOS.

Lorsque vous revenez à Linux, remettez la propriété du /etc/grub.drépertoire et son contenu à leur état d'origine:

sudo chmod 755 /etc/grub.d/40_custom

Les références

  • Manuel GRUB 2

  • Page Arch Linux Wiki GRUB

    Arch possède certaines des meilleures documentations disponibles, et une grande partie (y compris cette page) est principalement applicable à n'importe quelle distribution GNU / Linux.

boucle d'or
la source
2
Le terme techniquement correct que vous recherchez, qui n'est pas non plus maladroit, est micrologiciel , qui peut se présenter sous la forme d'un BIOS ou d'un UEFI.
Milind R
Malheureusement, le micrologiciel a également une signification beaucoup plus générale en ce qu'il se réfère à tout logiciel intégré au matériel.
Kylotan
sur mon bureau, "chain" n'est pas trouvé comme une commande lors du démarrage, mais c'est chainloader dans le fichier 40_custom que j'ai besoin d'écrire. laissez-moi savoir si cela est normal
FlogFR
Très agréable! Cependant, lorsque j'essaie, mon installation de Windows 8 n'apparaîtra pas comme une entrée dans grub2. J'ai corrigé toutes les erreurs de syntaxe et le fichier grub.cfg est créé sans erreur. Veuillez également noter qu'il y a une erreur de syntaxe lorsque chainload est mentionné pour la première fois: chainload $({root})devrait l'être chainload (${root})(je ne peux pas le modifier car il est trop petit d'un changement).
sobek
@sobek Merci pour cela - corrigé. Si vous avez ajouté quelque chose à un fichier /etc/grub.det qu'il n'est pas ajouté lorsque vous générez la configuration, quelque chose de bizarre se passe. Si vous exécutez grub-mkconfigsans -oqu'il crache en sortie standard, cela pourrait aider à confirmer ou à nier que vos ajouts sont en cours de traitement.
goldilocks