Utilizzo di grubby per gestire i kernel

Utilizzare il comando grubby per gestire la configurazione di GRUB 2 sul sistema, inclusa la selezione del kernel di boot predefinito o la configurazione di parametri di boot dalla riga di comando aggiuntivi del kernel da utilizzare al boot. Per ulteriori informazioni, vedere la pagina del manuale grubby(8). Lo strumento grubby può essere utilizzato per leggere le informazioni e apportare modifiche persistenti al file grub.cfg. Consente, ad esempio, di modificare le voci di menu GRUB2 per specificare gli argomenti da passare a un kernel all'avvio e alla modifica del kernel predefinito.

Elenca i kernel installati e il kernel predefinito

È possibile utilizzare il comando grubby per visualizzare tutti i kernel installati in un'istanza di Oracle Linux, le informazioni di configurazione sui kernel, il kernel predefinito e il kernel attualmente in esecuzione.

  1. Da una riga di comando, utilizzando i privilegi amministrativi, connettersi all'istanza utilizzando SSH.
  2. Elencare i kernel installati utilizzando una delle seguenti opzioni. L'elenco dei kernel installati potrebbe essere diverso a seconda della versione di Oracle Linux.
    • 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
    • Elencare i kernel utilizzando grubby e l'opzione di 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 la visualizzazione nel menu di GRUB all'avvio. Ad esempio, utilizzando il numero e il titolo dell'indice nell'output precedente, il menu GRUB avrà il seguente aspetto:

      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
  3. Elencare il kernel già configurato come kernel predefinito corrente da utilizzare al boot e il titolo e la posizione, come mostrato nel menu di GRUB. 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 GRUB2 all'avvio di 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

    Se il kernel predefinito e il kernel attualmente in esecuzione non sono identici, i motivi sottostanti potrebbero essere i seguenti:

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

Modifica kernel predefinito

È possibile seguire una delle due opzioni per impostare il kernel predefinito in GRUB 2, utilizzando il comando grubby, scegliere una delle seguenti opzioni:

  1. Da una riga di comando, utilizzando i privilegi amministrativi, connettersi all'istanza utilizzando SSH.
  2. Elenca il kernel predefinito.
    sudo grubby --default-kernel
    /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 kernel del percorso completo. È possibile ottenere il percorso del kernel utilizzando una delle opzioni del passo 2 dell'elenco dei kernel installati e del kernel predefinito.
    sudo grubby --set-default /boot/vmlinuz-4.18.0-553.40.1.el8_10.x86_64

    La modifica ha effetto immediato e persiste durante il reboot del sistema.

  4. Verificare la modifica del kernel predefinito.
    sudo grubby --default-kernel
    /boot/vmlinuz-4.18.0-553.40.1.el8_10.x86_64
    
  5. (Opzionale) Impostare il kernel predefinito sulla prima posizione nell'elenco di boot del kernel utilizzando il comando grubby --set-default-index.
    sudo grubby --set-default-index=0
    Il menu di GRUB avrà il seguente aspetto:
    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

È possibile aggiornare la configurazione di avvio di GRUB 2 per un kernel specifico o tra tutti i kernel installati nell'istanza di Oracle Linux.

Utilizzare il comando grubby --update-kernel per aggiungere nuovi argomenti, modificare i valori degli argomenti esistenti o rimuovere gli argomenti per un kernel specifico o per tutti i kernel. È possibile specificare più argomenti per ciascuna opzione in una lista separata da spazi racchiusa 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 amministrativi, connettersi all'istanza utilizzando SSH.
  2. Per aggiornare tutte le voci del kernel in modo che utilizzino un argomento di boot specifico del kernel, utilizzare grubby --update-kernel=ALL. Ad esempio, modificare l'argomento LANG:
    sudo grubby --update-kernel=ALL --args LANG=en_GB.UTF-8
  3. Verificare che le modifiche siano diventate effettive
    sudo grubby --info=ALL
    index=0
    kernel="/boot/vmlinuz-5.15.0-305.176.4.el8uek.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"
    ...
    index=2
    kernel="/boot/vmlinuz-0-rescue-7063910fe2979258f8fd66f2fb8b8567"
    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"
    ...
  4. Riavviare l'istanza per eseguire il boot con la nuova configurazione del kernel.