Come impostare correttamente la corretta voce di menu predefinita di GRUB 2?


27

Sto eseguendo GRUB 2.00 su un sistema Gentoo Linux.

Compilo manualmente i miei kernel e quindi li installo /bootcon make install. Al momento ho i seguenti kernel /boot:

# ls -1 /boot/vmlinuz*
/boot/vmlinuz-3.7.4-gentoo-5
/boot/vmlinuz-3.7.4-gentoo-first
/boot/vmlinuz-3.7.4-gentoo-fourth
/boot/vmlinuz-3.7.4-gentoo-third

L'esecuzione grub2-mkconfigrisulta nel seguente output:

# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-3.7.4-gentoo-third
Found linux image: /boot/vmlinuz-3.7.4-gentoo-fourth
Found linux image: /boot/vmlinuz-3.7.4-gentoo-first
Found linux image: /boot/vmlinuz-3.7.4-gentoo-5
done

Se ora leggo il /boot/grub2/grub.cfgfile risultante , noto che sono state create le seguenti voci:

  • Una voce predefinita principale che inizia vmlinuz-3.7.4-gentoo-third
  • Un sottomenu con tutte le altre voci (comprese quelle di ripristino), nello stesso ordine del grub2-mkconfigcomando

Il problema è che all'avvio vorrei caricare di default la quinta revisione del mio kernel ( vmlinuz-3.7.4-gentoo-5), non la terza ( vmlinuz-3.7.4-gentoo-third). Preferisco anche non accedere al sottomenu per scegliere il kernel giusto da caricare.

Come posso cambiare questo comportamento? Come posso dire a GRUB che voglio eseguire la quinta revisione del mio kernel di default e non la terza revisione precedente? In generale, come posso modificare la linea di ingresso predefinita in modo che corrisponda al kernel che voglio e non a uno apparentemente casuale scelto da GRUB?

Ho anche provato a inserire le seguenti righe /etc/default/grub:

GRUB_DEFAULT=saved
GRUB_SAVEDEFAULT=true

Questo non risolve il problema nel modo che desidero. Ma almeno GRUB sembra ricordare l'ultimo kernel da cui ho avviato e lo seleziona automaticamente dal sottomenu. È solo che non mi piace accedere al sottomenu.


Ho notato che hai specificato -o /boot/grub2/grub.cfgcome file di output. La directory /boot/grub/esiste ancora?
ott--

Risposte:


12

Per selezionare una voce di menu nel sottomenu "Opzioni avanzate" impostare GRUB_DEFAULT = "1> 3". Ora puoi eseguire grub2-mkconfig per generare il file di configurazione di grub. Al prossimo riavvio vmlinuz-3.7.4-gentoo-5 dovrebbe avviarsi.

Nota : questo non cambierà la voce predefinita nel menu di grub, cioè la voce predefinita indicherà comunque la stessa voce che hai in questo momento. Ma l'immagine che verrà avviata di default sarà la quarta immagine nelle "Opzioni avanzate". Per rendere vmlinuz-3.7.4-gentoo-5 come voce predefinita nel menu di grub, l'ordinamento delle immagini dovrebbe essere tale che vmlinuz-3.7.4-gentoo-5 dovrebbe essere la prima immagine quando si esegue grub2-mkconfig .


2
Si noti che le virgolette sono importanti. Vale a dire GRUB_DEFAULT = 1> 3 non funzionerà.
ctuffli,

7

Se hai un sottomenu nel tuo grub.cfg dovresti usare due cifre come questa:

grub-reboot '1>3'

Il primo è l'indice del menu e il secondo è l'indice del sottomenu.

Ad esempio, per avviare l'ultima voce dalla configurazione in questo modo:

grep menu /boot/grub/grub.cfg

