Come fare in modo che il BIOS UEFI avvii GRUB, non Windows?


22

TL; DR, aggiunto nella modifica:

La domanda è:

Come posso fare in modo che il BIOS preferisca GRUB su Windows Boot Manager sulla stessa partizione di avvio UEFI?

Il problema non è con Grub; Grub fa la cosa giusta all'avvio del BIOS. Il problema non è con "il disco non è avviabile", perché sia ​​il bootstrap UEFI di Windows che il bootstrap Grub UEFI sono avviabili. Il problema è quale bootstrap UEFI il BIOS sceglie di avviare.

Sto configurando un nuovo computer e lo voglio per impostazione predefinita avviare Ubuntu, ma ho la possibilità di selezionare Windows all'avvio. Ciò è particolarmente importante se l'alimentazione si spegne e ritorna; Non sarò nemmeno in casa.

Ho iniziato installando Ubuntu 17.04 sul mio disco NVMe interno, partizionato con GPT per utilizzare metà del disco e una partizione di avvio UEFI separata. GRUB si avvia bene, e vedo il menu di avvio di GRUB all'avvio in cui posso selezionare qualsiasi elemento di cui GRUB sia a conoscenza.

Quindi ho installato Windows 10 Pro da un ISO scaricato di recente. Ha installato Windows Boot Manager sulla stessa partizione UEFI e ha lasciato Ubuntu intatto (fantastico!) E questo si avvia bene in Windows 10.

Tuttavia, ha fatto "qualcosa" che rende immediatamente il firmware UEFI selezionare Windows Boot Manager anziché GRUB all'accensione. L'unico modo per avviare Linux ora è utilizzare il boot manager del BIOS (F11 sul mio BIOS) e selezionare manualmente il boot loader GRUB. Il BIOS UEFI sa che ci sono più installazioni avviabili sulla partizione UEFI, perché posso scegliere tra loro nel boot manager. Tuttavia, quando mi trovo nel menu di configurazione nel BIOS UEFI, mi permette di scegliere "UEFI boot my internal drive" nella selezione della priorità di avvio - non mi permette di scegliere quale particolare boot loader su quella partizione usare . E, per impostazione predefinita, sceglie Windows, non GRUB.

Le internet (e questo sito) suggeriscono che il vecchio modo di risolvere questo problema è quello di eseguire update-grub(quindi GRUB riconosce Windows) e quindi grub-install(per rimettere GRUB sul dispositivo.) L'ho fatto, ma sfortunatamente, ha ancora il comportamento come descritto sopra, in cui il BIOS per impostazione predefinita sceglie Windows Boot Manager. ( update-grubtrova l'installazione di Windows Boot Manager e la aggiunge al menu, e quella voce di menu funziona quando scelgo manualmente la partizione GRUB nel boot manager UEFI.)

Cosa posso fare per rendere GRUB l'avvio "predefinito" sulla mia partizione di avvio UEFI?

Utilizzo di una scheda madre MSI X399 Carbon.

Seconda modifica: poiché la risposta corretta finisce per essere menzionata in un commento a una risposta, la ripeterò qui:

"BCDEDIT" in an admin shell on Windows is the working solution. The others don't work.

Devi solo installare Windows quindi Linux. Non il contrario. Ho l'esatto problema opposto. Quando il potere si spegne e poi ritorna, il mio computer entra in grub e si avvia in Linux, smh. Una cosa però è che ho ciascun sistema sulla propria unità. Nell'ordine di avvio, scelgo l'unità con Linux e Grub.
dmb

1
È incredibile quante persone suggeriscano cose che sono già state suggerite da altre persone, e ho già detto che non ha funzionato, né nel mio post originale, né nei commenti qui sotto. La soluzione corretta era "BCDEDIT" in una shell di amministrazione di Windows. Nessuno degli altri suggerimenti lo ha risolto (e la maggior parte di essi, avevo già provato, secondo la mia domanda.)
Jon Watte,

Risposte:


21

