Usare grubby per gestire i kernel

Lo strumento grubby può essere utilizzato per leggere le informazioni e apportare modifiche persistenti al file grub.cfg che definisce la configurazione di GRUB per un'istanza di Oracle Linux. Utilizzando il comando grubby, è possibile visualizzare la configurazione del kernel, specificare il kernel di boot predefinito, configurare ulteriori parametri di boot dalla riga di comando del kernel e modificare il menu di boot del kernel (GRUB). Per ulteriori informazioni, consultare la pagina del manuale grubby(8).

Elenca kernel installati e kernel predefinito

Utilizzare il comando grubby per visualizzare tutti i kernel installati su un'istanza di Oracle Linux, le informazioni di configurazione relative ai kernel, il kernel predefinito e il kernel attualmente in esecuzione.

  1. Da una riga di comando, utilizzando i privilegi di amministrazione connettersi all'istanza utilizzando SSH.
  2. Visualizzare i kernel installati utilizzando una delle opzioni riportate di seguito. L'elenco dei kernel installati potrebbe essere diverso a seconda della versione di Oracle Linux.
    • Elencare i kernel utilizzando grubby e l'opzione del comando --info=ALL per visualizzare la configurazione di boot associata a ciascun kernel installato.
      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-5.15.0-305.176.4.el8uek.x86_64" <<Full path to the kernel image
      args="ro crashkernel=auto 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.carrier=5 /
            netroot=iscsi:169.254.0.2:::1:iqn.2015-02.oracle.boot:uefi /
            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 ip=dhcp,dhcp6 rd.net.timeout.dhcp=10 crash_kexec_post_notifiers /
            fips=1 boot=UUID=5097b6ba-ed0e-418a-9c2c-fb25d577991f $tuned_params"
      root="/dev/mapper/ocivolume-root" <<Root partition device
      initrd="/boot/initramfs-5.15.0-305.176.4.el8uek.x86_64.img $tuned_initrd" <<Path to the initial RAM disk (initrd) image
      title="Oracle Linux Server (5.15.0-305.176.4.el8uek.x86_64 with Unbreakable Enterprise Kernel) 8.10" <<Title displayed in the GRUB menu at startup
      id="7063910fe2979258f8fd66f2fb8b8567-5.15.0-305.176.4.el8uek.x86_64" <<Unique identifier for the boot entry
      
      index=1
      kernel="/boot/vmlinuz-4.18.0-553.40.1.el8_10.x86_64"
      ...
      title="Oracle Linux Server (4.18.0-553.40.1.el8_10.x86_64) 8.10"
      ...
      
      index=2
      kernel="/boot/vmlinuz-0-rescue-7063910fe2979258f8fd66f2fb8b8567"
      ...
      title="Oracle Linux Server (0-rescue-7063910fe2979258f8fd66f2fb8b8567 with Unbreakable Enterprise Kernel) 8.10"
      ...

      Dall'output di sudo grubby --info=ALL, è possibile determinare gli elementi visualizzati nel menu di avvio del kernel all'avvio. Ad esempio, utilizzando il numero di indice e il titolo nell'output precedente, il menu di avvio del kernel viene visualizzato come indicato di seguito.

      Oracle Linux Server (5.15.0-305.176.4.el8uek.x86_64 with Unbreakable Enterprise Kernel) 8.10
      Oracle Linux Server (4.18.0-553.40.1.el8_10.x86_64) 8.10
      Oracle Linux Server (0-rescue-7063910fe2979258f8fd66f2fb8b8567 with Unbreakable Enterprise Kernel) 8.10
    • Elencare i kernel installati nella directory /boot.
      sudo ls -l /boot/vmlinuz*
      -rwxr-xr-x. 1 root root 13701352 Feb 12 19:33 /boot/vmlinuz-0-rescue-7063910fe2979258f8fd66f2fb8b8567
      -rwxr-xr-x. 1 root root 10889384 Feb 11 12:19 /boot/vmlinuz-4.18.0-553.40.1.el8_10.x86_64
      -rwxr-xr-x. 1 root root 13701352 Jan 29 04:13 /boot/vmlinuz-5.15.0-305.176.4.el8uek.x86_64
  3. Elencare il kernel configurato come kernel predefinito da utilizzare all'avvio e il titolo e la posizione visualizzati nel menu di avvio del kernel. Il kernel predefinito potrebbe essere diverso a seconda della versione di Oracle Linux.
    • Elenca il kernel predefinito.
      sudo grubby --default-kernel
      /boot/vmlinuz-5.15.0-305.176.4.el8uek.x86_64
      
    • Controllare il titolo del kernel predefinito.
      sudo grubby --default-title

      L'output corrisponde al valore visualizzato nel menu di avvio del kernel quando si avvia Oracle Linux

      Oracle Linux Server (5.15.0-305.176.4.el8uek.x86_64 with Unbreakable Enterprise Kernel) 8.10
      
    • Individuare la posizione del kernel predefinito nell'elenco di boot del kernel.
      sudo grubby --default-index
      0
  4. Controllare il kernel attualmente in esecuzione nell'istanza.
    uname -r
    5.15.0-305.176.4.el8uek.x86_64

    Il kernel predefinito e il kernel attualmente in esecuzione potrebbero non essere identici perché

    • È stato installato un kernel più recente, ma non è stato eseguito il reboot del sistema
    • Durante il reboot del sistema, è stato selezionato manualmente un kernel alternativo per essere il kernel operativo
    • Il kernel predefinito è stato aggiornato manualmente ma il sistema non è stato riavviato dopo l'aggiornamento

