web-dev-qa-db-fra.com

Définissez le noyau par défaut dans GRUB

Comment puis-je choisir quel noyau GRUB2 doit charger par défaut? J'ai récemment installé un noyau Linux en temps réel et maintenant il se charge par défaut. Je voudrais charger celui normal par défaut.

Jusqu'à présent, je n'ai réussi qu'à choisir le système d'exploitation par défaut .. et pour une raison quelconque, le /boot/grub.cfg suppose déjà que je veux charger le rt-kernel et le mettre dans l'entrée générique du menu linux (dans mon cas Arch Linux).

61
TomTom

jkt123 fonctionnera pour la plupart des distributions, je suppose. Cependant, pour Arch Linux, cela n'a pas fonctionné, du moins pas avec les packages dont je dispose.

Les indices que vous pouvez définir avec grub-set-default ne correspond qu'aux entrées du menu principal. Les options du noyau sont cependant dans un sous-menu. Donc, soit vous déplacez l'entrée du noyau hors du sous-menu dans le menu principal, soit vous placez l'entrée en haut de la liste des sous-menus et sélectionnez le sous-menu.

Mon menu Grub

  • Arch Linux
  • Options avancées pour Arch Linux
    • Noyau 1
    • Noyau 2
  • Les fenêtres

Pour pouvoir démarrer le noyau 2, vous devez soit l'échanger avec le noyau 1, soit le placer en dehors du sous-menu au même niveau qu'Arch Linux ou Windows. Et puis définissez le nombre par défaut sur l'un des index du menu principal. Par exemple, dans le menu ci-dessus, "0" démarre "Arch Linux" et "1" démarre le noyau 1.

Pour modifier la hiérarchie et permuter, ouvrez /boot/grub/grub.cfg et déplacez l'entrée que vous souhaitez déplacer. Une entrée pourrait ressembler à ceci

menuentry 'ENTRY NAME'
   ... some code ...
}

Ensuite, vous devez appliquer vos modifications. Dans mon cas avec grub-mkconfig. Mais cela peut varier d'un système à l'autre.

2
TomTom

Je pense que la plupart des distributions ont déplacé des noyaux supplémentaires dans le sous-menu des options avancées à ce stade, comme TomTom a constaté que c'était le cas avec son Arch.

Je ne voulais pas modifier ma structure de menu de niveau supérieur afin de sélectionner un noyau précédent par défaut. J'ai trouvé la réponse ici:

http://www.humans-enabled.com/2014/08/how-to-set-default-grub-kernel-boot.html

Résumer:

1) Trouvez le $menuentry_id_option Pour le sous-menu:

$ grep submenu /boot/grub/grub.cfg
submenu 'Advanced options for Debian GNU/Linux' $menuentry_id_option 'gnulinux-advanced-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {

2) Trouvez le $menuentry_id_option Pour l'entrée de menu du noyau que vous souhaitez utiliser:

$ grep gnulinux /boot/grub/grub.cfg
menuentry 'Debian GNU/Linux' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
submenu 'Advanced options for Debian GNU/Linux' $menuentry_id_option 'gnulinux-advanced-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
    menuentry 'Debian GNU/Linux, with Linux 4.18.0-0.bpo.1-rt-AMD64' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.18.0-0.bpo.1-rt-AMD64-advanced-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
    menuentry 'Debian GNU/Linux, with Linux 4.18.0-0.bpo.1-rt-AMD64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.18.0-0.bpo.1-rt-AMD64-recovery-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
    menuentry 'Debian GNU/Linux, with Linux 4.18.0-0.bpo.1-AMD64' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.18.0-0.bpo.1-AMD64-advanced-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
    menuentry 'Debian GNU/Linux, with Linux 4.18.0-0.bpo.1-AMD64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.18.0-0.bpo.1-AMD64-recovery-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
    menuentry 'Debian GNU/Linux, with Linux 4.17.0-0.bpo.1-AMD64' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.17.0-0.bpo.1-AMD64-advanced-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
    menuentry 'Debian GNU/Linux, with Linux 4.17.0-0.bpo.1-AMD64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.17.0-0.bpo.1-AMD64-recovery-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
    menuentry 'Debian GNU/Linux, with Linux 4.9.0-8-AMD64' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.9.0-8-AMD64-advanced-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
    menuentry 'Debian GNU/Linux, with Linux 4.9.0-8-AMD64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.9.0-8-AMD64-recovery-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {

3) Mettez en commentaire votre grub par défaut actuel dans /etc/default/grub Et remplacez-le par le $menuentry_id_option Du sous-menu de la première étape et le $menuentry_id_option Du noyau sélectionné de la deuxième étape séparé par >.

Dans mon cas, le GRUB_DEFAULT Modifié est:

#GRUB_DEFAULT=0

GRUB_DEFAULT="gnulinux-advanced-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc>gnulinux-4.18.0-0.bpo.1-AMD64-advanced-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc"

4) Mettez à jour grub pour apporter les modifications. Pour Debian, cela se fait comme suit:

