Imposta il kernel predefinito in GRUB


49

Come posso scegliere quale kernel GRUB2 dovrebbe caricare per impostazione predefinita? Di recente ho installato un kernel realtime di Linux e ora si carica per impostazione predefinita. Vorrei caricare quello normale per impostazione predefinita.

Finora sono riuscito a scegliere solo il sistema operativo predefinito .. e per qualche ragione /boot/grub.cfggià suppongo che voglio caricare il kernel rt e inserirlo nella voce di menu linux generico (nel mio caso Arch Linux).


2
grub2-set-default <titolo o numero>?
Taliezin,

1
Ma come faccio a sapere il numero? I numeri in grub.cfgcorrispondono solo ai sistemi operativi e non ai kernel.
TomTom,

In alcuni casi funziona: askubuntu.com/questions/216398/… Puoi trovare i nomi dei menu guardando attraverso questo file: /boot/grub/grub.cfg
TekOps,

Risposte:


43

Penso che la maggior parte delle distribuzioni abbia spostato kernel aggiuntivi nel sottomenu delle opzioni avanzate a questo punto, poiché TomTom ha scoperto che era il caso del suo Arch.

Non volevo modificare la mia struttura di menu di livello superiore per selezionare un kernel precedente come predefinito. Ho trovato la risposta qui:

http://www.humans-enabled.com/2014/08/how-to-set-default-grub-kernel-boot.html

Riassumere:

1) Trova l' $menuentry_idopzione _ per il sottomenu:

$ grep submenu /boot/grub/grub.cfg
submenu 'Advanced options for Debian GNU/Linux' $menuentry_id_option 'gnulinux-advanced-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {

2) Trova la $menuentry_id_optionvoce di menu per il kernel che vuoi usare:

$ grep gnulinux /boot/grub/grub.cfg
menuentry 'Debian GNU/Linux' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
submenu 'Advanced options for Debian GNU/Linux' $menuentry_id_option 'gnulinux-advanced-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
    menuentry 'Debian GNU/Linux, with Linux 4.18.0-0.bpo.1-rt-amd64' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.18.0-0.bpo.1-rt-amd64-advanced-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
    menuentry 'Debian GNU/Linux, with Linux 4.18.0-0.bpo.1-rt-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.18.0-0.bpo.1-rt-amd64-recovery-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
    menuentry 'Debian GNU/Linux, with Linux 4.18.0-0.bpo.1-amd64' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.18.0-0.bpo.1-amd64-advanced-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
    menuentry 'Debian GNU/Linux, with Linux 4.18.0-0.bpo.1-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.18.0-0.bpo.1-amd64-recovery-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
    menuentry 'Debian GNU/Linux, with Linux 4.17.0-0.bpo.1-amd64' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.17.0-0.bpo.1-amd64-advanced-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
    menuentry 'Debian GNU/Linux, with Linux 4.17.0-0.bpo.1-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.17.0-0.bpo.1-amd64-recovery-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
    menuentry 'Debian GNU/Linux, with Linux 4.9.0-8-amd64' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.9.0-8-amd64-advanced-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
    menuentry 'Debian GNU/Linux, with Linux 4.9.0-8-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.9.0-8-amd64-recovery-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {

3) Commenta il tuo attuale grub predefinito /etc/default/grube sostituiscilo con i sottomenu del primo $menuentry_id_optionpassaggio e i kernel selezionati del secondo $menuentry_id_optionpassaggio separati da >.

Nel mio caso la modifica GRUB_DEFAULTè:

#GRUB_DEFAULT=0

GRUB_DEFAULT="gnulinux-advanced-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc>gnulinux-4.18.0-0.bpo.1-amd64-advanced-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc"

4) Aggiorna grub per apportare le modifiche. Per Debian questo è fatto così:

$ sudo update-grub

Fatto. Ora quando si avvia, il menu avanzato dovrebbe avere un asterisco e si dovrebbe avviare il kernel selezionato. Puoi confermarlo con uname.

$ uname -a
Linux NAME 4.18.0-0.bpo.1-amd64 #1 SMP Debian 4.18.0-0 (2018-09-13) x86_64 GNU/Linux

Cambiare questo nel kernel più recente è semplice come commentare la nuova riga e commentare #GRUB_DEFAULT=0, quindi rieseguire update-grub.


31

Dopo aver lottato per 2 ore, ho trovato un modo molto più semplice per raggiungere questo obiettivo. Ho appena RTFM. ;)

Aggiungi due righe a / etc / default / grub

GRUB_SAVEDEFAULT=true
GRUB_DEFAULT=saved

Esegui sudo update-grub, riavvia, accedi al tuo menu di grub e seleziona qualsiasi voce di menu o sottomenu di cui hai bisogno. La scelta verrà salvata e al successivo avvio automatico del computer.


2
Meraviglioso! Così semplice!
Egor Skriptunoff,

Oh, molto più semplice. Grazie.
user207863

21

Come menzionato nei commenti, è possibile impostare il kernel predefinito per l'avvio utilizzando il grub-set-default Xcomando, dove X è il numero del kernel in cui si desidera avviare. In alcune distribuzioni puoi anche impostare questo numero modificando il /etc/default/grubfile e le impostazioni GRUB_DEFAULT=X, quindi eseguendolo update-grub.

Il numero è l'indice di una matrice di impostazioni kernel / kernel mostrate nel menu GRUB durante l'avvio, con 0 come prima voce (la più alta). Di solito puoi trovare il numero giusto cercando le menuentryrighe /boot/grub/grub.cfg, in questo modo:

