Reimpostare sequenza righe in GRUB2

Dopo l’installazione di fedora 34, all’avvio, la finestra di GRUB2 contiene una serie di righe che fanno riferimento a varie versioni di Kernel:

Fedora (5.13.10-200.fc34.x86_64) 34 (WEorksation Edition)
Fedora (5.13.9-200.fc34.x86_64) 34 (WEorksation Edition)
Fedora (5.11.12-300.fc34.x86_64) 34 (WEorksation Edition)
Fedora (0-rescue-ec…360) 34 (WEorksation Edition)
Fedora 32 (WEorksation Edition) (on /dev/sda5)

Ora io vorrei mostrare come kernel di default la riga con Fedora 32, perchè è quello che uso ordinariamente, in modo da farlo partire con il semplice ‘INVIO’ o, automaticamente

Ho guardato dentro /boot/grub2/grub.cfg, ma non ho capito come agire, perchè nessuna delle prime 4 righe è chiaramente leggibile nei menuentry del file.
riporto qui sotto il file grub.cfg:

#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub2-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#

### BEGIN /etc/grub.d/00_header ###
set pager=1

if [ -f ${config_directory}/grubenv ]; then
  load_env -f ${config_directory}/grubenv
elif [ -s $prefix/grubenv ]; then
  load_env
fi
if [ "${next_entry}" ] ; then
   set default="${next_entry}"
   set next_entry=
   save_env next_entry
   set boot_once=true
else
   set default="${saved_entry}"
fi

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

export menuentry_id_option

if [ "${prev_saved_entry}" ]; then
  set saved_entry="${prev_saved_entry}"
  save_env saved_entry
  set prev_saved_entry=
  save_env prev_saved_entry
  set boot_once=true
fi

function savedefault {
  if [ -z "${boot_once}" ]; then
    saved_entry="${chosen}"
    save_env saved_entry
  fi
}

function load_video {
  if [ x$feature_all_video_module = xy ]; then
    insmod all_video
  else
    insmod efi_gop
    insmod efi_uga
    insmod ieee1275_fb
    insmod vbe
    insmod vga
    insmod video_bochs
    insmod video_cirrus
  fi
}

terminal_output console
if [ x$feature_timeout_style = xy ] ; then
  set timeout_style=menu
  set timeout=-1
# Fallback normal timeout code in case the timeout_style feature is
# unavailable.
else
  set timeout=-1
fi
### END /etc/grub.d/00_header ###

### BEGIN /etc/grub.d/01_users ###
if [ -f ${prefix}/user.cfg ]; then
  source ${prefix}/user.cfg
  if [ -n "${GRUB2_PASSWORD}" ]; then
    set superusers="root"
    export superusers
    password_pbkdf2 root ${GRUB2_PASSWORD}
  fi
fi
### END /etc/grub.d/01_users ###

### BEGIN /etc/grub.d/08_fallback_counting ###
insmod increment
# Check if boot_counter exists and boot_success=0 to activate this behaviour.
if [ -n "${boot_counter}" -a "${boot_success}" = "0" ]; then
  # if countdown has ended, choose to boot rollback deployment,
  # i.e. default=1 on OSTree-based systems.
  if  [ "${boot_counter}" = "0" -o "${boot_counter}" = "-1" ]; then
    set default=1
    set boot_counter=-1
  # otherwise decrement boot_counter
  else
    decrement boot_counter
  fi
  save_env boot_counter
fi
### END /etc/grub.d/08_fallback_counting ###

### BEGIN /etc/grub.d/10_linux ###
insmod part_gpt
insmod ext2
set root='hd0,gpt2'
if [ x$feature_platform_search_hint = xy ]; then
  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt2 --hint-efi=hd0,gpt2 --hint-baremetal=ahci0,gpt2  b587fbbb-39fa-4dc5-b3e3-b9889f082f87
else
  search --no-floppy --fs-uuid --set=root b587fbbb-39fa-4dc5-b3e3-b9889f082f87