$ Sudo update-grub

Terminé. Maintenant, lorsque vous démarrez, le menu avancé doit avoir un astérisque et vous devez démarrer dans le noyau sélectionné. Vous pouvez le confirmer avec uname.

$ uname -a
Linux NAME 4.18.0-0.bpo.1-AMD64 #1 SMP Debian 4.18.0-0 (2018-09-13) x86_64 GNU/Linux

Changer cela pour le noyau le plus récent est aussi simple que de commenter la nouvelle ligne et de ne pas commenter #GRUB_DEFAULT=0:

GRUB_DEFAULT=0

#GRUB_DEFAULT="gnulinux-advanced-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc>gnulinux-4.18.0-0.bpo.1-AMD64-advanced-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc"

puis relancez update-grub.

56
William L-K

Après avoir lutté pendant 2 heures, j'ai trouvé un moyen beaucoup plus facile d'y parvenir. Je viens de RTFM. ;)

Ajoutez deux lignes à/etc/default/grub

GRUB_SAVEDEFAULT=true
GRUB_DEFAULT=saved

Faites le Sudo update-grub, redémarrez, accédez à votre menu grub et sélectionnez le menu ou l'élément de sous-menu dont vous avez besoin. Le choix sera enregistré et la prochaine fois que votre ordinateur démarrera automatiquement.

54
Jimmy Falcon

Comme mentionné dans les commentaires, vous pouvez définir le noyau par défaut pour démarrer en utilisant le grub-set-default X commande, où X est le numéro du noyau dans lequel vous souhaitez démarrer. Dans certaines distributions, vous pouvez également définir ce nombre en modifiant le /etc/default/grub fichier et paramétrage GRUB_DEFAULT=X, puis en exécutant update-grub.

Le nombre est l'index d'un tableau de paramètres noyaux/noyau affiché dans le menu GRUB lors du démarrage, 0 étant la première entrée (la plus haute). Vous pouvez généralement trouver le bon nombre en recherche de menuentry lignes dans /boot/grub/grub.cfg, ainsi:

grep menuentry /boot/grub/grub.cfg

Vous verrez chaque noyau répertorié avec le nom qui apparaît dans le menu de démarrage GRUB. Le premier est 0, le second est 1, etc.).

22
jkt123

Faire simplement grep 'menuentry' /boot/grub/grub.cfg répertorie les entrées supplémentaires qui ne sont pas liées aux versions réelles du noyau ou du système d'exploitation. Par exemple, il répertorie

if [ x"${feature_menuentry_id}" = xy ]; then
  menuentry_id_option="--id"
  menuentry_id_option=""
export menuentry_id_option

Je voudrais proposer une petite amélioration à la méthode de recherche de ce fichier: utiliser awk

$ awk '/menuentry/ && /class/ {count++; print count-1"****"$0 }' /boot/grub/grub.cfg                                            
0****menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-86df21bf-d95f-435c-9292-273bdbcba056' {
1****   menuentry 'Ubuntu, with Linux 3.19.0-26-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.19.0-26-generic-advanced-86df21bf-d95f-435c-9292-273bdbcba056' {
2****   menuentry 'Ubuntu, with Linux 3.19.0-26-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.19.0-26-generic-recovery-86df21bf-d95f-435c-9292-273bdbcba056' {
3****   menuentry 'Ubuntu, with Linux 3.13.0-62-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.13.0-62-generic-advanced-86df21bf-d95f-435c-9292-273bdbcba056' {
4****   menuentry 'Ubuntu, with Linux 3.13.0-62-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.13.0-62-generic-recovery-86df21bf-d95f-435c-9292-273bdbcba056' {

Avec la commande ci-dessous et sa sortie, vous pouvez voir le code awk correspondre à la version réelle du système d'exploitation et vous donner le numéro que vous pourrez ensuite utiliser dans /etc/default/grub fichier.

En plus de modifier le /etc/default/grub fichier à la main, je suggère d'utiliser sed. Dans la commande ci-dessous, remplacez X par le nombre approprié obtenu à partir de la commande awk ci-dessus:

Sudo sed -i 's/GRUB_DEFAULT=0/GRUB_DEFAULT=X/g' /etc/default/grub; Sudo update-grub

10
Sergiy Kolodyazhnyy

Aussi récemment que CentOS-6.6 grub.conf ressemblait, cela peut être modifié manuellement pour changer la sélection par défaut:

default=1
timeout=5
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
0
Mike

Étirement Debian:

Plutôt que de jouer avec les fichiers de configuration, créez un dossier dans /noot (appelez-le comme vous voulez), laissez le noyau que vous voulez, ainsi que les fichiers de configuration et de système correspondants, dans /boot et déplacez le reste dans ce nouveau dossier.

Courir update-grub.

Vérifiez de nouveau le /boot le dossier contenant votre version du noyau et les fichiers de configuration et système correspondants sont toujours là (au cas où vous auriez copié quelque chose que vous ne devriez pas avoir) et redémarrez.

0
Pinkie Perie