Modifica kernel predefinito

Utilizzare il comando grubby per impostare il kernel di boot predefinito nella configurazione di GRUB 2.

  1. Da una riga di comando, utilizzando i privilegi di amministrazione connettersi all'istanza utilizzando SSH.
  2. Elenca il kernel predefinito.
    sudo grubby --default-kernel

    Ad esempio:

    /boot/vmlinuz-5.15.0-305.176.4.el8uek.x86_64
    
  3. Utilizzare il comando grubby --set-default per modificare il kernel predefinito e assicurarsi di specificare il percorso completo del kernel. È possibile ottenere il percorso del kernel utilizzando una delle opzioni descritte nel Passo 2 dell'elenco dei kernel installati e del kernel predefinito.

    Ad esempio:

    sudo grubby --set-default /boot/vmlinuz-4.18.0-553.40.1.el8_10.x86_64

    La modifica viene applicata immediatamente e persiste durante il reboot del sistema.

  4. Verificare la modifica del kernel predefinito.
    sudo grubby --default-kernel

    Ad esempio:

    /boot/vmlinuz-4.18.0-553.40.1.el8_10.x86_64
    
  5. (Opzionale) Impostare il nuovo kernel predefinito sulla prima posizione nel menu di boot del kernel utilizzando il comando grubby --set-default-index.
    sudo grubby --set-default-index=0
    Il nuovo kernel predefinito viene visualizzato per primo nel menu di avvio del kernel, ad esempio:
    Oracle Linux Server (4.18.0-553.40.1.el8_10.x86_64) 8.10
    Oracle Linux Server (5.15.0-305.176.4.el8uek.x86_64 with Unbreakable Enterprise Kernel) 8.10
    Oracle Linux Server (0-rescue-7063910fe2979258f8fd66f2fb8b8567 with Unbreakable Enterprise Kernel) 8.10
  6. Riavviare l'istanza per eseguire il boot con il nuovo kernel predefinito.

Modificare i parametri di boot del kernel

