Establecer kernel predeterminado en GRUB


49

¿Cómo puedo elegir qué kernel GRUB2 debería cargar por defecto? Recientemente instalé un kernel de Linux en tiempo real y ahora se carga por defecto. Me gustaría cargar el normal por defecto.

Hasta ahora solo pude elegir el sistema operativo predeterminado ... y, por alguna razón, /boot/grub.cfgya supongo que quiero cargar el kernel rt y ponerlo en la entrada genérica del menú de Linux (en mi caso, Arch Linux).


2
grub2-set-default <título o número>?
taliezin

1
¿Pero cómo sé el número? Los números grub.cfgsolo corresponden a los sistemas operativos y no a los núcleos.
TomTom

En algunos casos esto funciona: askubuntu.com/questions/216398/… Puede encontrar los nombres de los menús mirando este archivo: /boot/grub/grub.cfg
TekOps

Respuestas:


43

Creo que la mayoría de las distribuciones han movido núcleos adicionales al submenú de opciones avanzadas en este momento, como TomTom descubrió que era el caso con su Arch.

No quería alterar mi estructura de menú de nivel superior para seleccionar un núcleo anterior como predeterminado. Encontré la respuesta aquí:

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

Para resumir:

1) Encuentra la $menuentry_idopción para el submenú:

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

2) Busque la $menuentry_id_optionentrada del menú para el núcleo que desea usar:

$ 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) Comente su grub predeterminado actual /etc/default/gruby reemplácelo con el submenú $menuentry_id_optiondel paso uno, y los núcleos seleccionados $menuentry_id_optiondel paso dos separados por >.

En mi caso el modificado GRUB_DEFAULTes:

#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) Actualice grub para hacer los cambios. Para Debian esto se hace así:

$ sudo update-grub

Hecho. Ahora, cuando inicia, el menú avanzado debe tener un asterisco y debe iniciar en el núcleo seleccionado. Puedes confirmar esto con 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

Cambiar esto al kernel más reciente es tan simple como comentar la nueva línea y descomentar #GRUB_DEFAULT=0, luego volver a ejecutar update-grub.


31

Después de luchar durante 2 horas, he encontrado una manera mucho más fácil de lograr esto. Acabo de RTFM. ;)

Agregue dos líneas a / etc / default / grub

GRUB_SAVEDEFAULT=true
GRUB_DEFAULT=saved

Realice el sudo update-grubreinicio, acceda a su menú de grub y seleccione el menú o elemento de submenú que necesite. La opción se guardará y la próxima vez su computadora se iniciará automáticamente.


2
¡Maravilloso! ¡Tan sencillo!
Egor Skriptunoff

Oh, mucho más simple. Gracias.
user207863

21

Como se menciona en los comentarios, puede configurar el núcleo predeterminado para que se inicie utilizando el grub-set-default Xcomando, donde X es el número del núcleo en el que desea iniciar. En algunas distribuciones también puede establecer este número editando el /etc/default/grubarchivo y la configuración GRUB_DEFAULT=X, y luego ejecutándolo update-grub.

El número es el índice de una matriz de núcleos / configuraciones de núcleo que se muestran en el menú de GRUB durante el arranque, siendo 0 la primera entrada (la más alta). Por lo general, puede encontrar el número correcto buscando menuentrylíneas en /boot/grub/grub.cfg, así:

grep menuentry /boot/grub/grub.cfg

Verá cada núcleo en la lista con el nombre que se muestra en el menú de arranque de GRUB. El primero es 0, el segundo es 1, y así sucesivamente.


1
En Fedora 21 es /boot/grub2/grub.cfg.
somethingSomething

3
Esto no está funcionando para mí. El último kernel en mi instalación es 4.4.0-64-generic (menuentry 0) pero quiero que 4.4.0-59-generic (menuentry 9) sea el kernel de arranque predeterminado. Corrí grub-set-default 9y luego grub-updatey reinicié. Dejé que grub se inicie con el kernel predeterminado y todavía se inicia con 4.4.0-64-generic . También intenté editar, /etc/default/grubconfigurar GRUB_DEFAULT=9y ejecutar grub-update. Al reiniciar nada cambia, el sistema aún se inicia con 4.4.0-64-generic . Tal vez me perdí algo, ¿alguien puede ayudarme?
Dronacharya

Esto tampoco funcionó para mí. Eliminé
Luis

8

Simplemente haciendo grep 'menuentry' /boot/grub/grub.cfgenumera entradas adicionales que no están relacionadas con el núcleo real o las versiones del sistema operativo. Por ejemplo, enumera

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

Me gustaría proponer una pequeña mejora en el método de búsqueda de ese archivo: usar 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' {

Con el comando a continuación y su salida, puede ver que el awkcódigo coincide con la versión real del sistema operativo y darle el número que luego puede usar en el /etc/default/grubarchivo.

Además de editar el /etc/default/grubarchivo a mano, sugiero usar sed. En el siguiente comando, reemplace X con el número apropiado que obtuvo del comando awk anterior:

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


2
Esta no es una respuesta. Se lee como un comentario. Una respuesta debería decir: "Esta es la forma de configurar la entrada predeterminada en GRUB", no "déjame hacer un apéndice a otra respuesta". Puede editar esto fácilmente en una respuesta adecuada, pero podría ser más inteligente dejar un comentario en la respuesta de jkt123 sobre el uso de awk en lugar de grep.
Aleksandr Dubinsky

2

Los jkt123 funcionarán para la mayoría de las distribuciones, supongo. Sin embargo, para Arch Linux no funcionó, al menos no con los paquetes que tengo disponibles.

Los índices que puede establecer grub-set-defaultsolo corresponden a las entradas del menú principal. Sin embargo, las opciones del kernel están en un submenú. Entonces, mueve la entrada del núcleo fuera del submenú al menú principal o coloca la entrada en la parte superior de la lista de submenú y selecciona el submenú.

My Grub Menu

  • Arch Linux
  • Opciones avanzadas para Arch Linux
    • Kernel 1
    • Kernel 2
  • Ventanas

Para poder iniciar Kernel 2, debe intercambiarlo con Kernel 1 o colocarlo fuera del submenú en el mismo nivel que Arch Linux o Windows. Y luego establezca el número predeterminado en uno de los índices del menú principal. Por ejemplo, en el menú anterior, "0" inicia "Arch Linux" y "1" inicia Kernel 1.

Para cambiar la jerarquía y el intercambio, abra /boot/grub/grub.cfgy mueva la entrada que desea mover. Una entrada podría verse así

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

Entonces necesitas aplicar tus cambios. En mi caso con grub-mkconfig. Pero esto puede variar de un sistema a otro.


0

Tan recientemente como CentOS-6.6 grub.conf parecía que esto se podía editar manualmente para cambiar la selección predeterminada:

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

0

Estiramiento de Debian:

En lugar de perder el tiempo con los archivos de configuración, cree una carpeta /noot(llámela como desee), deje el núcleo que desee, junto con los archivos de configuración y sistema correspondientes, /booty mueva el resto a esta nueva carpeta.

Ejecutar update-grub.

Verifique dos veces la /bootcarpeta en la que la versión de su núcleo y los archivos de configuración y sistema coincidentes todavía están allí (en caso de que haya copiado algo que no debería tener) y reinicie.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.