menuentry 'Debian GNU/Linux' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-1ffa16a9-fda2-43b5-91b9-c91a08ff190f' {
submenu 'Advanced options for Debian GNU/Linux' $menuentry_id_option 'gnulinux-advanced-1ffa16a9-fda2-43b5-91b9-c91a08ff190f' {
    menuentry 'Debian GNU/Linux, with Linux 4.6.0-0.bpo.1-amd64' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.6.0-0.bpo.1-amd64-advanced-1ffa16a9-fda2-43b5-91b9-c91a08ff190f' {
    menuentry 'Debian GNU/Linux, with Linux 4.6.0-0.bpo.1-amd64 (sysvinit)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.6.0-0.bpo.1-amd64-init-sysvinit-1ffa16a9-fda2-43b5-91b9-c91a08ff190f' {
    menuentry 'Debian GNU/Linux, with Linux 4.6.0-0.bpo.1-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.6.0-0.bpo.1-amd64-recovery-1ffa16a9-fda2-43b5-91b9-c91a08ff190f' {
    menuentry 'Debian GNU/Linux, with Linux 3.16.0-4-amd64' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.16.0-4-amd64-advanced-1ffa16a9-fda2-43b5-91b9-c91a08ff190f' {
    menuentry 'Debian GNU/Linux, with Linux 3.16.0-4-amd64 (sysvinit)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.16.0-4-amd64-init-sysvinit-1ffa16a9-fda2-43b5-91b9-c91a08ff190f' {
    menuentry 'Debian GNU/Linux, with Linux 3.16.0-4-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.16.0-4-amd64-recovery-1ffa16a9-fda2-43b5-91b9-c91a08ff190f' {

dovresti usare:

grub-reboot '1>5'

e riavviare.


Strano. l'indice del sottomenu inizia con 0, mentre il menu principale da 1
VarunAgw

5

puoi anche usare GRUB_DEFAULT=saved. In questo caso useresti

$ grub2-set-default -h
Usage: grub2-set-default [OPTION] MENU_ENTRY
Set the default boot menu entry for GRUB.

  -h, --help              print this message and exit
  -v, --version           print the version information and exit
  --boot-directory=DIR    expect GRUB images under the directory DIR/grub2
                          instead of the /boot/grub2 directory

MENU_ENTRY is a number, a menu item title or a menu item identifier.

o se è solo per il prossimo avvio:

$ grub2-reboot -h
Usage: grub2-reboot [OPTION] MENU_ENTRY
Set the default boot menu entry for GRUB, for the next boot only.

  -h, --help              print this message and exit
  -v, --version           print the version information and exit
  --boot-directory=DIR    expect GRUB images under the directory DIR/grub2
                          instead of the /boot/grub2 directory

MENU_ENTRY is a number, a menu item title or a menu item identifier.

2

Provare

mkdir -p /boot/grub/backup
mv -v /boot/grub/vmlinuz-3.7.4-gentoo-{first,third,fourth} /boot/grub/backup

Questo sposta tutti i tuoi kernel inutilizzati in una directory di backup, ora:

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

Questo aggiunge solo scelta r5al tuo menu. Dopo questo modo, leggere questo questo link e poi Reame tutti i kernel nella directory di backup qualcosa di diverso vmlinuz se ti ostini a tenerli


2

Con centos7 (o RHEL7) e grub2:

grub utilizza la voce 'saved_entry' da grubenv come impostazione predefinita per l'avvio, sniplet da /boot/grub2/grub.cfg:

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

per verificare quale sia il 'save_entry' è ora la mia build:

grub2-editenv list

saved_entry=CentOS Linux (3.10.0-693.2.2.el7.ari.x86_64) 7 (Core)

per cambiarlo, ad esempio per la mia build di debug:

grub2-editenv - set saved_entry='CentOS Linux 3.10.0-693.2.2.el7.ari.x86_64.debug) 7 (Core)'

1

Quello che ho fatto per ottenere il risultato desiderato era stato:

  • impostare GRUB_DEFAULT=savedcome indicato nel grub-set-defaultaiuto

    grub-set-default Menu entry not specified. Usage: grub-set-default [OPTION] MENU_ENTRY Set the default boot menu entry for GRUB. This requires setting GRUB_DEFAULT=saved in /etc/default/grub. -h, --help print this message and exit -V, --version print the version information and exit --boot-directory=DIR expect GRUB images under the directory DIR/grub instead of the /boot/grub directory MENU_ENTRY is a number, a menu item title or a menu item identifier.

  • Imposta il valore predefinito

    grub-set-default "1>2"

    Crea un nuovo file in / boot / grub chiamato grubenv con le informazioni richieste.

  • Dopo aver ricreato il file di configurazione

    grub-mkconfig > /boot/grub/grub.cfg

E ho visto che la configurazione è stata modificata per utilizzare lo stato salvato:

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


0

È possibile impostare la scelta predefinita per valore numerico. Se hai impostato

`GRUB_DEFAULT=3` 

in /etc/default/grub
Si imposterà l'impostazione predefinita sulla voce gentoo-5.
GRUB_DEFAULTè zero offset, quindi 3 selezionerà la quarta voce come desideri.


2
Non so perché, ma sembra che non funzioni. Ho impostato GRUB_DEFAULT=3come hai detto, quindi rieseguo grub2-mkconfig. Ma al momento dell'avvio la voce predefinita è ancora vmlinuz-3.7.4-gentoo-third.
Francesco Turco,

1
Prova a commentare GRUB_SAVEDEFAULT=trueNon dovrebbe importare, ma non è necessario con i numeri.
bsd

2
Non ho questa opzione nel mio /etc/default/grubfile.
Francesco Turco,

0

Sospetto che grub2-mkconfigordina i kernel in ordine inverso, supponendo che contengano principalmente numeri di versione che aumentano monotonicamente. Quindi inizia a scegliere i tag per adattarli a quella convenzione.


0

mv quei file di versione nuovi / non utilizzati in / boot in una directory di backup, ad esempio / boot / back initrd.img-3.13.0-xx-generic
vmlinuz-3.13.0-xx-generic config-3.13.0-xx-generic System.map-3.13.0-xx-generic

riavvia il sistema in modalità di salvataggio, quindi scegli grub nella finestra di dialogo di salvataggio, quindi tutto andrà bene.

è il metodo più adatto penso. Sto usando Ubuntu 14.04.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.