Uso de grubby para gestionar núcleos

La herramienta grubby se puede utilizar para leer información y realizar cambios persistentes en el archivo grub.cfg, que define la configuración de GRUB para una instancia de Oracle Linux. Con el comando grubby, puede ver la configuración del núcleo, especificar el núcleo de inicio predeterminado, configurar parámetros de inicio adicionales de la línea de comandos del núcleo y cambiar el menú de inicio del núcleo (GRUB). Consulte la página del manual grubby(8) para obtener más información.

Lista de núcleos instalados y núcleo predeterminado

Utilice el comando grubby para ver todos los núcleos instalados en una instancia de Oracle Linux, información de configuración sobre los núcleos, qué núcleo es el núcleo predeterminado y qué núcleo está activo.

  1. Desde una línea de comandos, mediante privilegios administrativos, conéctese a la instancia mediante SSH.
  2. Muestre los núcleos instalados mediante una de las siguientes opciones. La lista de núcleos instalados puede ser diferente según la versión de Oracle Linux.
    • Muestre los núcleos mediante grubby y la opción de comando --info=ALL para ver la configuración de inicio asociada con cada núcleo instalado.
      sudo grubby --info=ALL
      index=0 <--Each boot entry is assigned an index, which is a number that indicates its position in the GRUB menu
      kernel="/boot/vmlinuz-6.12.0-102.36.5.2.el10uek.x86_64" <--Full path to the kernel image
      args="ro $tuned_params LANG=en_US.UTF-8 console=tty0 console=ttyS0,115200 rd.luks=0 <--Command-line arguments passed to the kernel when it boots
           rd.md=0 rd.dm=0 rd.lvm.vg=ocivolume rd.lvm.lv=ocivolume/root rd.net.timeout.dhcp=10 rd.net.timeout.carrier=5
           rd.iscsi.param=node.session.timeo.replacement_timeout=6000 net.ifnames=1
           nvme_core.shutdown_timeout=10 ipmi_si.tryacpi=0 ipmi_si.trydmi=0 libiscsi.debug_libiscsi_eh=1
           loglevel=4 crash_kexec_post_notifiers crashkernel=1G-64G:448M,64G-:512M
           netroot=iscsi rd.iscsi.firmware=1"
      root="/dev/mapper/ocivolume-root" <--Root partition device
      initrd="/boot/initramfs-6.12.0-102.36.5.2.el10uek.x86_64.img $tuned_initrd" <--Path to the initial RAM disk (initrd) image
      title="Oracle Linux Server (6.12.0-102.36.5.2.el10uek.x86_64 with Unbreakable Enterprise Kernel) 10.0" <--Title displayed in the GRUB menu at startup
      id="3d18a447860027858b15c8276ccc1ab3-6.12.0-102.36.5.2.el10uek.x86_64" <--Unique identifier for the boot entry
      
      index=1
      kernel="/boot/vmlinuz-6.12.0-55.27.1.0.1.el10_0.x86_64"
      ...
      title="Oracle Linux Server (6.12.0-55.27.1.0.1.el10_0.x86_64) 10.0"
      ...
      
      index=2
      kernel="/boot/vmlinuz-0-rescue-3d18a447860027858b15c8276ccc1ab3"
      ...
      title="Oracle Linux Server (0-rescue-3d18a447860027858b15c8276ccc1ab3 with Unbreakable Enterprise Kernel) 10.0"
      ...

      La salida de sudo grubby --info=ALL predice lo que se muestra en el menú de inicio del núcleo al iniciar. Por ejemplo, si se utilizan los números de índice y los títulos de la salida anterior, el menú de inicio del núcleo mostrará lo siguiente:

      Oracle Linux Server (6.12.0-102.36.5.2.el10uek.x86_64 with Unbreakable Enterprise Kernel) 10.0
      Oracle Linux Server (6.12.0-55.27.1.0.1.el10_0.x86_64) 10.0
      Oracle Linux Server (0-rescue-3d18a447860027858b15c8276ccc1ab3 with Unbreakable Enterprise Kernel) 10.0
    • Muestre los núcleos instalados en el directorio /boot.
      sudo ls -l /boot/vmlinuz*
      -rwxr-xr-x. 1 root root 17048272 Aug 19 20:35 /boot/vmlinuz-0-rescue-3d18a447860027858b15c8276ccc1ab3
      -rwxr-xr-x. 1 root root 17048272 Aug 13 00:00 /boot/vmlinuz-6.12.0-102.36.5.2.el10uek.x86_64
      -rwxr-xr-x. 1 root root 15852240 Aug 14 00:00 /boot/vmlinuz-6.12.0-55.27.1.0.1.el10_0.x86_64
  3. Mostrar qué núcleo está configurado como núcleo predeterminado para usar en el inicio y su título y posición en el menú de inicio del núcleo. El núcleo por defecto depende de la versión de Oracle Linux.
    • Mostrar el núcleo predeterminado.
      sudo grubby --default-kernel
      /boot/vmlinuz-6.12.0-102.36.5.2.el10uek.x86_64
      
    • Mostrar el título del núcleo por defecto.
      sudo grubby --default-title

      La salida coincide con el valor que se ve en el menú de inicio del núcleo cuando se inicia la instancia de Oracle Linux.

      Oracle Linux Server (6.12.0-102.36.5.2.el10uek.x86_64 with Unbreakable Enterprise Kernel) 10.0
    • Mostrar la posición del índice del núcleo predeterminado en la lista de inicio del núcleo.
      sudo grubby --default-index
      0
  4. Compruebe qué núcleo se está ejecutando en la instancia.
    uname -r
    6.12.0-102.36.5.2.el10uek.x86_64

    Es posible que el núcleo por defecto y el núcleo en ejecución no sean idénticos porque:

    • Ha instalado un núcleo más nuevo, pero no ha reiniciado el sistema.
    • Durante un reinicio del sistema, seleccionó manualmente otro núcleo para que fuera el núcleo activo.
    • Actualizó manualmente el núcleo predeterminado, pero aún no reinició el sistema.

