Comment configurer correctement la bonne entrée de menu par défaut de GRUB 2?

27

J'utilise GRUB 2.00 sur un système Gentoo Linux.

Je compile mes propres noyaux manuellement, puis je les installe /bootavec make install. J'ai les noyaux suivants en /bootce moment:

# ls -1 /boot/vmlinuz*
/boot/vmlinuz-3.7.4-gentoo-5
/boot/vmlinuz-3.7.4-gentoo-first
/boot/vmlinuz-3.7.4-gentoo-fourth
/boot/vmlinuz-3.7.4-gentoo-third

L'exécution des grub2-mkconfigrésultats dans la sortie suivante:

# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-3.7.4-gentoo-third
Found linux image: /boot/vmlinuz-3.7.4-gentoo-fourth
Found linux image: /boot/vmlinuz-3.7.4-gentoo-first
Found linux image: /boot/vmlinuz-3.7.4-gentoo-5
done

Si je lis maintenant le /boot/grub2/grub.cfgfichier résultant , je remarque que les entrées suivantes ont été créées:

  • Une entrée par défaut principale qui commence vmlinuz-3.7.4-gentoo-third
  • Un sous-menu avec toutes les autres entrées (y compris celles de récupération), dans le même ordre que la grub2-mkconfigcommande

Le problème est qu'au démarrage j'aimerais charger par défaut la cinquième révision de mon kernel ( vmlinuz-3.7.4-gentoo-5), pas la troisième ( vmlinuz-3.7.4-gentoo-third). Je préfère également ne pas accéder au sous-menu pour choisir le bon noyau à charger.

Comment puis-je changer ce comportement? Comment puis-je dire à GRUB que je veux exécuter la cinquième révision de mon noyau par défaut et non la troisième révision plus ancienne? En général, comment puis-je changer la ligne d'entrée par défaut pour qu'elle corresponde au noyau que je veux et pas à celui apparemment aléatoire choisi par GRUB?

J'ai également essayé de mettre les lignes suivantes /etc/default/grub:

GRUB_DEFAULT=saved
GRUB_SAVEDEFAULT=true

Cela ne règle pas le problème comme je le souhaite. Mais au moins GRUB semble se souvenir du dernier noyau à partir duquel j'ai démarré et le sélectionne automatiquement dans le sous-menu. C'est juste que je n'aime pas accéder au sous-menu.

Francesco Turco
la source
J'ai remarqué que vous aviez spécifié -o /boot/grub2/grub.cfgcomme fichier de sortie. Le répertoire /boot/grub/existe-t-il toujours?
ott--

Réponses:

12

Pour sélectionner une entrée de menu dans le sous-menu "Options avancées", réglez GRUB_DEFAULT = "1> 3". Vous pouvez maintenant exécuter grub2-mkconfig pour générer le fichier de configuration grub. Au prochain redémarrage, vmlinuz-3.7.4-gentoo-5 devrait démarrer.

Remarque : Cela ne changera pas l'entrée par défaut dans le menu grub, c'est-à-dire que l'entrée par défaut indiquera toujours la même entrée que vous avez en ce moment. Mais l'image qui sera démarrée par défaut sera la 4ème image sous les "Options avancées". Pour définir vmlinuz-3.7.4-gentoo-5 comme entrée par défaut dans le menu grub, l'ordre des images doit être tel que vmlinuz-3.7.4-gentoo-5 doit être la première image lorsque vous exécutez grub2-mkconfig .

anaken78
la source
2
Notez que les guillemets sont importants. C'est-à-dire GRUB_DEFAULT = 1> 3 ne fonctionnera pas.
ctuffli
7

Si vous avez un sous - menu dans votre grub.cfg, vous devez utiliser deux chiffres comme celui-ci:

grub-reboot '1>3'

Le premier est l'index de menu et le second est l'index de sous-menu.

Par exemple, pour démarrer la dernière entrée de la configuration comme ceci:

grep menu /boot/grub/grub.cfg