Esistono diversi modi per farlo, tra cui:

  • Utilità di configurazione EFI : la maggior parte degli EFI fornisce utilità di configurazione a cui è possibile accedere premendo un tasto speciale all'avvio (Esc, Del o un tasto funzione, in genere; ma quale chiave varia da un sistema all'altro). Questi spesso, ma non sempre, forniscono un modo per regolare l'ordine di avvio. Se il tuo firmware offre tale opzione, dovresti essere in grado di utilizzarlo per spostare GRUB nella posizione più alta. (È probabile che GRUB venga chiamato ubuntu, dato che lo hai installato da quella distribuzione.)
  • Una shell EFI : è possibile utilizzare il bcfgcomando in una shell EFI versione 2, come descritto nella wiki di Arch Linux. Se il tuo sistema non è già configurato con una shell di facile accesso, è probabile che questo approccio sia più difficile da usare rispetto agli altri, ma è indipendente dal sistema operativo.
  • EasyUEFI : è probabile che il programma di terze parti per Windows EasyUEFI sia il modo più semplice per fare ciò che desideri. È possibile fare clic sulla ubuntuvoce nell'elenco di EasyUEFI e spostarla in alto.
  • bcdedit- Il bcdeditcomando di Windows può modificare l'ordine di avvio basato su NVRAM. In particolare, l'apertura di una finestra del prompt dei comandi dell'amministratore e la digitazione bcdedit /set "{bootmgr}" path \EFI\ubuntu\shimx64.efi(facoltativamente seguita da bcdedit /set "{bootmgr}" description "ubuntu"per mantenere la descrizione sensata) dovrebbero fare il trucco.
  • efibootmgr- Questo strumento Linux può regolare l'ordine di avvio. Inizia digitando da sudo efibootmgrsolo per vedere le opzioni. Nota il numero ( Boot####) associato alla ubuntuvoce e l'ordine di avvio corrente (sulla BootOrderriga). È quindi possibile inserire un nuovo ordine di avvio con la ubuntuvoce in alto utilizzando l' -oopzione. Ad esempio, se l'ordine di avvio corrente è 0000.0003.0007.0004 ed ubuntuè 0007, digitare sudo efibootmgr -o 0007,0000,0003,0004per regolare l'ordine di avvio.
  • refind-mkdefault- Questo script viene fornito con rEFInd ed è un modo per automatizzare la procedura precedente. Se non stai usando rEFInd, dovresti scaricare lo script qui e renderlo eseguibile ( chmod a+x refind-mkdefault). Dovresti quindi eseguirlo come sudo ./refind-mkdefault -L ubuntuo sudo ./refind-mkdefault -L shimx64per rendere GRUB la voce di avvio predefinita.

Ci sono potenziali problemi e complicazioni con una di queste opzioni. Il fattore complicante più probabile è se ci sono ubuntuvoci di avvio vecchie o alternative . È importante spostare quello corretto nella posizione più alta nell'ordine di avvio; se sposti quello sbagliato, finirai con nessun cambiamento nel comportamento o con un avvio non funzionale, che renderebbe più difficile l'avvio. Se si utilizza efibootmgr, la BootCurrentlinea può essere d'aiuto nel dire quale opzione si dovrebbe impostare come predefinita.

Ci sono altri modi per farlo che sono eccessivi. Reinstallare GRUB (tramite Boot Repair o grub-install) dovrebbe fare il trucco, per esempio. Questi approcci corrono tuttavia il rischio di danneggiare una configurazione GRUB funzionante.

Si noti inoltre che alcuni EFI sono difettosi e ci sono altri problemi che possono rendere difficile l'avvio affidabile di GRUB. Potresti voler dare un'occhiata a queste domande e risposte su AskUbuntu se riscontri tali problemi:


Come ho descritto nella domanda, l'utility di configurazione EFI non mi consente di selezionare Ubuntu come predefinito, anche se mi consente di farlo nel menu di avvio manuale. Mi farebbe solo scegliere l'unità, e quindi avvia Windows da quello. efibootmgr ha tentato di modificare l'ordine di avvio, ma il BIOS non ha prestato attenzione al riavvio. EasyBCD non ha funzionato, non mi ha permesso di aggiungere altre voci di menu. Tuttavia, "BCDEDIT" in una shell dell'amministratore ha effettivamente funzionato, quindi grazie per quell'opzione!
Jon Watte,

Si noti che EasyBCD e EasyUEFI sono due programmi diversi dello stesso fornitore. Purtroppo sembra che la versione gratuita di EasyUEFI non sia più disponibile - sono offerte solo versioni di prova. Tuttavia, BOOTICE è un altro programma gratuito che può modificare le impostazioni di avvio UEFI: sito originale cinese , sito in lingua inglese con descrizione e schermate .
telcoM,

L'utilizzo sudo efibootmgr -n 0002è molto meglio della modifica dell'ordine SO corrente. Cambia BootNext: 0001e parte BootCurrent: 0002per la prossima volta, lasciando intatte le tue voci GRUB correnti. Basta aggiungere un bash con chmod +xe avvolgere quel comando con lungo il riavvio.
m3nda,

2

Ho avuto questo esatto problema nelle ultime settimane. L'ho capito usando queste opzioni. Prima di fare una qualsiasi di queste cose, ti consiglio di accedere al BIOS / UEFI e controllare l'ordine di avvio e accertarti che dove sia installato grub sia il primo nell'ordine.

Quindi, come vedo, hai due opzioni.

opzione 1

Quello che ti consiglierei è prima di installare Windows 10 . Quindi installare Ubuntu. Ma so che è un po 'tabù dire semplicemente "reinstalla il tuo software", quindi offro anche un'alternativa.

opzione 2

Con la tua configurazione attuale ti consiglierei di avviare un CD / flash drive di Ubuntu Live e installarlo ed eseguirlo boot-repair. Fare clic sull'opzione "Riparazione consigliata" e seguire le istruzioni fornite. Esaminalo attentamente e leggi tutti i comandi prima di eseguire. Ciò sovrascriverà l'attuale installazione di grub con una nuova che, si spera, dovrebbe risolverla.


