La machine UEFI ne démarre pas Ubuntu par le biais du catalogue de démarrage NVRAM. Comment réparer?

Une réponse postée ici devrait:

  • Évitez de demander à l’utilisateur de télécharger et d’installer des packages ou des PPA supplémentaires.
  • Soyez aussi simple et rapide que possible. (J’ai essayé la réparation de démarrage et cela ne s’est pas qualifié.)
  • Probablement fournir un script pour les utilisateurs qui n’ont pas beaucoup d’expérience avec le terminal.

Des problèmes similaires comme ceux-ci ont été postés à plusieurs resockets sur le site:

  • Une version récente d’Ubuntu a été installée avec succès sur un ordinateur compatible UEFI fourni avec une copie préinstallée de Windows 8 ou une version ultérieure.
    • La sortie de efibootmgr -v montre que /efi/ubuntu/shimx64.efi a été enregistré en tant que ubuntu . (Ces nouvelles entrées de démarrage sont généralement ajoutées avec la priorité la plus élevée. Voir aussi Modification de l’ordre de démarrage à l’aide de efibootmgr )
    • Après le redémarrage, aucun menu de sélection de système d’exploitation (GRUB) n’a été affiché et la machine a été démarrée directement sous Windows.
  • Lorsque vous accédez au menu de configuration du firmware (anciennement appelé BIOS):
    • Il n’y a aucune indication sur la façon de modifier l’ordre de démarrage pour des systèmes d’exploitation individuels, ni aucun système d’exploitation (tel que Windows Boot Manager ) affiché, uniquement des périphériques.
    • La fonctionnalité de démarrage sécurisé est désactivée dans les parameters du microprogramme.
  • Ubuntu a été installé en démarrant le média en direct en mode UEFI , et non en exécutant l’ installateur WUBI sous Windows.
  • L’installation de Windows elle-même n’a pas été modifiée, remplacée ou effacée.
    • Le lecteur contient une table de partitions GPT.
    • Windows Diskmanagement indique qu’il existe au moins les 3 partitions suivantes sur le disque:
      • Partition système EFI
      • Partition Windows
      • une partition RAW illisible qui pourrait être l’installation d’Ubuntu
  • Vous avez essayé de supprimer complètement le répertoire \EFI\BOOT\ avant de le sauvegarder (!).

Cela indique généralement un problème lié au chargeur de démarrage ou au processus de démarrage par défaut, codés en dur pour démarrer Windows. Dans la plupart des cas, cela peut être facilement résolu en remplaçant \EFI\BOOT\BOOTx64.EFI par un autre fichier permettant également de démarrer d’autres systèmes d’exploitation.

La réponse courte

Vous pouvez créer un bootx64.efi binary bootx64.efi partir du média live Ubuntu avec grub-mkimage et écrire un grub.cfg personnalisé pour charger en chaîne les chargeurs que vous ne voulez pas démarrer et copier les deux fichiers dans la partition système EFI (ESP) dans le répertoire. \EFI\BOOT\ .

Si vous ne connaissez pas bien le terminal, le script disponible dans la section suivante de cette réponse le fera pour vous. Pour plus de détails, consultez la section Détails techniques dans La réponse plus longue .

Scripté pour votre commodité

