Impossibile ottenere il menu Grub per il timeout (o andare via)


18

Sto eseguendo Ubuntu 12.04.

Non riesco per la vita a farmi andare via il menu di grub (con opzioni).

Vorrei che si avviasse automaticamente nella prima opzione. Ho modificato / etc / default / grub in modo che assomigli a quanto segue:

GRUB_DEFAULT=0
GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""

Dopo questo, ho eseguito sudo update-grub . Poi mi sono reso conto che avevo grub 2, quindi ho eseguito sudo update-grub2 (entrambi fanno sembrare che creino il file grub.cfg con successo.

Riavvio il mio computer e torna al menu di grub e rimane lì fino a quando non faccio una scelta. Questo non è auspicabile se il potere si spegne ... :-)

Ho anche provato a reinstallare grub usando sudo grub-install / dev / sda - anche senza successo


Per caso hai un'altra partizione in cui hai installato Ubuntu dopo aver impostato la partizione corrente che ora desideri avviare automaticamente?
fabricator4,

Non sono sicuro di cosa intendi, sono un po 'nuovo di Linux. Ho installato su una precedente installazione di Ubuntu, ma non ho aggiornato. Installazione pulita. Potrei aver rovinato qualcosa dal punto di vista della partizione ... è possibile, qualche idea su come risolverlo?
Eric,

sudo update-grubed sudo update-grub2esegue lo stesso comando. Quindi, non preoccuparti per quella parte.
saji89,

Si prega di pubblicare l'output di cat /boot/grub/grub.cfg via pastebin e condividere il collegamento qui. Questo per vedere l'attuale grub.cfggenerato.
saji89,

Ecco il pastebin: pastebin.com/xxe2rLhg di grub.cfg. Grazie per tutto il vostro aiuto!
Eric,

Risposte:


22

Come sottolineato da altre risposte, potresti essere vittima della situazione da record . La modifica /boot/grub/grub.cfgmanuale dovrebbe essere fuori questione poiché viene generata automaticamente. Un altro suggerimento visto in giro è quello di modificare /etc/grub.d/00_headerma potrebbe richiedere l'intervento dell'utente sugli aggiornamenti.

La soluzione più semplice è definire la variabile non documentata GRUB_RECORDFAIL_TIMEOUT in /etc/default/grub. Per esempio:

GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=5
GRUB_RECORDFAIL_TIMEOUT=$GRUB_TIMEOUT

modificare

Vedi questa risposta per maggiori dettagli.


Grazie mille, questo è esattamente quello che stavo cercando!
Avio,

Dopo aver apportato la modifica, esegui anche update-grubper generare il /boot/grub/grub.cfgfile aggiornato
Colt

Non uccidere la funzionalità di recordfail! Si desidera un timeout più lungo in caso di errore durante l'avvio. Per cancellare manualmente, tutto ciò che serve è di @ sniffski risposta: grub-editenv create. Tuttavia, potrebbe esserci qualche altro motivo per cui si recordfailsta preparando ...
Cameron Tacklind il

6

Uso:

grub-editenv create

Questo cancellerà il file di ambiente grub e dovrebbe avviarsi chiaramente la prossima volta.


Grazie mille per averlo condiviso. Questo ha funzionato tramite SSH, il che ha reso la mia giornata un server headless grub bloccato.
Geppettvs D'Constanzo,

1
grub-editenv - unset recordfailfunziona anche e non influisce su altri ambienti che potrebbero essere impostati
Cameron Tacklind

2

cambia GRUB_TIMEOUT=10a zero

Questo è il mio file di configurazione:

GRUB_DEFAULT="Ubuntu, with Linux 3.2.0-30-generic-pae"
#GRUB_HIDDEN_TIMEOUT=10
#GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=1
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT=""
GRUB_CMDLINE_LINUX=""

Innanzitutto, scrivi il nome del sistema operativo su cui vuoi avviare direttamente. Il mio è Ubuntu. Quindi lo scriverai come nelGRUB_DEFAULT="Ubuntu, with Linux x.x.x-xx-generic-pae"

poi ho usato 1 secondo GRUB_TIMEOUT=per darmi 1 secondo prima di selezionare il sistema operativo predefinito (se devo avviare un altro sistema operativo, ad esempio Xubuntu)