fi
insmod part_gpt
insmod fat
set boot='hd0,gpt1'
if [ x$feature_platform_search_hint = xy ]; then
  search --no-floppy --fs-uuid --set=boot --hint-bios=hd0,gpt1 --hint-efi=hd0,gpt1 --hint-baremetal=ahci0,gpt1  4637-4332
else
  search --no-floppy --fs-uuid --set=boot 4637-4332
fi

# This section was generated by a script. Do not modify the generated file - all changes
# will be lost the next time file is regenerated. Instead edit the BootLoaderSpec files.
#
# The blscfg command parses the BootLoaderSpec files stored in /boot/loader/entries and
# populates the boot menu. Please refer to the Boot Loader Specification documentation
# for the files format: https://www.freedesktop.org/wiki/Specifications/BootLoaderSpec/.

# The kernelopts variable should be defined in the grubenv file. But to ensure that menu
# entries populated from BootLoaderSpec files that use this variable work correctly even
# without a grubenv file, define a fallback kernelopts variable if this has not been set.
#
# The kernelopts variable in the grubenv file can be modified using the grubby tool or by
# executing the grub2-mkconfig tool. For the latter, the values of the GRUB_CMDLINE_LINUX
# and GRUB_CMDLINE_LINUX_DEFAULT options from /etc/default/grub file are used to set both
# the kernelopts variable in the grubenv file and the fallback kernelopts variable.
if [ -z "${kernelopts}" ]; then
  set kernelopts="root=UUID=745e3367-f7d4-4dc4-83df-e97bf5bd0f0a ro rootflags=subvol=root resume=UUID=b96b39d4-405c-4354-ba8b-ddd11f01207c rhgb quiet "
fi

insmod blscfg
blscfg
### END /etc/grub.d/10_linux ###

### BEGIN /etc/grub.d/10_reset_boot_success ###
# Hiding the menu is ok if last boot was ok or if this is a first boot attempt to boot the entry
if [ "${boot_success}" = "1" -o "${boot_indeterminate}" = "1" ]; then
  set menu_hide_ok=1
else
  set menu_hide_ok=0 
fi
# Reset boot_indeterminate after a successful boot
if [ "${boot_success}" = "1" ] ; then
  set boot_indeterminate=0
# Avoid boot_indeterminate causing the menu to be hidden more then once
elif [ "${boot_indeterminate}" = "1" ]; then
  set boot_indeterminate=2
fi
# Reset boot_success for current boot 
set boot_success=0
save_env boot_success boot_indeterminate
### END /etc/grub.d/10_reset_boot_success ###

### BEGIN /etc/grub.d/12_menu_auto_hide ###
if [ x$feature_timeout_style = xy ] ; then
  if [ "${menu_show_once}" ]; then
    unset menu_show_once
    save_env menu_show_once
    set timeout_style=menu
    set timeout=60
  elif [ "${menu_auto_hide}" -a "${menu_hide_ok}" = "1" ]; then
    set orig_timeout_style=${timeout_style}
    set orig_timeout=${timeout}
    if [ "${fastboot}" = "1" ]; then
      # timeout_style=menu + timeout=0 avoids the countdown code keypress check
      set timeout_style=menu
      set timeout=0
    else
      set timeout_style=hidden
      set timeout=1
    fi
  fi
fi
### END /etc/grub.d/12_menu_auto_hide ###

### BEGIN /etc/grub.d/14_menu_show_once ###
if [ x$feature_timeout_style = xy ]; then
  if [ "${menu_show_once_timeout}" ]; then
    set timeout_style=menu
    set timeout="${menu_show_once_timeout}"
    unset menu_show_once_timeout
    save_env menu_show_once_timeout
  fi
fi
### END /etc/grub.d/14_menu_show_once ###

### BEGIN /etc/grub.d/20_linux_xen ###

### END /etc/grub.d/20_linux_xen ###

### BEGIN /etc/grub.d/20_ppc_terminfo ###
### END /etc/grub.d/20_ppc_terminfo ###