En ce qui concerne ce script:

  • Soyez averti que ce script installe le paquet grub-efi-amd64 endroit où il s’exécute et qu’il va donc interrompre les installations MBR existantes . Ne l’exécutez probablement que depuis un média en direct, si possible.
  • De préférence, vous connaissez déjà le nom d’appareil de votre ESP.
  • Vous collez simplement le code ci-dessous dans un terminal ouvert Ctrl + Alt + t et exécutez-le Entrée .
  • Vous pouvez annuler des scripts et des programmes dans un terminal avec Crtl + c .
  • Les fichiers du lecteur sur lequel le média live a été démarré sont accessibles via /isodevice . GUI: Computerisodevice dans Nautilus / File Manager.
 echo -en "\ec"; \ if [ -e "/boot/efi/EFI" ] && [ $(mount | grep -c "/boot/efi type vfat") -gt 0 ]; then \ esp=$(mount | grep "/boot/efi type vfat" | sed -e 's/ on.*//'); \ echo "The following device appears to be mounted as an EFI System Partition: $esp"; \ read -p "Is that correct \"yes\" or \"no\"? Note, that answering \"no\" will unmount $esp! " correctesp; \ if [ "$correctesp" == "no" ]; then \ sudo umount "$esp"; \ elif [ "x$correctesp" != "xyes" ]; then \ echo "Invalid input, refusing to do anything."; \ fi; \ fi; \ if ! [ -e "/boot/efi/EFI" ] && ! [ $(mount | grep -c "/boot/efi type vfat") -gt 0 ]; then \ echo "Possible EFI System Partitions (ESP) found, but none appear to be mounted:"; \ sudo blkid -t TYPE="vfat"; \ read -p "Please enter the device name of your ESP (/dev/sd[az][1-9]): " esp; \ sudo mkdir -p "/boot/efi"; \ if [ "$(echo $esp | cut -c 1-5)" == "/dev/" ]; then \ sudo mount "$esp" "/boot/efi"; \ else \ echo "Invalid input, refusing to do anything."; \ fi; \ sudo mkdir -p "/boot/efi/EFI"; \ correctesp="yes"; \ fi; \ if [ -e "/boot/efi/EFI" ] && [ $(mount | grep -c "/boot/efi type vfat") -gt 0 ] && [ "$correctesp" == "yes" ]; then \ project="$HOME/uefi-bootfix"; \ mkdir -p "$project"; \ echo "--- Begin installing grub-efi-amd64 package (could throw some dpkg errors) ---"; \ sudo apt-get install -y grub-efi-amd64; \ echo "--- End of installing grub-efi-amd64 ---"; \ echo "--- Installing GRUB EFI image and configuration to ESP ---"; \ grub-mkimage -o "$project/bootx64.efi" -p "/efi/boot" -O x86_64-efi fat iso9660 part_gpt part_msdos normal boot linux configfile loopback chain efifwsetup efi_gop efi_uga ls search search_label search_fs_uuid search_fs_file exfat ext2 ntfs btrfs hfsplus udf; \ echo -e "set timeout=3\nmenuentry 'Ubuntu' {\n\tchainloader /efi/ubuntu/grubx64.efi\n}\nmenuentry 'Windows' {\n\tchainloader /efi/Microsoft/Boot/bootmgfw.efi\n}\nmenuentry 'Firmware Setup' {\n\tfwsetup\n}\nmenuentry 'ubuntu-14.04.1-desktop-amd64.iso' {\n\tset isofile="/efi/boot/ubuntu-14.04.1-desktop-amd64.iso"\n\tloopback loop $isofile\n\tlinux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=$isofile noprompt noeject quiet splash\n\tinitrd (loop)/casper/initrd.lz\n}" > "$project/grub.cfg"; \ sudo mkdir -p "/boot/efi/EFI/boot"; \ if [ -e "/boot/efi/EFI/boot/bootx64.efi" ]; then \ sudo cp -v "/boot/efi/EFI/boot/bootx64.efi" "/boot/efi/EFI/boot/bootx64_uefi-bootfix-backup-$(date +%F_%H-%M-%S).efi"; \ fi; \ sudo cp -v "$project/bootx64.efi" "/boot/efi/EFI/boot/bootx64.efi"; \ sudo cp -v "$project/grub.cfg" "/boot/efi/EFI/boot/grub.cfg"; \ echo "--- Done. ---"; \ fi 

La réponse la plus longue

Le problème

La spécification UEFI recommande aux développeurs de microprogrammes de démarrer via un chargeur de démarrage par défaut nommé \EFI\BOOT\BOOT{arch}.EFI pour pouvoir démarrer à partir d’un support externe, par exemple en utilisant des entrées NVRAM de la plate-forme – la carte mère des ordinateurs – pour démarrer un système d’exploitation particulier. système n’est pas possible. Les valeurs actuellement définies pour arch sont x64 pour AMD64, ia32 pour i386 et ARM ou A64 pour ARM.