Per quanto riguarda GRUB_CMDLINE_LINUX_DEFAULT=""se si rimuove quite splashgli mostrerà i testi al posto del logo di Ubuntu durante il processo di boot (Mi piace questo modo: P)


C'è un'altra soluzione:

Esiste un programma chiamato boot-repair che aiuta nella configurazione con una GUI.

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine

come puoi vedere dall'immagine. c'è una casella chiamata Unhide boot menu. Deseleziona la casella e premi appy. Puoi accedervi facendo clic sulla freccia delle opzioni avanzate.

per installare la riparazione di avvio

sudo add-apt-repository ppa:yannubuntu/boot-repair

sudo apt-get update

sudo apt-get install -y boot-repair

e quindi eseguire boot-reapirdal terminale o dal trattino.


3a soluzione:

Puoi usare un'app GUI facile da usare chiamata grub-customizer per semplificarti la vita. Come suggerisce il nome, puoi fare molto di più che riordinare le voci del menu di Grub con esso.

Puoi installarlo tramite:

sudo add-apt-repository ppa:danielrichter2007/grub-customizer
sudo apt-get update
sudo apt-get install grub-customizer

inserisci qui la descrizione dell'immagine

come puoi vedere dal menu c'è show menuun'opzione. Deseleziona e vedi se funziona


Nessun cambiamento. : - / Pensavo che GRUB_DEFAULT avrebbe dovuto essere un numero numerico secondo l'elenco nel menu? Cambiare GRUB_TIMEOUT su 0 non ha aiutato.
Eric,

@Eric puoi usare 2 modi: se conosci la posizione del tuo SO nell'elenco dei grub puoi usare un numero. Ma per me ho 4 distro Linux e 1 Windows più il memTest e il recupero. Quindi è difficile per me memorizzare i loro posti :) solo per essere sicuro (so che potresti averlo fatto, ma solo per essere sicuro: P). Hai eseguito il grub-updatedopo aver modificato i valori?
Suhaib,

Ho eseguito grub-update dopo aver modificato i valori. : - /
Eric

Ho installato e utilizzato l'app di riparazione di avvio fornita, funziona al primo riavvio. Dopodiché, il menu di GRUB è tornato e rimane lì finché non premo un tasto. Grazie per tutto il tuo aiuto, lo apprezzo molto. Non sono sicuro di dove andare da qui ...
Eric

@Eric ok ho trovato una terza soluzione verificarla
Suhaib,

2

GRUB_HIDDEN_TIMEOUTe le GRUB_HIDDEN_TIMEOUT_QUIETopzioni sono obsolete. Quindi commenta quelli.

Per saltare il menu e mostrarlo solo quando tieni premuto ESC, aggiungi:

GRUB_TIMEOUT_STYLE='countdown'
GRUB_TIMEOUT=1

Campione /etc/default/grub

GRUB_DEFAULT=0
#GRUB_HIDDEN_TIMEOUT=0
#GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=1
GRUB_TIMEOUT_STYLE=countdown
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT=""
GRUB_CMDLINE_LINUX=""

'GRUB_TIMEOUT_STYLE' : se questa opzione è impostata su 'conto alla rovescia' o 'nascosto', quindi, prima di visualizzare il menu, GRUB attenderà che scada il timeout impostato da 'GRUB_TIMEOUT'. Se ESC viene premuto durante quel periodo, visualizzerà il menu e attenderà l'immissione.


si dovrebbe , ma non fa altro che mostra il menu standard per 1 secondo. Almeno su un nuovissimo 16.04
venerdì

1

Potrei risolvere il problema aggiungendo la seguente riga a /etc/default/grub

GRUB_DISABLE_OS_PROBER=true

... e poi correndo sudo update-grub.