grep menuentry /boot/grub/grub.cfg

Vedrai ogni kernel elencato con il nome mostrato nel menu di avvio di GRUB. Il primo è 0, il secondo è 1 e così via.


1
In Fedora 21 lo è /boot/grub2/grub.cfg.
somethingSomething

3
Questo non funziona per me. L'ultimo kernel nella mia installazione è 4.4.0-64-generico (menuentry 0) ma voglio 4.4.0-59-generico (menuentry 9) come kernel di avvio predefinito. Ho eseguito grub-set-default 9e quindi grub-updateriavviato. Ho lasciato avviare grub con il kernel predefinito e si avvia ancora con 4.4.0-64-generico . Ho anche provato a modificare, /etc/default/grubimpostare GRUB_DEFAULT=9ed eseguire grub-update. Al riavvio nulla cambia, il sistema si avvia ancora con 4.4.0-64-generico . Forse mi sono perso qualcosa, qualcuno può aiutarmi?
Dronacharya,

Neanche questo ha funzionato per me. Ho cancellato il kernel indesiderato come spiegato qui: askubuntu.com/a/764242/456247
Luis

8

Semplicemente grep 'menuentry' /boot/grub/grub.cfgelenca voci aggiuntive che non sono correlate alla versione attuale del kernel o del sistema operativo. Ad esempio, elenca

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

Vorrei proporre un piccolo miglioramento al metodo di ricerca di quel file: use awk

$ awk '/menuentry/ && /class/ {count++; print count-1"****"$0 }' /boot/grub/grub.cfg                                            
0****menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-86df21bf-d95f-435c-9292-273bdbcba056' {
1****   menuentry 'Ubuntu, with Linux 3.19.0-26-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.19.0-26-generic-advanced-86df21bf-d95f-435c-9292-273bdbcba056' {
2****   menuentry 'Ubuntu, with Linux 3.19.0-26-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.19.0-26-generic-recovery-86df21bf-d95f-435c-9292-273bdbcba056' {
3****   menuentry 'Ubuntu, with Linux 3.13.0-62-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.13.0-62-generic-advanced-86df21bf-d95f-435c-9292-273bdbcba056' {
4****   menuentry 'Ubuntu, with Linux 3.13.0-62-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.13.0-62-generic-recovery-86df21bf-d95f-435c-9292-273bdbcba056' {

Con il comando sotto e il suo output, puoi vedere il awkcodice che corrisponde alla versione attuale del sistema operativo e darti il ​​numero che puoi quindi usare nel /etc/default/grubfile.

Oltre a modificare il /etc/default/grubfile a mano, ti suggerisco di utilizzare sed. Nel seguente comando, sostituisci X con il numero appropriato ottenuto dal comando awk sopra:

sudo sed -i 's/GRUB_DEFAULT=0/GRUB_DEFAULT=X/g' /etc/default/grub; sudo update-grub


2
Questa non è una risposta Sembra un commento. Una risposta dovrebbe dire "Ecco come impostare la voce predefinita in GRUB", non "fammi fare un addendum a un'altra risposta". Puoi facilmente modificarlo in una risposta corretta, ma potrebbe essere più intelligente lasciare un commento sulla risposta di jkt123 sull'uso di awk invece di grep.
Aleksandr Dubinsky,

2

credo che jkt123 funzionerà per la maggior parte delle distribuzioni. Tuttavia per Arch Linux non ha funzionato, almeno non con i pacchetti che ho a disposizione.

Gli indici che è possibile impostare grub-set-defaultcorrispondono solo alle voci del menu principale. Le opzioni del kernel sono comunque in un sottomenu. Quindi o si sposta la voce del kernel dal sottomenu nel menu principale o si mette la voce in cima all'elenco dei sottomenu e si seleziona il sottomenu.

My Grub Menu

  • Arch Linux
  • Opzioni avanzate per Arch Linux
    • Kernel 1
    • Kernel 2
  • finestre

Per poter avviare il kernel 2 è necessario scambiarlo con il kernel 1 oppure inserirlo all'esterno del sottomenu allo stesso livello di Arch Linux o Windows. Quindi imposta il numero predefinito su uno degli indici del menu principale. Ad esempio, nel menu sopra "0" avvia "Arch Linux" e "1" avvia il kernel 1.

Per modificare la gerarchia e lo scambio, aprire /boot/grub/grub.cfge spostare la voce che si desidera spostare. Una voce potrebbe apparire così

menuentry 'ENTRY NAME'
   ... some code ...
}

Quindi è necessario applicare le modifiche. Nel mio caso con grub-mkconfig. Ma questo potrebbe variare da sistema a sistema.


0

Recentemente, come appare grOS.conf di CentOS-6.6, questo può essere modificato manualmente per cambiare la selezione predefinita:

default=1
timeout=5
splashimage=(hd0,0)/boot/grub/splash.xpm.gz

0

Tratto Debian:

Invece di giocare con i file di configurazione, crea una cartella /noot(chiamala come vuoi), lascia il kernel desiderato, insieme ai file di configurazione e di sistema corrispondenti, /boote sposta il resto in questa nuova cartella.

Corri update-grub.

Ricontrolla la /bootcartella in cui sono ancora presenti la versione del kernel e i file di configurazione e di sistema corrispondenti (nel caso in cui hai copiato qualcosa che non dovresti avere) e riavvia.

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.