### BEGIN /etc/grub.d/30_os-prober ###
	menuentry 'Fedora 32 (Workstation Edition) (on /dev/sda5)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/vmlinuz-5.11.22-100.fc32.x86_64--35ab9628-2ad4-4915-9d94-fdf1bbd6ddc3' {
		insmod part_gpt
		insmod ext2
		set root='hd0,gpt3'
		if [ x$feature_platform_search_hint = xy ]; then
		  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt3 --hint-efi=hd0,gpt3 --hint-baremetal=ahci0,gpt3  dd45dd40-3620-42ca-bf0f-31141eb4753a
		else
		  search --no-floppy --fs-uuid --set=root dd45dd40-3620-42ca-bf0f-31141eb4753a
		fi
		linux /vmlinuz-5.11.22-100.fc32.x86_64 root=/dev/sda5
		initrd /initramfs-5.11.22-100.fc32.x86_64.img
	}

# Other OS found, undo autohiding of menu unless menu_auto_hide=2
if [ "${orig_timeout_style}" -a "${menu_auto_hide}" != "2" ]; then
  set timeout_style=${orig_timeout_style}
  set timeout=${orig_timeout}
fi
### END /etc/grub.d/30_os-prober ###

### BEGIN /etc/grub.d/30_uefi-firmware ###
menuentry 'UEFI Firmware Settings' $menuentry_id_option 'uefi-firmware' {
	fwsetup
}
### END /etc/grub.d/30_uefi-firmware ###

### BEGIN /etc/grub.d/40_custom ###
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.
### END /etc/grub.d/40_custom ###

### BEGIN /etc/grub.d/41_custom ###
if [ -f  ${config_directory}/custom.cfg ]; then
  source ${config_directory}/custom.cfg
elif [ -z "${config_directory}" -a -f  $prefix/custom.cfg ]; then
  source $prefix/custom.cfg
fi
### END /etc/grub.d/41_custom ###

Sarebbe comodo poterlo fare con uno script apposito.
A manina, infatti mi sembra pericoloso, specialmente per chi, come me, conosce assai superficialmente l’ambiente GRUB, inserito fra l’altro nel contesto UEFI.

Per rigenerare una configurazione di Grub il comando da dare è:

sudo grub2-mkconfig -o /boot/grub2/grub.cfg

Se inoltre intendi abbellire il tutto devi modificare il file /etc/default/grub. Questa è la mia configurazione:

GRUB_TIMEOUT=“30”
GRUB_DISTRIBUTOR="$(sed ‘s, release .*$,g’ /etc/system-release)"
GRUB_DEFAULT=“saved”
GRUB_DISABLE_SUBMENU=“true”
GRUB_TERMINAL_OUTPUT=“gfxterm”
GRUB_CMDLINE_LINUX=“resume=UUID=589cceea-8b9a-42d1-be7f-64f60dac523d rhgb quiet”
GRUB_DISABLE_RECOVERY=“false”
GRUB_GFXMODE=“1366x768”
GRUB_BACKGROUND="/boot/grub2/w650_007.jpg"
export GRUB_COLOR_NORMAL=“white/black”
export GRUB_COLOR_HIGHLIGHT=“magenta/black”
GRUB_ENABLE_BLSCFG=“false”

Spero di averti aiutato un pochino.

Ci saranno altri modi.

Per ottenere la lista delle voci presenti nel menù di GRUB:
sudo ls /boot/loader/entries/ | sed -e 's/\.conf$//'

Quindi impostare quella con cui si vuole partire di default:
sudo grub2-set-default <voce>
Dove <voce> è uno dei risultati ottenuti con il comando precedente.

Infine, come scritto da @d68qdq8dq:
sudo grub2-mkconfig -o /boot/grub2/grub.cfg

Esempio:

[[email protected] ~]$ sudo ls /boot/loader/entries/ | sed -e 's/\.conf$//'
[sudo] password for utente: 
3fbf8537f98e425f8afa8f39e7bbf6a9-0-rescue
3fbf8537f98e425f8afa8f39e7bbf6a9-5.13.10-200.fc34.x86_64
3fbf8537f98e425f8afa8f39e7bbf6a9-5.13.8-200.fc34.x86_64
3fbf8537f98e425f8afa8f39e7bbf6a9-5.13.9-200.fc34.x86_64

[[email protected] ~]$ sudo grub2-set-default 3fbf8537f98e425f8afa8f39e7bbf6a9-5.13.9-200.fc34.x86_64

