GRUB2 è il bootloader più comune per i sistemi RHEL 7. Un link simbolico al file di configurazione di GRUB2 dovrebbe essere presente in /etc/grub2.cfg . Il post descrive come cambiare il kernel predefinito in un vecchio kernel.
Con il seguente comando si può visualizzare la versione di Kernel in uso e altre informazioni:
# uname -ar Linux testing.cyberspazio.org 3.10.0-514.26.2.el7.x86_64 #1 SMP Tue Jul 4 15:04:05 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
In questo caso la versione di kernel utilizzata è il 3.10.0-514.26.2.el7.x86_64
Per impostazione predefinita, il valore per la direttiva GRUB_DEFAULT nel /etc/default/grub file è “saved”.
# cat /etc/default/grub GRUB_TIMEOUT=5 GRUB_DEFAULT=saved GRUB_DISABLE_SUBMENU=true GRUB_TERMINAL_OUTPUT="console" GRUB_CMDLINE_LINUX="nomodeset crashkernel=auto rd.lvm.lv=vg_os/lv_root rd.lvm.lv=vg_os/lv_swap rhgb quiet" GRUB_DISABLE_RECOVERY="true"
Questo ordina a GRUB 2 di caricare il kernel specificato dalla direttiva saved_entry nel file di ambiente GRUB 2, che si trova in /boot/grub2/grubenv .
# cat /boot/grub2/grubenv # GRUB Environment Block saved_entry=CentOS Linux (3.10.0-693.2.2.el7.x86_64) 7 (Core)
Si può impostare un altro record GRUB come predefinito, usando il comando grub2-set-default , che aggiornerà il file di ambiente GRUB 2. Per impostazione predefinita, il valore salvato_entry è impostato sul nome dell’ultimo kernel installato del kernel del tipo di pacchetto. Questo è definito in /etc/sysconfig/kernel dalle direttive UPDATEDEFAULT e DEFAULTKERNEL
# cat /etc/sysconfig/kernel # UPDATEDEFAULT specifies if new-kernel-pkg should make # new kernels the default UPDATEDEFAULT=yes # DEFAULTKERNEL specifies the default kernel package type DEFAULTKERNEL=kernel # MAKEDEBUG specifies if new-kernel-pkg should create non-default # "debug" entries for new kernels. MAKEDEBUG=yes
Per forzare un sistema a utilizzare sempre una particolare voce di menu, utilizzare il nome della voce del menu come chiave della direttiva GRUB_DEFAULT nel file /etc/default/grub . Il seguente comando stamperà un elenco delle voci di menu presenti nella configurazione di GRUB2.
# awk -F' /^menuentry/{print$2} /etc/grub2.cfg CentOS Linux (3.10.0-693.11.6.el7.x86_64) 7 (Core) CentOS Linux (3.10.0-693.11.6.el7.x86_64) 7 (Core) with debugging CentOS Linux (3.10.0-514.21.1.el7.x86_64) 7 (Core) CentOS Linux (3.10.0-514.21.1.el7.x86_64) 7 (Core) with debugging CentOS Linux (3.10.0-514.16.1.el7.x86_64) 7 (Core) CentOS Linux (3.10.0-514.16.1.el7.x86_64) 7 (Core) with debugging CentOS Linux (3.10.0-327.18.2.el7.x86_64) 7 (Core) CentOS Linux (3.10.0-327.18.2.el7.x86_64) 7 (Core) with debugging CentOS Linux (0-rescue-31e871a0d760404d91649aecb7986bb3) 7 (Core) CentOS Linux (0-rescue-31e871a0d760404d91649aecb7986bb3) 7 (Core) with debugging
GRUB 2 supporta l’utilizzo di un valore numerico come chiave per la direttiva saved_entry per modificare l’ordine predefinito in cui vengono caricati il kernel o i sistemi operativi. Per specificare quale kernel deve essere caricato per primo, passare il suo numero al comando grub2-set-default. Gli ID vengono assegnati in modo che le voci di menu vengano visualizzate nel file /etc/grub2.cfg che inizia con 0. Quindi il kernel 3.10.0-514.21.1.el7.x86_64 ottiene un ID di 2 (la numerazione parte dal numero 0 [zero])
# grub2-set-default 2
Questo renderà 3.10.0-514.21.1.el7.x86_64 come kernel default (era il precedente kernel del sistema)
Controlla il file qui sotto per vedere il kernel che verrà caricato all’avvio successivo, incrocia il valore numerico con il menu entry nel file / etc / default / grub.
# cat /boot/grub2/grubenv |grep saved saved_entry=2
Le modifiche a / etc / default / grub richiedono la ricostruzione del file grub.cfg come segue:
# grub2-mkconfig -o /boot/grub2/grub.cfg
Una volta verificato tutto e ricostruito il file di configurazione di GRUB2, è possibile procedere con un riavvio del server affinché le modifiche abbiano effetto.
# shutdown -r now