menuentry 'Debian GNU/Linux' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-1ffa16a9-fda2-43b5-91b9-c91a08ff190f' {
submenu 'Advanced options for Debian GNU/Linux' $menuentry_id_option 'gnulinux-advanced-1ffa16a9-fda2-43b5-91b9-c91a08ff190f' {
    menuentry 'Debian GNU/Linux, with Linux 4.6.0-0.bpo.1-amd64' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.6.0-0.bpo.1-amd64-advanced-1ffa16a9-fda2-43b5-91b9-c91a08ff190f' {
    menuentry 'Debian GNU/Linux, with Linux 4.6.0-0.bpo.1-amd64 (sysvinit)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.6.0-0.bpo.1-amd64-init-sysvinit-1ffa16a9-fda2-43b5-91b9-c91a08ff190f' {
    menuentry 'Debian GNU/Linux, with Linux 4.6.0-0.bpo.1-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.6.0-0.bpo.1-amd64-recovery-1ffa16a9-fda2-43b5-91b9-c91a08ff190f' {
    menuentry 'Debian GNU/Linux, with Linux 3.16.0-4-amd64' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.16.0-4-amd64-advanced-1ffa16a9-fda2-43b5-91b9-c91a08ff190f' {
    menuentry 'Debian GNU/Linux, with Linux 3.16.0-4-amd64 (sysvinit)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.16.0-4-amd64-init-sysvinit-1ffa16a9-fda2-43b5-91b9-c91a08ff190f' {
    menuentry 'Debian GNU/Linux, with Linux 3.16.0-4-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.16.0-4-amd64-recovery-1ffa16a9-fda2-43b5-91b9-c91a08ff190f' {

Tu devrais utiliser:

grub-reboot '1>5'

et redémarrez.

AstraSerg
la source
Bizarre. l'index du sous-menu commence par 0, tandis que le menu principal du 1
VarunAgw
5

vous pouvez aussi bien utiliser GRUB_DEFAULT=saved. Dans ce cas, vous utiliseriez

$ grub2-set-default -h
Usage: grub2-set-default [OPTION] MENU_ENTRY
Set the default boot menu entry for GRUB.

  -h, --help              print this message and exit
  -v, --version           print the version information and exit
  --boot-directory=DIR    expect GRUB images under the directory DIR/grub2
                          instead of the /boot/grub2 directory

MENU_ENTRY is a number, a menu item title or a menu item identifier.

ou si c'est uniquement pour le prochain démarrage:

$ grub2-reboot -h
Usage: grub2-reboot [OPTION] MENU_ENTRY
Set the default boot menu entry for GRUB, for the next boot only.

  -h, --help              print this message and exit
  -v, --version           print the version information and exit
  --boot-directory=DIR    expect GRUB images under the directory DIR/grub2
                          instead of the /boot/grub2 directory

MENU_ENTRY is a number, a menu item title or a menu item identifier.
Matthias Hahn
la source
2

Essayer

mkdir -p /boot/grub/backup
mv -v /boot/grub/vmlinuz-3.7.4-gentoo-{first,third,fourth} /boot/grub/backup

Cela déplace tous vos noyaux inutilisés vers un répertoire de sauvegarde, maintenant:

grub2-mkconfig -o /boot/grub/grub.cfg

Cela ne fait qu'ajouter du choix r5à votre menu. Après cela, lisez ce ce lien et Reame alors tous les noyaux dans le répertoire de sauvegarde autre chose que vmlinuz si vous insistez pour les garder

eyoung100
la source
2

Avec centos7 (ou RHEL7) et grub2:

grub utilise l'entrée 'saved_entry' de grubenv par défaut pour démarrer, sniplet depuis /boot/grub2/grub.cfg:

if [ "${next_entry}" ] ; then
   set default="${next_entry}"
   set next_entry=
   save_env next_entry
   set boot_once=true
else
   set default="${saved_entry}"
fi

pour vérifier ce qui est le 'saved_entry' est maintenant ma construction:

grub2-editenv list

saved_entry=CentOS Linux (3.10.0-693.2.2.el7.ari.x86_64) 7 (Core)

pour le changer par exemple pour ma version de débogage:

grub2-editenv - set saved_entry='CentOS Linux 3.10.0-693.2.2.el7.ari.x86_64.debug) 7 (Core)'
ari
la source
1

Ce que j'ai fait pour obtenir le résultat souhaité était:

  • définissez le GRUB_DEFAULT=savedcomme indiqué dans l' grub-set-defaultaide

    grub-set-default Menu entry not specified. Usage: grub-set-default [OPTION] MENU_ENTRY Set the default boot menu entry for GRUB. This requires setting GRUB_DEFAULT=saved in /etc/default/grub. -h, --help print this message and exit -V, --version print the version information and exit --boot-directory=DIR expect GRUB images under the directory DIR/grub instead of the /boot/grub directory MENU_ENTRY is a number, a menu item title or a menu item identifier.

  • Définissez la valeur par défaut

    grub-set-default "1>2"

    Il crée un nouveau fichier dans / boot / grub appelé grubenv avec les informations requises.

  • Après cela, je recrée le fichier de configuration

    grub-mkconfig > /boot/grub/grub.cfg

Et j'ai vu que la configuration a été modifiée pour utiliser l'état enregistré:

if [ "${next_entry}" ] ; then set default="${next_entry}" set next_entry= save_env next_entry set boot_once=true else set default="${saved_entry}" fi

Alex
la source
0

Vous pouvez définir le choix par défaut par une valeur numérique. Si vous définissez

`GRUB_DEFAULT=3` 

dans /etc/default/grub
Vous définissez la valeur par défaut sur l'entrée gentoo-5.
GRUB_DEFAULTest un décalage nul, donc 3 sélectionnera la quatrième entrée comme vous le souhaitez.

bsd
la source
2
Je ne sais pas pourquoi, mais il semble que cela ne fonctionne pas. Je me mets GRUB_DEFAULT=3comme tu l'as dit, puis je relance grub2-mkconfig. Mais au démarrage, l'entrée par défaut est toujours vmlinuz-3.7.4-gentoo-third.
Francesco Turco
1
Essayez de commenter GRUB_SAVEDEFAULT=trueCela ne devrait pas avoir d'importance, mais ce n'est pas nécessaire avec le numérique.
bsd
2
Je n'ai pas cette option dans mon /etc/default/grubdossier.
Francesco Turco
0

Je soupçonne que grub2-mkconfigles noyaux sont triés dans l'ordre inverse, en supposant qu'ils contiennent principalement des numéros de version augmentant de manière monotone. Alors commencez à choisir vos balises pour correspondre à cette convention.

cpugeniusmv
la source
0

mv ces fichiers de version nouveaux / non utilisés dans / boot dans un répertoire de sauvegarde par exemple / boot / back initrd.img-3.13.0-xx-generic
vmlinuz-3.13.0-xx-generic config-3.13.0-xx-generic System.map-3.13.0-xx-generic

redémarrez le système en mode de sauvetage, puis choisissez grub dans la boîte de dialogue de sauvetage, tout ira bien.

c'est la méthode la plus appropriée, je pense. J'utilise ubuntu 14.04.

johnvuong1999
la source