[[email protected] ~]$ sudo grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
done

Riferimenti:

Dall’esecuzione del 1° comando ho ottenuto:

[[email protected] ~]$ sudo ls /boot/loader/entries/ | sed -e 's/\.conf$//'
[sudo] password di petrus: 
+ùec7e5a3e728d4ba694d70aef322e4360-0-rescue
ec7e5a3e728d4ba694d70aef322e4360-5.13.10-200.fc34.x86_64
ec7e5a3e728d4ba694d70aef322e4360-5.13.12-200.fc34.x86_64
ec7e5a3e728d4ba694d70aef322e4360-5.13.9-200.fc34.x86_64
[[email protected] ~]$

Nessuna delle voci riportate contiene i riferimenti a fc32 che nella finestra di avvio di GRUB compare come ultima.
Non capisco perchè lo UUIID riportato a fianco di ciascuna riga non corrisponde a nessuno di quelli trovati col comando

[[email protected] ~]$ ls -l /dev/disk/by-uuid
totale 0
lrwxrwxrwx. 1 root root 10 21 ago 12.14 162dd60b-b59f-41fd-a599-08dc4c878c56 -> ../../sdc2
lrwxrwxrwx. 1 root root 10 21 ago 12.14 35ab9628-2ad4-4915-9d94-fdf1bbd6ddc3 -> ../../sda5
lrwxrwxrwx. 1 root root 10 21 ago 12.14 3b32441d-582e-4277-a033-5777b1690f2c -> ../../sdc1
lrwxrwxrwx. 1 root root 10 21 ago 12.14 4637-4332 -> ../../sda1
lrwxrwxrwx. 1 root root 10 21 ago 12.14 5bd98b9e-dc0d-4729-89e3-3d76e9cf73ab -> ../../sdb1
lrwxrwxrwx. 1 root root 10 21 ago 12.14 696b8a5e-4d57-43d3-b66c-39bc71edc4fa -> ../../sdc3
lrwxrwxrwx. 1 root root 10 21 ago 12.14 745e3367-f7d4-4dc4-83df-e97bf5bd0f0a -> ../../sda7
lrwxrwxrwx. 1 root root 10 21 ago 12.14 99fbf423-0dc2-43c4-a2c2-28687d80c511 -> ../../sda6
lrwxrwxrwx. 1 root root 10 21 ago 12.14 b587fbbb-39fa-4dc5-b3e3-b9889f082f87 -> ../../sda2
lrwxrwxrwx. 1 root root 10 21 ago 12.14 b96b39d4-405c-4354-ba8b-ddd11f01207c -> ../../sda4
lrwxrwxrwx. 1 root root 10 21 ago 12.14 dd45dd40-3620-42ca-bf0f-31141eb4753a -> ../../sda3

A questo punto non so come potrei impostare il comando nell’istruzione

`sudo grub2-set-default <voce>`

se voce deve essere un UUID ottenuti con il comando precedente.

Ma se a quanto capisco hai due installazioni, non è che il GRUB viene gestito e configurato sull’altra installazione?

Questi uuid non sono in relazione. Infatti quello che trovi sotto /boot/loader/entries è quello che trovi in /etc/machine-id

Oppure in caso di dual boot, questa entry si ricava in un altro modo che personalmente non so (non ho esperienze di dual boot da qualche lustro).

Questo comando ti restituisce qualcosa?
grep -P "^menuentry" /boot/grub2/grub.cfg | cut -d "'" -f2

L’esperienza che mi sono fatto fino ad oggi mi dice che il GRUB attivo è sempre quello generato con l’ultima installazione eseguita.
L’ultima mia installazione è fedora 34.

[[email protected] ~]$ sudo grep -P "^menuentry" /boot/grub2/grub.cfg | cut -d "'" -f2
UEFI Firmware Settings
[[email protected] ~]$ 

Dunque forse quella voce viene inserita al volo da grub2-mkconfig tramite quest’altro osprobe.
Quindi proverei:

sudo grub2-set-defaul Fedora 32 (Workstation Edition) (on /dev/sda5)