Cambiar núcleo predeterminado

Utilice el comando grubby para definir el núcleo de inicio predeterminado en la configuración de GRUB 2.

  1. Desde una línea de comandos, mediante privilegios administrativos, conéctese a la instancia mediante SSH.
  2. Mostrar el núcleo predeterminado.
    sudo grubby --default-kernel

    Por ejemplo:

    /boot/vmlinuz-6.12.0-102.36.5.2.el10uek.x86_64
  3. Utilice el comando grubby --set-default para cambiar el núcleo por defecto, asegurándose de especificar la ruta completa al núcleo. Puede obtener la ruta del núcleo mediante cualquiera de las opciones del step 2 of Listing Installed Kernels and Default Kernel.

    Por ejemplo:

    sudo grubby --set-default /boot/vmlinuz-6.12.0-55.27.1.0.1.el10_0.x86_64

    El cambio se aplica inmediatamente y persiste tras los reinicios del sistema.

  4. Verifique el cambio de núcleo predeterminado.
    sudo grubby --default-kernel

    Por ejemplo:

    /boot/vmlinuz-6.12.0-55.27.1.0.1.el10_0.x86_64
  5. (Opcional) Establezca el nuevo núcleo predeterminado en la primera posición del menú de inicio del núcleo mediante el comando grubby --set-default-index.
    sudo grubby --set-default-index=0
    El nuevo núcleo predeterminado se muestra primero en el menú de inicio del núcleo, por ejemplo:
    Oracle Linux Server (6.12.0-55.27.1.0.1.el10_0.x86_64) 10.0
    Oracle Linux Server (6.12.0-102.36.5.2.el10uek.x86_64 with Unbreakable Enterprise Kernel) 10.0
    Oracle Linux Server (0-rescue-3d18a447860027858b15c8276ccc1ab3 with Unbreakable Enterprise Kernel) 10.0
  6. Reinicie la instancia para que se inicie con el nuevo núcleo predeterminado.

Cambio de parámetros de inicio del núcleo

