Ubuntu 16.04 est préinstallé sur mon ordinateur portable. J'ai installé Windows 10 et Arch. Quand j'ai installé grub pour Arch, j'ai remarqué quelque chose d'étrange: ma partition Ubuntu n'a pas été trouvée par os-prober. J'ai ensuite ouvert la partition où Ubuntu est installé par défaut (/dev/sda3
), et j'ai constaté qu'elle conserve son propre dossier boot
. Mon ESP actuel (/dev/sda1
) est monté dans /boot/efi
sur /dev/sda3
(la partition Ubuntu). De plus, Ubuntu est démarré directement en utilisant son propre exécutable efi, qui réside dans efi/ubuntu/shimx64.efi
dans /dev/sda1
(ESP). Ubuntu conserve ses propres noyaux dans /boot
sur /dev/sda3
, mais Arch a installé ses noyaux directement dans /dev/sda1
. Alors, comment puis-je nettoyer ce gâchis et avoir un seul bout de papier à l'intérieur de efi/grub
de /dev/sda1
, qui gérera à la fois mes installations Ubuntu et Arch, en utilisant leurs noyaux distincts?
J'aimerais tout d'abord clarifier la terminologie: dans le contexte des chargeurs de démarrage EFI pour Linux, "stub EFI" fait référence à un chargeur de démarrage intégré au noyau Linux lui-même, ce qui permet de lancer le noyau en tant que programme EFI. Vous semblez utiliser ce terme pour faire référence à n’importe quel programme de démarrage EFI, mais cette utilisation pourrait créer de la confusion.
Cela traité, os-prober
sur Arch aurait dû détecter votre installation Ubuntu. Je ne sais pas pourquoi, mais en tant que os-prober
d'Arch fait partie d'Arch, et non d'Ubuntu, vous pouvez poser des questions à ce sujet sur un forum Arch. OTOH, si vous suivez mes conseils, vous n'utiliserez pas GRUB d'Arch, donc ce point deviendra sans objet.
Arch donne à ses noyaux des noms fixes qui ne changent pas lorsque vous mettez à jour le noyau, alors que les noms de noyau d'Ubuntu incluent une chaîne de version, et changent donc lorsqu'un nouveau noyau est installé. Ceci est important car GRUB, les fichiers de configuration, qui font référence au noyau, sont créés par le système d'exploitation qui contrôle GRUB. Ainsi, si vous utilisez GRUB d’Arch, vous devrez reconfigurer GRUB dans Arch chaque fois que vous mettez à jour un noyau Ubuntu. Cela risque d'être gênant. Si vous utilisez GRUB, OTOH d'Ubuntu, il n'est pas nécessaire que sa configuration soit mise à jour lorsque vous mettez à jour un noyau Arch. (Lorsque vous installez un nouveau noyau Ubuntu, les scripts Ubuntu mettront automatiquement à jour le GRUB d'Ubuntu.) Ainsi, je recommanderais d'utiliser le GRUB d'Ubuntu et non le GRUB d'Arch.
Vous pouvez passer à GRUB d'Ubuntu en utilisant efibootmgr
dans l'une ou l'autre distribution:
Sudo efibootmgr
pour voir la liste des entrées. Faites attention à la ligne BootOrder
et aux entrées Boot####
pour Arch et Ubuntu. La ligne BootOrder
vous indique l'ordre dans lequel l'ordinateur essaiera de lancer des entrées de démarrage spécifiques. Compte tenu de votre système d'exploitation, il est probable que GRUB d'Arch figurera en tête de la liste BootOrder
.Boot####
, vous pouvez transmettre une nouvelle commande de démarrage au microprogramme en utilisant l'option -o
sur efibootmgr
, comme dans Sudo efibootmgr -o 0004,0002,000A
. Ceci définit l'ordre de démarrage pour utiliser Boot0004
en premier, puis Boot0002
en cas d'échec, et enfin Boot000A
en cas d'échec des deux précédents. Les détails varieront pour vous, bien sûr; vous devez vous assurer que l'entrée Ubuntu est la première. Ce qui vient après ne sera sans doute pas pertinent, même si je vous conseillerais de vous assurer qu'au moins une entrée connue est dans la liste, afin que le système démarre à quelque chose même si l'entrée Ubuntu échoue.Après le redémarrage, GRUB d'Ubuntu devrait apparaître, mais il pourrait éventuellement ne pas avoir d'entrée pour Arch. Vous pouvez exécuter Sudo update-grub
pour générer un nouveau menu Ubuntu GRUB et réessayer. Cela pourrait ou non détecter le noyau d'Arch. Si ce n'est pas le cas, vous pouvez éditer /etc/grub.d/40_custom
ou utiliser GRUB Customizer pour ajouter une entrée à Arch. Quelque chose comme ce qui suit devrait fonctionner:
menuentry "Arch Linux" {
set root=(hd0,1)
linux /vmlinuz-linux root=/dev/sda5 ro quiet splash
initrd /initramfs-linux.img
}
Ceci est juste un exemple brut et pourrait probablement être amélioré. Si rien d'autre, vous devrez probablement changer l'option root=/dev/sda5
pour qu'elle pointe vers la véritable partition racine (/
) d'Arch. Vous pouvez examiner la configuration d’Arch GRUB ou demander de l’aide sur un forum Arch si vous souhaitez améliorer cet exemple, ou si vous rencontrez des problèmes.
Au lieu de ce qui précède, vous pouvez utiliser autre chose que GRUB. La plupart des chargeurs de démarrage nécessiteront davantage de configuration manuelle que GRUB, mais cette configuration manuelle sera probablement plus facile que la configuration manuelle de GRUB. Voir ma page sur les chargeurs de démarrage EFI pour Linux pour un aperçu de ce qui est disponible. Mon propre gestionnaire de démarrage rEFInd a tendance à être plus facile à configurer pour les scénarios à démarrage multiple car il analyse activement les noyaux à chaque démarrage, de sorte qu'il ne soit pas soumis à la nécessité de mettre à jour régulièrement un fichier de configuration. chaque mise à jour du noyau. OTOH, parce que le nom de noyau d'Arch ne change pas, si vous utilisez GRUB d'Ubuntu, vous ne souffrirez pas des problèmes habituels de multi-distribution GRUB, donc rEFInd ne constituera pas une amélioration de ce résultat.
Un dernier point: avec votre configuration, vos noyaux Arch sont stockés sur votre partition système EFI (ESP). Il s'agit d'une configuration Arch courante, mais vous devez être sûr que votre ESP est suffisamment grand. Parfois, le ESP ne dépasse pas 100 Mo (voire même moins), ce qui laisse peu de place une fois vos noyaux en place. Vous pouvez utiliser df
pour voir combien d'espace est utilisé et disponible sur une partition, comme dans df /boot/efi
. Si votre ESP est presque plein, vous voudrez peut-être placer vos noyaux Arch ailleurs. Bien que l'utilisation de ESP pour stocker les noyaux soit une pratique courante dans Arch, ce n'est pas nécessaire, vous pouvez donc faire autre chose.