sudo grub2-mkconfig -o /boot/grub2/grub.cfg

Ho provato il primo dei due comandi della sequenza:

[[email protected] ~]$ sudo grub2-set-default Fedora 32 (WEorksation Edition) (on /dev/sda5)
bash: errore di sintassi vicino al token non atteso "("

Prima che arrivasse la tua fortese risposta, ho cercato altre soluzioni ed ho trovato il comando grubby. Ho ripetuto la stessa riga parametrica nel corrispondente comando grubby:

[[email protected] ~]$ sudo grubby --set-default=Fedora 32 (WEorksation Edition) (on /dev/sda5)
bash: errore di sintassi vicino al token non atteso "("

anche grubby fornisce l’errore sintattico che però io non ho capito a quale parentesi si possa riferire.

Ho trovato poi il seguente comando di tipo infortmativo:

[[email protected] ~]$ sudo grubby --info=ALL | grep -E "^kernel|^index"
index=0
kernel="/boot/vmlinuz-5.13.12-200.fc34.x86_64"
index=1
kernel="/boot/vmlinuz-5.13.10-200.fc34.x86_64"
index=2
kernel="/boot/vmlinuz-5.13.9-200.fc34.x86_64"
index=3
kernel="/boot/vmlinuz-0-rescue-ec7e5a3e728d4ba694d70aef322e4360"
[[email protected] ~]$ 

Ma anch’esso non riporta l’indice relativo a fedora 32.
A me sembra come se tutti i comandi provati fino ignorino assolutamente la presenza del dual boot.

Ah, dimenticavo. Questo pomeriggio ho provato anche:

[[email protected] ~]$ sudo grubby --set-default-index=4
The param 4 is incorrect
[[email protected] ~]$ 

Ciò perchè, nella sequenza di boot della finestra di Grub2, la riga relativa a fc32 occupa la posizione 5.

Probabilmente anche grubby sotto al cofano va a leggere il contenuto della directory /boot/loader/entries, mentre gli altri sistemi vengono inclusi al volo in grub.cfg dal comando grub-mkconfig.

Prova a mettere le virgolette

sudo grub2-set-default "Fedora 32 (Workstation Edition) (on /dev/sda5)"

Curiosità: ma è scritto con la E?

Avendo letto che per i sistemi UEFI, per la gestione corretta del grub loader, occorre usare sempre grubby, ho eseguito:

[[email protected] ~]$ sudo grubby --set-default="Fedora 32 (Worksation Edition) (on /dev/sda5)"
The param Fedora 32 (Worksation Edition) (on /dev/sda5) is incorrect

il comando grubby vuole un percorsoes, in effetti la stringa

“Fedora 32 (Worksation Edition) (on /dev/sda5)”

non è un percorso.

Ma dove lo prendo il percorso corretto, se non lo vedo riportato in nessuna delle ricerche fatte?

A quanto capisco, le voci vengono prese da /boot/loader/entries.
Gli altri sistemi operativi presenti vengono invece inclusi come dicevo, al volo, in fase di grub2-mkconfig usando os-probe. Il tutto eseguendo questi template che si trovano sotto /etc/grub.d
Alla fine verrà generato e usato quel file /boot/grub2/grub.cfg

Quindi a naso dev’essere una qualche sorta di limitazione di grubby.
Prova con grub2-set-default, è del tutto legittimo usarlo. Ho provato velocemente su un dual boot in una VM, ma mi ha restituito dei warning che la sintassi è cambiata. Però ha funzionato.

Il tutto mi dà l’impressione che un’operazione in teoria semplice, sia invece complicata :sweat_smile:

Ho provato diverse strade, ma nessuna mi ha aiutato, anzi …

Ora ho letto la tua ultima risposta ed ho provato subito.
Sinceramente, devo dire che sono rimasto sorpreso 2 volte, la prima quando il comando non è stato rigettato, la seconda, quando, al riavvio, ho trovato nella finestra di Grub la selezione sulla riga fi fc32.

Mi dispiace non averlo fatto prima, ma ero convinto che il comando venisse rifiutato, così come è successo con grubby.

Non ho però eseguito mkconfig.