Windows et Fedora installent un tel chargeur de démarrage sur l’ESP, contrairement à Ubuntu. Le micrologiciel de certains ordinateurs – tels que les ordinateurs portables à prix économiques – montre un comportement dans lequel ces périphériques semblent ignorer complètement les chargeurs de démarrage UEFI correctement enregistrés dans le catalogue de démarrage NVRAM et démarrer par défaut à partir de \EFI\BOOT\BOOT{arch}.EFI , qui entraîner le démarrage de Windows au lieu d’Ubuntu.

Détails techniques

Cette configuration ne prend actuellement pas en charge le démarrage sécurisé et n’a pas non plus été testée pour les ordinateurs Apple, car je ne possède pas un tel ordinateur. (L’aide est très appréciée.)

Si cela n’était pas clair jusqu’à présent: cela permettra également de démarrer les installations du système d’exploitation sur le disque d’un autre ordinateur compatible UEFI, comme c’est le cas avec le MBR hérité.

Générer l’image bootx64.efi avec GRUB

 grub-mkimage -o bootx64.efi -p /efi/boot -O x86_64-efi fat iso9660 part_gpt part_msdos normal boot linux configfile loopback chain efifwsetup efi_gop efi_uga ls search search_label search_fs_uuid search_fs_file exfat ext2 ntfs btrfs hfsplus udf 

Créer un fichier grub.cfg correspondant

Cette configuration couvre les cas de base du démarrage d’Ubuntu, du démarrage de Windows et du lancement de la configuration du microprogramme. La dernière entrée permet le assembly en boucle et le démarrage d’une image ISO, ce qui peut paraître étrange au début, car l’ESP ne fait généralement que quelques centaines de mégaoctets et ne peut pas stocker de gros fichiers, mais les deux fichiers fonctionnent également sur des clés USB au format FAT. Un lecteur USB à démarrage multiple avec plusieurs ISO est à quelques modifications près. Vous pouvez aussi facilement remplacer ubuntu par fedora pour créer une autre entrée de menu qui initialise Fedora ou toute autre dissortingbution Linux. Il suffit de jeter un coup d’œil sur le contenu de votre ESP.

 set timeout=3 menuentry 'Ubuntu' { chainloader /efi/ubuntu/grubx64.efi } menuentry 'Windows' { chainloader /efi/Microsoft/Boot/bootmgfw.efi } menuentry 'Firmware Setup' { fwsetup } menuentry 'ubuntu-14.04.1-desktop-amd64.iso' { set isofile="/efi/boot/ubuntu-14.04.1-desktop-amd64.iso" loopback loop $isofile linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=$isofile noprompt noeject quiet splash initrd (loop)/casper/initrd.lz } 

annexe

Qu’en est-il de gummiboot et de PreLoader?

J’ai posté quelque chose comme ça dans le passé et il n’y a rien de mal à ça, autant que je sache. Cela fonctionne même avec Secure Boot. Bien si cela a fonctionné pour vous, mais l’expérience utilisateur, y compris le téléchargement, la création et l’extraction manuelle de plusieurs fichiers, n’est pas tout à fait optimale et plutôt difficile pour l’utilisateur moyen.

Exemple de sortie

