Définir le noyau par défaut dans GRUB

49

Comment choisir le noyau que GRUB2 devrait charger par défaut? J'ai récemment installé le noyau Linux temps réel et maintenant, il se charge par défaut. J'aimerais charger le standard par défaut.

Jusqu'ici, j'ai seulement réussi à choisir le système d'exploitation par défaut .. et pour une raison quelconque, /boot/grub.cfgje suppose déjà que je veux charger le noyau rt-kernel et le placer dans l'entrée de menu générique de Linux (dans mon cas, Arch Linux).

TomTom
la source
2
grub2-set-default <titre ou numéro>?
Taliezin
1
Mais comment puis-je connaître le numéro? Les nombres en grub.cfgcorrespondent uniquement aux systèmes d’exploitation et non aux noyaux.
TomTom
Dans certains cas, cela fonctionne: askubuntu.com/questions/216398/… Vous pouvez trouver les noms de menu en parcourant ce fichier: /boot/grub/grub.cfg
TekOps

Réponses:

43

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 la structure de mon 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 l’ $menuentry_idoption _ 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) Recherchez l’ $menuentry_id_optionentré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 votre commentaire par défaut en commentaire /etc/default/grubet remplacez-le par le sous-menu $menuentry_id_optionde la première étape et par le noyau sélectionné $menuentry_id_optionde la deuxième étape séparés par >.

Dans mon cas, le modifié GRUB_DEFAULTest:

#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 effectuer les modifications. Pour Debian, cela se fait comme suit:

$ sudo update-grub

Terminé. Maintenant, lorsque vous démarrez, le menu avancé devrait avoir un astérisque et vous devriez 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

Le changement du noyau le plus récent est aussi simple que de commenter la nouvelle ligne et de supprimer les commentaires #GRUB_DEFAULT=0, puis de les réexécuter update-grub.

William LK
la source
31

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

Ajouter deux lignes à / etc / default / grub

GRUB_SAVEDEFAULT=true
GRUB_DEFAULT=saved

Faites le sudo update-grub, redémarrez, entrez dans votre menu de base 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.

Jimmy Falcon
la source
2
Merveilleux! Si simple!
Egor Skriptunoff
Oh, tellement plus simple. Je vous remercie.
user207863
21

Comme indiqué dans les commentaires, vous pouvez définir le noyau par défaut à démarrer en utilisant la grub-set-default Xcommande, où X est le numéro du noyau que vous souhaitez démarrer. Dans certaines distributions, vous pouvez également définir ce nombre en modifiant le /etc/default/grubfichier et les paramètres GRUB_DEFAULT=X, puis en les exécutant update-grub.

Le nombre est l'index d'un tableau de paramètres noyau / 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 numéro en cherchant des menuentrylignes /boot/grub/grub.cfg, comme ceci:

grep menuentry /boot/grub/grub.cfg

Vous verrez chaque noyau répertorié avec le nom indiqué dans le menu de démarrage de GRUB. Le premier est 0, le second est 1, et ainsi de suite.

jkt123
la source
1
Dans Fedora 21 c'est /boot/grub2/grub.cfg.
Quelque
3
Cela ne fonctionne pas pour moi. Le dernier noyau de mon installation est 4.4.0-64-generic (menuentry 0) mais je souhaite que 4.4.0-59-generic (menuentry 9) soit le noyau de démarrage par défaut. J'ai couru grub-set-default 9et puis grub-updateet redémarré. Je laisse grub démarrer avec le noyau par défaut et il démarre toujours avec 4.4.0-64-generic . J'ai aussi essayé l'édition /etc/default/grubet réglé GRUB_DEFAULT=9et couru grub-update. Au redémarrage, rien ne change, le système continue à démarrer avec 4.4.0-64-generic . Peut-être que j'ai raté quelque chose, quelqu'un peut-il m'aider?
Dronacharya
Cela n'a pas fonctionné pour moi non plus. J'ai supprimé le noyau indésirable comme expliqué ici: askubuntu.com/a/764242/456247
Luis
8

Faire simplement la grep 'menuentry' /boot/grub/grub.cfgliste des entrées supplémentaires qui ne sont pas liées à la version actuelle 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 que le awkcode correspond à la version actuelle du système d'exploitation et vous donner le numéro que vous pouvez ensuite utiliser dans un /etc/default/grubfichier.

En plus d’éditer le /etc/default/grubfichier à la main, je suggère d’utiliser sed. Dans la commande ci-dessous, remplacez X par le nombre approprié obtenu avec la commande awk ci-dessus:

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

Sergiy Kolodyazhnyy
la source
2
Ce n'est pas une réponse. Cela se lit comme un commentaire. Une réponse devrait indiquer: "Voici comment définir l'entrée par défaut dans GRUB" et non "laissez-moi ajouter un addendum à une autre réponse". Vous pouvez facilement éditer cela en une réponse correcte, mais il serait peut-être plus judicieux de laisser un commentaire sur la réponse de jkt123 sur l'utilisation de awk au lieu de grep.
Aleksandr Dubinsky
2

Je suppose que jkt123 fonctionnera pour la plupart des distributions. Cependant, pour Arch Linux, cela ne fonctionnait pas, du moins pas avec les paquetages disponibles.

Les index que vous pouvez définir avec grub-set-defaultcorrespondent uniquement 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 du sous-menu dans le menu principal, soit vous placez l'entrée au-dessus 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 que Arch Linux ou Windows. Et définissez ensuite 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 changer la hiérarchie et l'échange, ouvrez /boot/grub/grub.cfget 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.

TomTom
la source
0

Aussi récemment que CentOS-6.6, grub.conf ressemblait, vous pouvez le modifier manuellement pour changer la sélection par défaut:

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

Debian Stretch:

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

Courez update-grub.

Vérifiez à nouveau /bootque la version du noyau et les fichiers système et de configuration correspondants sont toujours présents (au cas où vous auriez copié quelque chose que vous n'auriez pas dû avoir) et redémarrez.

Pinkie Perie
la source