¿Cómo configurar correctamente la entrada de menú predeterminada GRUB 2 correcta?

27

Estoy ejecutando GRUB 2.00 en un sistema Gentoo Linux.

Compilo mis propios núcleos manualmente, y luego los instalo /bootcon make install. Tengo los siguientes núcleos en /booteste momento:

# 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

grub2-mkconfigResultados en ejecución en el siguiente resultado:

# 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 ahora leo el /boot/grub2/grub.cfgarchivo resultante , noto que se han creado las siguientes entradas:

  • Una entrada principal predeterminada que comienza vmlinuz-3.7.4-gentoo-third
  • Un submenú con todas las demás entradas (incluidas las de recuperación), en el mismo orden que el grub2-mkconfigcomando

El problema es que en el momento del arranque me gustaría cargar por defecto la quinta revisión de mi kernel ( vmlinuz-3.7.4-gentoo-5), no la tercera ( vmlinuz-3.7.4-gentoo-third). También prefiero no acceder al submenú para elegir el kernel correcto para cargar.

¿Cómo puedo cambiar este comportamiento? ¿Cómo puedo decirle a GRUB que quiero ejecutar la quinta revisión de mi kernel por defecto y no la tercera revisión anterior? En general, ¿cómo puedo cambiar la línea de entrada predeterminada para que coincida con el kernel que quiero y no con uno aparentemente aleatorio elegido por GRUB?

También intenté poner las siguientes líneas en /etc/default/grub:

GRUB_DEFAULT=saved
GRUB_SAVEDEFAULT=true

Esto no soluciona el problema de la manera que deseo. Pero al menos GRUB parece recordar el último núcleo desde el que arranqué y lo selecciona automáticamente del submenú. Es solo que no me gusta acceder al submenú.

Francesco Turco
fuente
Noté que especificaste -o /boot/grub2/grub.cfgcomo archivo de salida. ¿El directorio /boot/grub/todavía existe?
ott--

Respuestas:

12

Para seleccionar una entrada de menú en el submenú "Opciones avanzadas", configure GRUB_DEFAULT = "1> 3". Ahora puede ejecutar grub2-mkconfig para generar el archivo de configuración de grub. En el próximo reinicio, vmlinuz-3.7.4-gentoo-5 debería arrancar.

Nota : Esto no cambiará la entrada predeterminada en el menú de grub, es decir, la entrada predeterminada seguirá indicando la misma entrada que tiene ahora. Pero la imagen que se iniciará por defecto será la cuarta imagen en "Opciones avanzadas". Para hacer que vmlinuz-3.7.4-gentoo-5 sea la entrada predeterminada en el menú de grub, el orden de las imágenes debe ser tal que vmlinuz-3.7.4-gentoo-5 sea la primera imagen cuando ejecute grub2-mkconfig .

anaken78
fuente
2
Tenga en cuenta que las comillas son importantes. Es decir, GRUB_DEFAULT = 1> 3 no funcionará.
ctuffli
7

Si tiene un submenú en su grub.cfg, debe usar dos dígitos como este:

grub-reboot '1>3'

El primero es el índice del menú, y el segundo es el índice del submenú.

Por ejemplo, para arrancar la última entrada desde la configuración de esta manera:

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' {

Deberías usar:

grub-reboot '1>5'

y reiniciar.

AstraSerg
fuente
Extraño. el índice del submenú comienza con 0, mientras que el menú principal es 1
VarunAgw
5

también puedes usarlo GRUB_DEFAULT=saved. En este caso usarías

$ 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.

o si es solo para el próximo arranque:

$ 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
fuente
2

Tratar

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

Esto mueve todos los núcleos no utilizados a un directorio de respaldo, ahora:

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

Esto solo agrega opciones r5a su menú. Después de hacerlo, lea este este enlace y luego Reame todos los granos en el directorio de copia de algo que no sea vmlinuz si insiste en mantenerlos

eyoung100
fuente
2

Con centos7 (o RHEL7) y grub2:

grub usa la entrada 'saved_entry' de grubenv como arranque predeterminado, fragmento de /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

para comprobar cuál es la 'entrada guardada' ahora es mi compilación:

grub2-editenv list

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

para cambiarlo, por ejemplo, a mi compilación de depuración:

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

Lo que hice para lograr el resultado deseado había sido:

  • establecer el GRUB_DEFAULT=savedcomo se describe en la grub-set-defaultayuda

    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.

  • Establecer el valor predeterminado

    grub-set-default "1>2"

    Crea un nuevo archivo en / boot / grub llamado grubenv con la información requerida.

  • Después de eso, recreé el archivo de configuración.

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

Y he visto que la configuración se cambió para usar el estado guardado:

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
fuente
0

Puede establecer la opción predeterminada por valor numérico. Si establece

`GRUB_DEFAULT=3` 

en /etc/default/grub
Establecerá el valor predeterminado en la entrada gentoo-5.
GRUB_DEFAULTtiene cero desplazamiento, por lo que 3 seleccionará la cuarta entrada que desee.

bsd
fuente
2
No sé por qué, pero parece que no funciona. Me puse GRUB_DEFAULT=3como dijiste, luego volví a correr grub2-mkconfig. Pero en el momento del arranque, la entrada predeterminada sigue siendo vmlinuz-3.7.4-gentoo-third.
Francesco Turco
1
Intenta comentar GRUB_SAVEDEFAULT=trueNo debería importar, pero no es necesario con números.
bsd
2
No tengo esa opción en mi /etc/default/grubarchivo.
Francesco Turco
0

Sospecho que eso grub2-mkconfigordena los núcleos en orden inverso, suponiendo que contienen principalmente números de versión que aumentan monotónicamente. Así que comienza a elegir tus etiquetas para que se ajusten a esa convención.

cpugeniusmv
fuente
0

mv esos archivos de versión nuevos / no utilizados en / boot a un directorio de copia de seguridad, por ejemplo / 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

reinicie el sistema en modo de rescate, luego elija grub en el cuadro de diálogo de rescate, luego todo estará bien.

Es el método más adecuado, creo. Estoy usando ubuntu 14.04.

johnvuong1999
fuente