Exemple de sortie de l’exécution du script à partir d’un média en direct:

 Possible EFI System Partitions (ESP) found, but none appear to be mounted: /dev/sda1: LABEL="ESP W8" UUID="8AEF-2F66" TYPE="vfat" /dev/sdb1: LABEL="ESP HDD" UUID="CBB5-B769" TYPE="vfat" /dev/sdc1: LABEL="ESP EVO" UUID="288D-5954" TYPE="vfat" /dev/sdd1: LABEL="SANDISK" UUID="B67A-5BFF" TYPE="vfat" Please enter the device name of your ESP (/dev/sd[az][1-9]): /dev/sdb1 --- Begin installing grub-efi-amd64 package (could throw some dpkg errors) --- Reading package lists... Done Building dependency tree Reading state information... Done The following extra packages will be installed: efibootmgr grub-efi-amd64-bin The following packages will be REMOVED: grub-gfxpayload-lists grub-pc The following NEW packages will be installed: efibootmgr grub-efi-amd64 grub-efi-amd64-bin 0 upgraded, 3 newly installed, 2 to remove and 0 not upgraded. Need to get 0 B/722 kB of archives. After this operation, 2,399 kB of additional disk space will be used. Preconfiguring packages ... (Reading database ... 169555 files and directories currently installed.) Removing grub-gfxpayload-lists (0.6) ... Removing grub-pc (2.02~beta2-9ubuntu1) ... Processing sortingggers for man-db (2.6.7.1-1) ... Selecting previously unselected package efibootmgr. (Reading database ... 169536 files and directories currently installed.) Preparing to unpack .../efibootmgr_0.5.4-7ubuntu1_amd64.deb ... Unpacking efibootmgr (0.5.4-7ubuntu1) ... Selecting previously unselected package grub-efi-amd64-bin. Preparing to unpack .../grub-efi-amd64-bin_2.02~beta2-9ubuntu1_amd64.deb ... Unpacking grub-efi-amd64-bin (2.02~beta2-9ubuntu1) ... Selecting previously unselected package grub-efi-amd64. Preparing to unpack .../grub-efi-amd64_2.02~beta2-9ubuntu1_amd64.deb ... Unpacking grub-efi-amd64 (2.02~beta2-9ubuntu1) ... Processing sortingggers for man-db (2.6.7.1-1) ... Setting up efibootmgr (0.5.4-7ubuntu1) ... Setting up grub-efi-amd64-bin (2.02~beta2-9ubuntu1) ... Setting up grub-efi-amd64 (2.02~beta2-9ubuntu1) ... Installing for x86_64-efi platform. grub-install: error: failed to get canonical path of `/cow'. dpkg: error processing package grub-efi-amd64 (--configure): subprocess installed post-installation script returned error exit status 1 Errors were encountered while processing: grub-efi-amd64 E: Sub-process /usr/bin/dpkg returned an error code (1) --- End of installing grub-efi-amd64 --- --- Installing GRUB EFI image and configuration to ESP --- '/boot/efi/EFI/boot/bootx64.efi' -> '/boot/efi/EFI/boot/bootx64_uefi-bootfix-backup-2014-11-13_22-39-42.efi' '/home/ubuntu/uefi-bootfix/bootx64.efi' -> '/boot/efi/EFI/boot/bootx64.efi' '/home/ubuntu/uefi-bootfix/grub.cfg' -> '/boot/efi/EFI/boot/grub.cfg' --- Done. --- 

La sortie de efibootmgr -v montre que /efi/ubuntu/shimx64.efi a été enregistré en tant que ubuntu. (Ces nouvelles entrées de démarrage sont généralement ajoutées avec la priorité la plus élevée.)

Une sortie de efibootmgr aurait aidé à déterminer si la commande était correcte.

Donc, à ma connaissance, il s’agit de changer l’ordre de démarrage afin que l’entrée pour grub soit celle par défaut. J’ai eu ce problème aussi.

Comme vous ne pouvez pas démarrer ubuntu pour résoudre ceci ou le faire dans le UEFI / BIOS, vous pouvez démarrer un LiveCD d’Ubuntu et vous connecter à un terminal ou à une console.

Vous ouvrez un teminal et courez

 # sudo -i # apt-get install efibootmgr # efibootmgr BootCurrent: 0003 Timeout: 0 seconds BootOrder: 0003,0002,0004,2001 Boot0000* UEFI Onboard LAN IPv6 Boot0001* UEFI Onboard LAN IPv4 Boot0002* ubuntu Boot0003* Windows Boot Manager Boot0004* Ubuntu Boot2001* EFI USB Device 

et vous changez l’ordre des entrées de démarrage

 # efibootmgr -o 0002,0003,0004,2001 

et relancez efibootmgr pour vérifier que le changement est effectif. cela devrait changer la valeur de bootnext aussi, sinon vous pouvez exécuter

 # efibootmgr -n 0002