Spiegazione: Il file /boot/grub/grub.cfgviene generato eseguendo update-grubi file in /etc/grub.de /etc/default/grub. Pertanto non è necessario modificarlo grub.cfg, ma può essere utile scoprire perché è impostato il timeout. Cerca le righe che iniziano con, set timeout=quindi cerca la riga successiva che inizia con ### END /etc/grub.d/ .... Questo potrebbe darti suggerimenti su quale script imposta il timeout. Nel mio caso lo script os-prober era responsabile del timeout. Si scopre che esiste un timeout hardcoded 10s in /etc/grup.d/30_os-probercui non è impostato GRUB_TIMEOUT. Puoi disabilitare os-prober con GRUB_DISABLE_OS_PROBER=trueo modificare /etc/grup.d/30_os-probero utilizzare GRUB_OS_PROBER_SKIP_LISTper saltare alcune delle tue partizioni del disco rigido (30_os-prober viene utilizzato quando un altro sistema operativo viene trovato da qualche parte). Vedi queste domande e risposte per i dettagli. Come altri hanno sottolineato un altro motivo potrebbe essere il fallimento del record , in questo caso impostato GRUB_RECORDFAIL_TIMEOUT=$GRUB_TIMEOUT.


0

Ho avuto il problema che il menu grub appariva sempre dopo aver usato AUFS (unionfs) per mettere il file system root in sola lettura. Ho dovuto fisicamente premere il tasto Invio sul server dopo ogni avvio. Ho seguito le istruzioni qui: disabilita il menu di grub 2 . Da allora non ho avuto nessun problema.

Modifica /boot/grub/grub.cfg e modifica:

if [ ${recordfail} = 1 ]; then
  set timeout=-1
else
  set timeout=10
fi

Per

if [ ${recordfail} = 1 ]; then
  set timeout=1
else
  set timeout=10
fi

Il prima e il dopo nella tua soluzione sono esattamente gli stessi.
RawwrBag il

set timeout=-1non è lo stesso di set timeout=1. Il primo è "aspetta per sempre" e il secondo è "aspetta un secondo".
Jeff McJunkin,

0

Il mio Ubuntu ha sempre avuto un timeout di 30 secondi o avrei impostato un valore oppure no. Qui di seguito è come ho scoperto che il valore mancante era recordfail .

1. Verificare l'attuale script grub /boot/grub/grub.cfg

IMHO, il modo migliore per verificare cosa farà Grub, è aprire /boot/grub/grub.cfg. È lo script generato automaticamente grub-mkconfigutilizzando i modelli da /etc/grub.de le impostazioni da /etc/default/grub.

Intorno alla linea 109, vedrai qualcosa di simile:

108 if [ "${recordfail}" = 1 ] ; then
109   set timeout=30 # Note here this value
110 else
111   if [ x$feature_timeout_style = xy ] ; then
112     set timeout_style=hidden
113     set timeout=3
114   # Fallback hidden-timeout code in case the timeout_style feature is
115   # unavailable.
116   elif sleep --interruptible 3 ; then
117     set timeout=0
118   fi
119 fi

Nel mio caso, con l'aiuto di quello script generato, ho potuto scoprire che la recordfailvariabile non era impostata.

2. Se la recordfailvariabile non è impostata, impostarla

Apri /etc/default/grubnel tuo editor di testo preferito (ad es. Vim) e poi imposta la variabile GRUB_RECORDFAIL_TIMEOUTsu un dato valore, ad esempio 5 secondi.

Il tuo file di configurazione dovrebbe apparire come:

GRUB_DEFAULT=0
GRUB_TIMEOUT=3
GRUB_TIMEOUT_STYLE=hidden
GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""
GRUB_RECORDFAIL_TIMEOUT=5

3. Aggiorna la configurazione con cui eseguire update-grub

Ultimo passaggio, aggiorna la configurazione con cui eseguire update-grub. Per ora, GRUB2 utilizzerà il timeout impostato. Questo comando rigenera il /boot/grub.cfgfile.

4. Verificare il risultato dello script generato

Ancora una volta, apri /boot/grub.cfge controlla il risultato attorno alla linea 109:

108 if [ "${recordfail}" = 1 ] ; then
109   set timeout=5 # Note here this value
110 else
111   if [ x$feature_timeout_style = xy ] ; then
112     set timeout_style=hidden
113     set timeout=3
114   # Fallback hidden-timeout code in case the timeout_style feature is
115   # unavailable.
116   elif sleep --interruptible 3 ; then
117     set timeout=0
118   fi
119 fi

Si noti che il valore alla riga 109 è ora 5 anziché 30 come prima.

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.