GRUB : Différence entre versions
(→Dual-boot : précision sur la cible de grub-mkconfig) |
(typos) |
||
Ligne 248 : | Ligne 248 : | ||
{{file|name={{ic|/etc/grub.d/40_custom}} ou {{ic|/boot/grub/custom.cfg}}|content=<nowiki> | {{file|name={{ic|/etc/grub.d/40_custom}} ou {{ic|/boot/grub/custom.cfg}}|content=<nowiki> | ||
− | menuentry " | + | if [ ${grub_platform} == "efi" ]; then |
− | + | menuentry "Firmware setup" { | |
− | + | echo "Starting UEFI Setup..." | |
− | } | + | fwsetup |
+ | } | ||
+ | fi | ||
</nowiki>}} | </nowiki>}} | ||
− | |||
==== Entrée menu GNU/Linux ==== | ==== Entrée menu GNU/Linux ==== |
Version du 20 février 2019 à 00:07
Grub (GRand Unified Bootloader), anciennement Grub2 est dérivé de PUPA qui était un projet de recherche pour étudier la prochaine génération de GRUB. Il a été réécrit à partir de 0 afin d'offrir modularité et portabilité.
Brièvement, le bootloader est le premier logiciel qui s'exécute lorsque l'ordinateur démarre. Il est responsable du chargement et du transfert de contrôle au noyau. Ce dernier initialise le reste du système d'exploitation. Le nom GRUB fait officiellement référence à la version 2 du logiciel. Voir Page Grub GNU. Si vous cherchez l'article sur la version héritée, consultez GRUB Legacy.
GRUB dispose de quelques limitations spécifiques au système de fichier racine:
Si votre partition racine se trouve sur un système de fichiers non pris en charge, vous devez créer une partition séparée /boot avec un système de fichiers pris en charge. Dans certains cas, la version de développement de GRUB grub-git possède un support natif.
Sommaire
- 1 Notes pour les utilisateurs actuels de GRUB Legacy
- 2 Installation
- 3 Générer le fichier de configuration principal
- 4 Configuration
- 5 Dépannage
Notes pour les utilisateurs actuels de GRUB Legacy
- Il y a des différences dans les commandes de GRUB Legacy et GRUB. (Commandes de GRUB)
- Grub est modulaire. En conséquence, le bootloader est lui-même limité - les modules sont chargés depuis le disque dur si nécessaire pour étendre les fonctionnalités (LVM ou support RAID par exemple).
- Les disques sont toujours numérotés à partir de 0, alors que les partitions sont numérotées à partir de 1 au lieu de 0 et sont préfixées du type de table de partitions. Par exemple, /dev/sda1 serait appelée (hd0,msdos1) (MBR) ou (hd0,gpt1) (GPT).
Installation
Il vous faut installer le paquet grub :
pacman -S grub
Si vous utilisez LVM, RAID, une méthode de chiffrage ou tout autre système faisant appel au module dm-mod, pensez à le charger (si ce n'est déjà fait) :
modprobe dm-mod
Systèmes BIOS
Instructions spécifiques concernant les tables de partitionnement GPT(GUID Partition Table)
Sur une configuration Bios/a mebibyte partition, une partition de démarrage du BIOS est requise. GRUB intègre son core.img dans cette partition.
- Avant d'essayer cette méthode, gardez à l'esprit que tous les systèmes ne pourront pas supporter ce schéma de partitionnement. Pour en savoir plus sur les tables de partition les tables de partition GUID.
- Cette partition supplémentaire n'est nécessaire que sur un schéma de partitionnement BIOS/GPT. Auparavant, pour un schéma de partitionnement GRUB, BIOS/MBR, GRUB utilisait l'espace Post-MBR pour l'intégration du core.img). GRUB pour GPT, cependant, n'utilise pas l'espace Post-GPT pour se conformer aux spécifications GPT qui nécessitent des limites de disque de 1MB / 2048 secteurs de disque.
- Pour les systèmes UEFI, cette partition supplémentaire n'est pas nécessaire.. Cependant, ils nécessitent encore un ESP.
Créez une partition de 1Mib (+ 1M avec fdisk ou gdisk) sur le disque sans système de fichiers et avec le type Biosboot. Sélectionnez BIOS boot et le type de partition numéro 4 pour fdisk, ef02 pour gdisk et bios_grub pour parted. Cette partition peut être dans n'importe quel ordre de position mais doit être sur les 2 premiers TiB du disque. Cette partition doit être créée avant l'installation de GRUB. Lorsque la partition est prête, installez le chargeur de démarrage selon les instructions ci-dessous.
Si vous utilisez un schéma de partitionnement GPT, il est recommandé de créer une partition au début du disque avec pour type bios_grub (parted) 0xEF02 (gptfdisk), exemple :
parted /dev/disk set partition-number bios_grub on
Instructions spécifiques concernant les Master Boot Record (MBR)
L'espace post-MBR (après la région MBR de 512 octets et avant le début de la première partition) dans de nombreux systèmes partitionnés MBR (ou «msdos») est de 31 KiB lorsque les problèmes d'alignement de cylindre de compatibilité DOS sont satisfaits dans la table de partition. Cependant, un écart après MBR d'environ 1 à 2 MiB est recommandé pour fournir suffisamment de place pour intégrer le core.img de GRUB (FS#24103). Il est conseillé d'utiliser un outil de partitionnement qui supporte l'alignement de partition de 1 Mo pour obtenir cet espace.
/usr/bin/grub-bios-setup : attention : core.img est exceptionnellement grand. Il ne tiendra pas dans la zone d'embarquage. /usr/bin/grub-bios-setup : erreur : l'embarquage est impossible, il est pourtant nécessaire pour les installations RAID et LVM.
Dans ce cas, il vous faut prévoir plus de place, 1Mo est suffisant :
# fdisk -l /dev/sda
[...] Périphérique Amorce Début Fin Blocs Id Système /dev/sda1 2048 204799 101376 83 Linux [...]
Recommendations de partitionnement
(Source)
Que ce soit en partitionnement GPT ou en MBR, assurez vous que la première partition commence au minimum à partir du secteur 63 (31Ko), par exemple pour un partitionnement MBR :
# fdisk -l /dev/sda
[...] Périphérique Amorce Début Fin Blocs Id Système /dev/sda1 63 257039 128488+ 83 Linux [...]
Mise en place
Pour l'installer sur le disque /dev/sda :
grub-install --target=i386-pc --no-floppy --recheck /dev/sda
Vous pouvez éventuellement juste générer un fichier core.img qui permet de chaîner depuis un GRUB Legacy :
grub-install --target=i386-pc --grub-setup=/bin/true --no-floppy --recheck /dev/sda
Il faudra passer /boot/grub/i386-pc/core.img à grub 0.x.
Systèmes UEFI
Le firmware UEFI n'est pas mis en oeuvre de manière cohérente par les fabricants de matériel. Les exemples d'installation fournis sont destinés à travailler sur la plus large gamme possible de systèmes UEFI. Ceux qui éprouvent des problèmes malgré l'application de ces méthodes sont encouragés à partager des informations détaillées pour leurs hardware spécifiques, en particulier dans la résolution de ces problèmes, Un article GRUB/EFI(en) a été fourni pour de tels cas.
Vérifiez si vous avez GPT et un ESP
Une partition EFI System (ESP) est nécessaire sur chaque disque que vous souhaitez démarrer à l'aide d'EFI. GPT n'est pas strictement nécessaire, mais il est fortement recommandé et est la seule méthode actuellement prise en charge dans cet article. Si vous installez Arch Linux sur un ordinateur compatible EFI avec un système d'exploitation déjà opérationnel, comme Windows 8, par exemple, il est très probable que vous possédez déjà un ESP. Pour vérifier le GPT et pour un ESP, utilisez l'option partitionner en tant que root pour imprimer la table de partition du disque à partir duquel vous souhaitez démarrer.
# parted /dev/sdx print
Pour GPT, recherchez une table de partition gpt. Pour EFI, recherchez une petite partition (512 MiB ou moins) avec un système de fichiers vfat/fat32 et l'option "boot" activé, il devrait y avoir un répertoire nommé "EFI". Si ces critères sont respectés, c'est votre ESP. Notez le numéro de la partition. Vous devrez pouvoir l'identifiee, afin que vous puissiez le monter plus tard lors de l'installation de GRUB.
Créer la partition système UEFI
Tables de partition GPT
Au choix:
- Utiliser GNU Parted/GParted: créer une partition FAT32. Placer le drapeau "boot" sur cette partition.
- Utiliser GPT fdisk (aka gdisk): créer une partition avec gdisk de type "EF00". Puis formater cette partition en FAT32 en utilisant mkfs.vfat -F32 /dev/<PARTITION>
Tables de partition MBR
Deux possibilités:
- Utiliser GNU Parted/GParted: créer une partition FAT32. Changer le code type de cette partition à 0xEF en utilisant fdisk, cfdisk ou sfdisk.
- Utiliser fdisk: créer une partition de type 0xEF et la formater en FAT32 avec mkfs.vfat -F32 /dev/<PARTITION>
x86_64 ou i386
Par la suite, on suppose que vous avez un EFI x86_64, dans le cas contraire, il suffit de remplacer x86_64 par i386 dans les commandes ci-dessous.
- Les PCs ont pour la plupart un UEFI 2.x x86_64.
- Pour les macs, vous pouvez lancer la commande suivante pour connaître l'architecture de votre UEFI :
ioreg -l -p IODeviceTree | grep firmware-abi
EFI32 pour i386 et EFI64 pour x86_64.
Mise en place
- Pour ce faire, vous devez démarrer en utilisant UEFI et non le BIOS. Si vous avez démarré en copiant simplement le fichier ISO sur un disque USB, vous devrez suivre ce guide (en) pour créer un USB démarrant sur UEFI à partir de l'ISO sans quoi grub-install affichera des erreurs.
- Il est recommandé de lire et de comprendre les pages UEFI, GPT et UEFI Bootlaoders.
Installez les paquets grub(si ce n'est déjà fait) et efibootmgr. GRUB est le chargeur de démarrage, efibootmgr crée des entrées de basculement .efi amorçables utilisées par le script d'installation GRUB.
La partition système UEFI devra être montée dans /boot/efi/ pour que le script d'installation de GRUB puisse la détecter:
mkdir -p /boot/efi mount -t vfat /dev/sdXY /boot/efi
Créer le répertoire /boot/efi/EFI
mkdir -p /boot/efi/EFI
Installez l'application UEFI GRUB dans /boot/efi/EFI/arch_grub et ses modules dans /boot/grub/x86_64-efi à l'aide de :
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=arch_grub --recheck
Le --bootloader-id est ce qui apparaît dans les options de démarrage pour identifier l'option de démarrage GRUB EFI; Assurez-vous que ce soit quelque chose que vous reconnaîtrez plus tard. L'installation créera un répertoire du même nom sous /boot/EFI/ où le chargeur de démarrage binaire EFI sera placé.
Si vous utilisez le démarrage en tant que votre bootloader-id, vous aurez la capacité supplémentaire de pouvoir démarrer à partir du lecteur dans le cas où les variables EFI sont réinitialisées ou vous déplacez le lecteur vers un autre ordinateur.
Habituellement, vous pouvez le faire en sélectionnant le lecteur lui-même de la manière dont vous utiliserez le BIOS. Si vous êtes en dual-boot avec Windows, soyez conscient que Windows a généralement un dossier appelé boot dans le dossier EFI de la partition EFI, mais le seul but de ce service est de recréer l'option de démarrage EFI pour Windows.
Une fois l'installation ci-dessus terminée, le répertoire GRUB principal se trouve à /boot/grub .
- Alors que certaines distributions nécessitent un répertoire /boot/efi ou /boot/EFI, Arch ne l'utilise pas.
- --efi-directory et --bootloader-id sont spécifiques à GRUB UEFI. --efi-directory spécifie le point de montage de l'ESP. Il remplace --root-directory, qui est obsolète.
- Vous pouvez noter l'absence d'une option <device_path> (par exemple: /dev/sdx) dans la commande grub-install. En fait, n'importe quel <device_path> fourni sera ignoré par le script d'installation GRUB, car les chargeurs de démarrage UEFI n'utilisent pas un secteur de démarrage MBR ou partition.
Vous pouvez maintenant être en mesure de démarrer votre système UEFI après création d'un fichier grub.cfg.
Générer le fichier de configuration principal
Après l'installation, le fichier de configuration principal grub.cfg doit être généré. Le processus de génération peut être influencé par une variété d'options dans /etc/default/grub et scripts dans /etc/grub.d/; Voir #Configuration.
Si vous n'avez pas fait de configuration supplémentaire, la génération automatique déterminera le système de fichiers racine du système à démarrer pour le fichier de configuration. Pour réussir, il est important que le système soit démarré ou chrooté.
{{note : Rappelez-vous que grub.cfg doit être régénéré après une modification de /etc/default/grub ou des fichiers dans /etc/grub.d/. }}
Utilisez l'outil grub-mkconfig pour générer grub.cfg:
# grub-mkconfig -o /boot/grub/grub.cfg
Par défaut, les scripts de génération ajoutent automatiquement des entrées de menu pour Arch Linux à toute configuration générée. Voir en:Multiboot_USB_drive#Boot_entries et Dual Boot pour les entrées de menu personnalisées pour d'autres systèmes.
{{Astuce: Pour que grub-mkconfig recherche d'autres systèmes installés, installez le paquet os-prober. }}
- Le chemin du fichier par défaut est /boot/grub/grub.cfg, et non /boot/grub/i386-pc/grub.cfg.
- Si vous essayez d'exécuter grub-mkconfig dans un conteneur chroot ou systemd-nspawn, vous remarquerez peut-être que cela ne fonctionne pas, avec l'erreur suivante: grub-probe cannot get the "canonical path of /dev/sdaX. Dans ce cas, essayez d'utiliser arch-chroot comme décrit dans la publication BBS post.
Configuration
Cette section ne couvre que l'édition du fichier de configuration /etc/default/grub. Trucs et Astuces Grub(en, traduction à venir) pour plus d'informations.
N'oubliez pas de toujours générer le fichier de configuration principal après avoir effectué des modifications dans /etc/default/grub.
Arguments supplémentaires
Pour passer des arguments supplémentaires personnalisés à l'image Linux, vous pouvez définir les variables GRUB_CMDLINE_LINUX + GRUB_CMDLINE_LINUX_DEFAULT dans /etc/default /grub. Les deux sont ajoutés l'un à l'autre et passés au noyau lors de la génération d'entrées de démarrage régulières. Pour l'entrée de démarrage recovery, seul GRUB_CMDLINE_LINUX est utilisé dans la génération.
Par défaut, "Shutdown"grub-mkconfig détermine l'UUID du système de fichiers racine pour la configuration. Pour désactiver cela, décommenter:
GRUB_DISABLE_LINUX_UUID = true
Pour générer l'entrée recovery de GRUB, vous devez également commenter:
#GRUB_DISABLE_RECOVERY = true dans /etc default/grub
Vous pouvez également utiliser:
GRUB_CMDLINE_LINUX = "resume = UUID = uuid-of-swap-partition"
Voir les paramètres Kernel(en) pour plus d'informations.
Dual-boot
La meilleure façon d'ajouter d'autres entrées consiste à modifier le /etc/grub.d/40_custom ou /boot/grub/custom.cfg. Les entrées de ce fichier seront automatiquement ajoutées en lançant grub-mkconfig :
# grub-mkconfig -o /boot/grub/grub.cfg
menuentry "System shutdown" { echo "System shutting down..." halt }
menuentry "System restart" { echo "System rebooting..." reboot }
if [ ${grub_platform} == "efi" ]; then menuentry "Firmware setup" { echo "Starting UEFI Setup..." fwsetup } fi
En supposant que cette autre distribution soit sur la partition sda2:
menuentry "Other Linux" { set root=(hd0,2) linux /boot/vmlinuz (Ajoutez d'autres options ici) initrd /boot/initrd.img (si nécessaire) }
Sinon, laissez grub rechercher la partition appropriée par UUID ou label:
menuentry "Other Linux" { # En suposant que l'UUID soit {{ic|763A-9CB6}} search --set=root --fs-uuid 763A-9CB6 # search by label OTHER_LINUX (Assurrez vous que le label soit facilement identifiable) #search --set=root --label OTHER_LINUX linux /boot/vmlinuz (Ajoutez d'autres options ici, si nécessaire, par exemple: {{ic|root=UUID=763A-9CB6}}) initrd /boot/initrd.img (si nécessaire) }
menuentry "Other Linux (Encrypted)"{ insmod luks cryptomount (hd0,2) set root=(crypto0) linux /boot/vmlinuz cryptdevice=/dev/sda2:cryptroot root=/dev/mapper/cryptroot (add more options if required) initrd /boot/initrd.img (If the other kernel uses/needs one) }
Les trois méthodes suivantes nécessitent que FreeBSD soit installé sur une seule partition avec UFS (v2). En supposant que la table de partition BSD imbriquée se trouve sur sda4:
Charger directement le noyau
menuentry 'FreeBSD' { insmod ufs2 set root='hd0,gpt4,bsd1' ## or 'hd0,msdos4,bsd1', if using an IBM-PC (MS-DOS) style partition table kfreebsd /boot/kernel/kernel kfreebsd_loadenv /boot/device.hints set kFreeBSD.vfs.root.mountfrom=ufs:/dev/ada0s4a set kFreeBSD.vfs.root.mountfrom.options=rw }
Démarrer avec le chargeur de BSD
menuentry 'FreeBSD' { insmod ufs2 set root='(hd0,4)' kfreebsd /boot/loader }
Menu entrée pour Windows installé en mode UEFI-GPT
Ce mode détermine l'emplacement du chargeur de démarrage de Windows et le chainload après Grub une fois l'entrée du menu sera sélectionnée. La tâche principale ici est de trouver la partition EFI et d'exécuter le chargeur de démarrage.
Cette entrée menune fonctionnera qu'en UEFI boot mode. Plus d'info ici en:Dual_boot_with_Windows#Windows_UEFI_vs_BIOS_limitations.
if [ "${grub_platform}" == "efi" ]; then menuentry "Microsoft Windows Vista/7/8/8.1 UEFI-GPT" { insmod part_gpt insmod fat insmod search_fs_uuid insmod chain search --fs-uuid --set=root $hints_string $fs_uuid chainloader /EFI/Microsoft/Boot/bootmgfw.efi } fi
$ hints_string et $ fs_uuid sont obtenus avec les deux commandes suivantes.
La commande $ fs_uuid détermine l'UUID de la partition EFI:
# grub-probe --target=fs_uuid $esp/EFI/Microsoft/Boot/bootmgfw.efi 1ce5-7f28
Sinon, on peut exécuter blkid (en tant que root) et lire l'UUID de la partition EFI à partir de là.
La commande $ hints_string déterminera l'emplacement de la partition EFI, dans ce cas le hd0:
# grub-probe --target=hints_string $esp/EFI/Microsoft/Boot/bootmgfw.ef --hint-bios=hd0,gpt1 --hint-efi=hd0,gpt1 --hint-baremetal=ahci0,gpt1
Pour Windows XP, remplacez bootmgr par NTLDR dans les commandes ci-dessus. Notez aussi qu'il ne peut y avoir une partition SYSTEM_RESERVED séparée; Il suffit de chercher le fichier NTLDR sur votre partition Windows.
Ces deux commandes suppose que l'ESP windows et monté sur $esp
Windows installed in BIOS-MBR mode
GRUB prend en charge l'amorçage de bootmgr directement et le chainload n'est plus nécessaire pour démarrer Windows dans une configuration BIOS-MBR.
C'est la partition du système qui a /bootmgr, pas votre partition "réelle" Windows (en général C:). Dans la sortie blkid, la partition système est celle avec LABEL="SYSTEM RESERVED" ou LABEL="SYSTEM" et n'a qu'une taille de 100 à 200 Mo (tout comme la partition de démarrage pour Arch). Voir Wikipedia: Wikipedia:System partition and boot partition pour plus d'informations.
Tout au long de cette section, on suppose que votre partition Windows est /dev/sda1. Une partition différente changera toutes les instances de hd0, msdos1. Tout d'abord, trouvez l'UUID du système de fichiers NTFS de la partition système de Windows où se trouve le bootmgr et ses fichiers. Par exemple, si le bootmgr de windows se trouve sur /media/SYSTEM_RESERVED/bootmgr:
Pour Windows Vista/7/8/8.1/10:
if [ "${grub_platform}" == "pc" ]; then menuentry "Microsoft Windows Vista/7/8/8.1 BIOS-MBR" { insmod part_msdos insmod ntfs insmod search_fs_uuid insmod ntldr search --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 69B235F6749E84CE ntldr /bootmgr } fi
Pour Windows XP:
if [ "${grub_platform}" == "pc" ]; then menuentry "Microsoft Windows XP" { insmod part_msdos insmod ntfs insmod search_fs_uuid insmod ntldr search --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 69B235F6749E84CE ntldr /ntldr } fi
Dans les deux exemples 69B235F6749E84CE est l'UUID de partition qui peut être trouvé avec la commande lsblk --fs.
{{Note| Dans certains cas, si vous installez GRUB avant un Windows 8 propre, vous ne pouvrrz pas démarrer Windows vous aurez une erreur avec \boot\bcd (code d'erreur0xc000000f). Vous pouvez le réparer grâce au Windows Recovery Console (cmd à partir du disque d'installation) et exécuter:
x:\> "bootrec.exe /fixboot" x:\> "bootrec.exe /RebuildBcd".
N'utilisez pas bootrec.exe /Fixmbr car il va effacer le GRUB. Vous pouvez aussi utiliser la fonction de réparation de démarrage dans le menu Dépannage - il n'effacera pas GRUB et corrigera la plupart des erreurs. Le mieux étant de ne laissé connécté que disque dur cible et sur votre le dique d'ammorcage, car Windows ne parvient généralement pas à réparer les informations de démarrage si d'autres périphériques sont connectés.
/etc/grub.d/40_custom peut être utilisé comme modèle pour créer /etc/grub.d/nn_custom. Où nn définit la priorité, indiquant l'ordre d'exécution des scripts. L'ordre scripts déterminent le placement dans le menu de démarrage de grub.
Nn devra être supérieur à 06 pour s'assurer que les scripts nécessaires soient exécutés en premier.
Dépannage
Restaurer GRUB
GRUB peut être installé directement depuis votre système ou depuis un live-cd via Chroot.
Il suffira de relancer les commandes selon votre système : BIOS ou EFI
grub-install échoue
Vous pouvez éventuellement lui rajouter l'option --debug afin d'avoir plus de précision sur la raison de l'échec.