Grazie per i suggerimenti, ma avevo già provato quelli. La prima volta che ho installato le cose, sono andato prima su Windows 10, poi su Ubuntu 17.04, quindi su Boot Repair. L'impostazione predefinita è ancora Windows, quindi ho prima cancellato e reinstallato con Ubuntu, il che mi porta dove sono ora.
Jon Watte,

Presumo che tu abbia provato a regolare l'ordine di avvio nel tuo UEFI, giusto?
Taterbotz,

Sì, come ho detto: "quando mi trovo nel menu di configurazione nel BIOS UEFI, mi consente di scegliere" UEFI boot my internal drive "nella selezione della priorità di avvio - non mi consente di scegliere quale particolare bootloader su quella partizione da usare "
Jon Watte

2

Vedo diverse soluzioni:

  1. Modifica il tuo UEFI per regolare il valore predefinito. Su Linux puoi usare efibootmgr. Su Windows non ne sono sicuro, ma penso che sia possibile avviare un'opzione di ripristino che consente di configurare UEFI. Oppure potresti preferire installare qualcosa come rEFInd.
  2. Modificare il nome della cartella sulla partizione EFI. Penso che preferisca, o ricada a, una cartella chiamata boot.
  3. Basta usare il boot loader di Windows, penso che possa essere configurato per l'avvio di altri sistemi operativi.

Potrei modificare l'ordine di avvio usando efibootmgr, ma il BIOS lo ignora e avvia comunque Windows. La modifica del nome della cartella di avvio (o addirittura la copia di grub in "avvio") non funziona finché non rimuovo quello Microsoft. Il boot loader di Windows non si avvia non Windows OS-es (almeno non quelli non firmati.)
Jon Watte

@JonWatte Forse il bootloader di uefi è diverso, ricordo di aver avviato Ubuntu dal bootloader di Windows 7 su una macchina bios a 32 bit. Forse può ancora caricare a catena grub2? Dal momento efibootmgrche non funziona, so che non comprerò MSI.
jiggunjer,

Sì, questa scheda madre MSI ha anche altri problemi e tornerà su Amazon in cambio di un Gigabyte.
Jon Watte,

1

Ho appena avuto la mia scheda madre sostituita nel mio laptop e grub è scomparso completamente.

So che questo è contrassegnato come fisso ma ho pensato che potrebbe essere utile per te.

Per far apparire grub come opzione di avvio. Avevo bisogno di aggiungere un EFI al bios.

Sono andato all'opzione "elenco di avvio" nel mio BIOS. Fare clic su "Aggiungi opzione di avvio" (sono consapevole che si tratta di un BIOS specifico). Questo mi ha dato un'opzione per il nome del file, che nel mio caso era \EFI\ubuntu\grubx64.efie gli ha dato un nomegrub

Ho quindi spostato la grubvoce all'inizio della sequenza di avvio e ora viene visualizzata come voce predefinita.

Cioè quello che sto dicendo è che potresti aver solo bisogno di individuare il file EFI corretto e spostarlo all'inizio della sequenza / ordine di avvio.


1

Nessuna delle opzioni precedenti ha funzionato per me con il vecchio laptop HP 655. Ho scoperto che la soluzione è di disattivare il gestore di avvio di Windows:

sudo -s
efibootmgr
efibootmgr -b 4 --inactive

Sostituisci 4 con il tuo numero di boot manager di Windows. Esegui di nuovo efibootmgr e dovresti vedere la stella scomparire per contrassegnare l'inattività.

Dopo che il mio computer si avvia per accedere al menu di avvio e Windows può ancora essere scelto da quello.


-2

Una possibile soluzione sarebbe la modifica manuale del file / etc / default / grub.

sudo vim /etc/default/grub

La voce predefinita è determinata GRUB_DEFAULT=dall'impostazione in / etc / default / grub. La prima "voce di menu" ha un valore di "0". Se Ubuntu è la seconda voce nella schermata di avvio, imposta GRUB_DEFAULT = 1.

Successivamente, è necessario eseguire il comando per aggiornare grub config: update-grub

Un'altra opzione potrebbe essere l'installazione di grub-customizer e l'uso della sua GUI per configurare la priorità di avvio.


Il problema non è con Grub. Come ho detto nel post, se riesco a fare in modo che il BIOS scelga l'opzione di avvio Grub UEFI, ottengo il menu di avvio di Grub, che mi consente di scegliere Windows o Ubuntu. Questo è il menu che desidero per impostazione predefinita. Sfortunatamente, il BIOS sceglie Windows Boot Manager per impostazione predefinita.
Jon Watte,

Come ho detto, puoi risolverlo nell'ordine di avvio di grub configurando Ubuntu come primo sistema da avviare. Usa grub-customizer per farlo usando la GUI. linuxandubuntu.com/home/…
Mr. Raspberry

Ancora una volta, Grub non viene nemmeno avviato dal BIOS. L'ordine di avvio di Grub non ha importanza. GRUB_DEFAULT non ha importanza. Questo non è il problema qui.
Jon Watte,
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.