Utilice el comando grubby --update-kernel para agregar nuevos argumentos, cambiar valores de argumentos existentes o eliminar argumentos para un núcleo específico o todos los núcleos. Se pueden especificar varios argumentos para cada opción en una lista entre comillas con cada argumento separado por espacios. Puede agregar y eliminar argumentos en la misma operación. Al utilizar la opción --args, si ya existe un argumento, el nuevo valor sustituye a los valores antiguos.

  1. Desde una línea de comandos, mediante privilegios administrativos, conéctese a la instancia mediante SSH.
  2. Utilice el comando grubby --update-kernel para cambiar o agregar un argumento de inicio de núcleo específico. Por ejemplo, actualice los parámetros del núcleo para cambiar el argumento LANG para:
    • todos los núcleos
      sudo grubby --update-kernel=ALL --args LANG=en_GB.UTF-8
    • un núcleo
       sudo grubby --update-kernel /boot/vmlinuz-6.12.0-102.36.5.2.el10uek.x86_64 --args LANG=en_GB.UTF-8
      
  3. Verifique que los cambios se hayan aplicado.
    sudo grubby --info=ALL
    • todos los núcleos
      index=0
      kernel="/boot/vmlinuz-6.12.0-102.36.5.2.el10uek.x86_64"
      args="ro $tuned_params console=tty0 console=ttyS0,115200 rd.luks=0 rd.md=0 
           rd.dm=0 rd.lvm.vg=ocivolume rd.lvm.lv=ocivolume/root rd.net.timeout.dhcp=10 
           rd.net.timeout.carrier=5 rd.iscsi.param=node.session.timeo.replacement_timeout=6000 
           net.ifnames=1 nvme_core.shutdown_timeout=10 ipmi_si.tryacpi=0 ipmi_si.trydmi=0 
           libiscsi.debug_libiscsi_eh=1 loglevel=4 crash_kexec_post_notifiers 
           crashkernel=1G-64G:448M,64G-:512M netroot=iscsi rd.iscsi.firmware=1 LANG=en_GB.UTF-8"
      ...
      index=1
      kernel="/boot/vmlinuz-6.12.0-55.27.1.0.1.el10_0.x86_64"
      args="ro $tuned_params console=tty0 console=ttyS0,115200 rd.luks=0 rd.md=0 
           rd.dm=0 rd.lvm.vg=ocivolume rd.lvm.lv=ocivolume/root rd.net.timeout.dhcp=10
           rd.net.timeout.carrier=5 rd.iscsi.param=node.session.timeo.replacement_timeout=6000 
           net.ifnames=1 nvme_core.shutdown_timeout=10 ipmi_si.tryacpi=0 ipmi_si.trydmi=0 
           libiscsi.debug_libiscsi_eh=1 loglevel=4 crash_kexec_post_notifiers 
           crashkernel=1G-64G:448M,64G-:512M netroot=iscsi rd.iscsi.firmware=1 LANG=en_GB.UTF-8"
      ...
    • un núcleo
      index=0
      kernel="/boot/vmlinuz-6.12.0-102.36.5.2.el10uek.x86_64"
      args="ro $tuned_params console=tty0 console=ttyS0,115200 rd.luks=0 rd.md=0 
           rd.dm=0 rd.lvm.vg=ocivolume rd.lvm.lv=ocivolume/root rd.net.timeout.dhcp=10 
           rd.net.timeout.carrier=5 rd.iscsi.param=node.session.timeo.replacement_timeout=6000 
           net.ifnames=1 nvme_core.shutdown_timeout=10 ipmi_si.tryacpi=0 ipmi_si.trydmi=0 
           libiscsi.debug_libiscsi_eh=1 loglevel=4 crash_kexec_post_notifiers 
           crashkernel=1G-64G:448M,64G-:512M netroot=iscsi rd.iscsi.firmware=1 LANG=en_GB.UTF-8"
      ...
      index=1
      kernel="/boot/vmlinuz-6.12.0-55.27.1.0.1.el10_0.x86_64"
      args="ro $tuned_params LANG=en_US.UTF-8 console=tty0 console=ttyS0,115200 rd.luks=0 rd.md=0 
           rd.dm=0 rd.lvm.vg=ocivolume rd.lvm.lv=ocivolume/root rd.net.timeout.dhcp=10 
           rd.net.timeout.carrier=5 rd.iscsi.param=node.session.timeo.replacement_timeout=6000 
           net.ifnames=1 nvme_core.shutdown_timeout=10 ipmi_si.tryacpi=0 ipmi_si.trydmi=0 
           libiscsi.debug_libiscsi_eh=1 loglevel=4 crash_kexec_post_notifiers 
           crashkernel=1G-64G:448M,64G-:512M netroot=iscsi rd.iscsi.firmware=1"
      ...
  4. Reinicie la instancia para iniciar con la nueva configuración del núcleo.
Consejo

Para cambiar los parámetros de inicio del núcleo sin grubby, edite el archivo /etc/default/grub directamente y modifique la configuración de los parámetros de inicio en la definición GRUB_CMDLINE_LINUX. Por ejemplo, cambie LANG=en_US.UTF-8 a LANG=en_GB.UTF-8:
GRUB_CMDLINE_LINUX="crashkernel=auto LANG=en_GB.UTF-8 console=tty0 console=ttyS0
,115200 rd.luks=0 rd.md=0 rd.dm=0 rd.lvm.vg=ocivolume rd.lvm.lv=ocivolume/root r
d.net.timeout.carrier=5 netroot=iscsi:169.254.0.2:::1:iqn.2015-02.oracle.boot:ue
fi rd.iscsi.param=node.session.timeo.replacement_timeout=6000 net.ifnames=1 nvme
_core.shutdown_timeout=10 ipmi_si.tryacpi=0 ipmi_si.trydmi=0 libiscsi.debug_libi
scsi_eh=1 loglevel=4 ip=dhcp,dhcp6 rd.net.timeout.dhcp=10 crash_kexec_post_notif
iers"
Para que los cambios se apliquen en el siguiente reinicio del sistema, vuelva a crear la configuración de GRUB 2:
sudo grub2-mkconfig -o /boot/grub2/grub.cfg