Utilizzare il comando grubby --update-kernel per aggiungere nuovi argomenti, modificare i valori degli argomenti esistenti o rimuovere argomenti per un kernel specifico o per tutti i kernel. È possibile specificare più argomenti per ogni opzione in un elenco separato da spazi tra virgolette. È possibile aggiungere e rimuovere argomenti nella stessa operazione. Quando si utilizza l'opzione --args, se un argomento esiste già, il nuovo valore sostituisce i vecchi valori.

  1. Da una riga di comando, utilizzando i privilegi di amministrazione connettersi all'istanza utilizzando SSH.
  2. Usare il comando grubby --update-kernel per modificare o aggiungere uno specifico argomento di boot del kernel. Ad esempio, aggiornare i parametri del kernel per modificare l'argomento LANG per:
    • tutti i kernel
      sudo grubby --update-kernel=ALL --args LANG=en_GB.UTF-8
    • un kernel
       sudo grubby --update-kernel /boot/vmlinuz-5.4.17-2136.337.5.1.el7uek.x86_64 --args LANG=en_GB.UTF-8
      
  3. Verificare che le modifiche siano state applicate.
    sudo grubby --info=ALL
    • tutti i kernel
      index=0
      kernel="/boot/vmlinuz-5.4.17-2136.337.5.1.el7uek.x86_64"
      args="ro crashkernel=auto 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.carrier=5 
         netroot=iscsi:169.254.0.2:::1:iqn.2015-02.oracle.boot:uefi 
         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 ip=dhcp,dhcp6 rd.net.timeout.dhcp=10   
         crash_kexec_post_notifiers fips=1 boot=UUID=5097b6ba-ed0e-418a-9c2c-fb25d577991f 
         LANG=en_GB.UTF-8 $tuned_params"
      ...
      index=1
      kernel="/boot/vmlinuz-4.18.0-553.40.1.el8_10.x86_64"
      args="ro crashkernel=auto 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.carrier=5 
         netroot=iscsi:169.254.0.2:::1:iqn.2015-02.oracle.boot:uefi 
         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 ip=dhcp,dhcp6 rd.net.timeout.dhcp=10 crash_kexec_post_notifiers 
         fips=1 boot=UUID=5097b6ba-ed0e-418a-9c2c-fb25d577991f 
         LANG=en_GB.UTF-8 $tuned_params"
      ...
    • un kernel
      index=0
      kernel="/boot/vmlinuz-5.4.17-2136.337.5.1.el7uek.x86_64"
      args="ro crashkernel=auto 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.carrier=5 
         netroot=iscsi:169.254.0.2:::1:iqn.2015-02.oracle.boot:uefi 
         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 ip=dhcp,dhcp6 rd.net.timeout.dhcp=10   
         crash_kexec_post_notifiers fips=1 boot=UUID=5097b6ba-ed0e-418a-9c2c-fb25d577991f 
         LANG=en_GB.UTF-8 $tuned_params"
      ...
      index=1
      kernel="/boot/vmlinuz-4.18.0-553.40.1.el8_10.x86_64"
      args="ro crashkernel=auto 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.carrier=5 
         netroot=iscsi:169.254.0.2:::1:iqn.2015-02.oracle.boot:uefi 
         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 ip=dhcp,dhcp6 rd.net.timeout.dhcp=10 crash_kexec_post_notifiers 
         fips=1 boot=UUID=5097b6ba-ed0e-418a-9c2c-fb25d577991f 
         LANG=en_US.UTF-8 $tuned_params"
      ...
  4. Riavviare l'istanza per eseguire il boot con la nuova configurazione del kernel.
Suggerimento

Per modificare i parametri di boot del kernel senza grubby, modificare direttamente il file /etc/default/grub e modificare le impostazioni dei parametri di boot nella definizione GRUB_CMDLINE_LINUX. Ad esempio, modificare LANG=en_US.UTF-8 in 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"
Per rendere effettive le modifiche al successivo reboot del sistema, ricreare la configurazione di GRUB 2:
sudo grub2-mkconfig -o /boot/grub2/grub.cfg

Per ulteriori informazioni sui parametri kernel, vedere la documentazione Managing Kernels and System Boot relativa alla release Oracle Linux dell'istanza in uso.