Como fazer com que o BIOS UEFI inicie o GRUB, não o Windows?


22

O TL; DR, adicionado na edição:

A questão é:

Como posso fazer com que o BIOS prefira o GRUB ao Windows Boot Manager na mesma partição de inicialização UEFI?

O problema não está no Grub; O Grub faz a coisa certa quando o BIOS o inicia. O problema não está em "o disco não é inicializável", porque a inicialização do Windows UEFI e a inicialização do Grub UEFI são inicializáveis. O problema é de qual UEFI a inicialização do BIOS escolhe para inicializar.

Estou configurando um novo computador e quero que ele seja inicializado por padrão no Ubuntu, mas tenho a opção de selecionar o Windows na inicialização. Isso é especialmente importante se a energia acabar e voltar; Eu nem estarei em casa.

Comecei instalando o Ubuntu 17.04 no meu disco interno do NVMe, particionado com GPT para usar metade do disco e uma partição de inicialização UEFI separada. O GRUB é inicializado com perfeição e vejo o menu de inicialização do GRUB na inicialização, onde posso selecionar os itens que o GRUB conhece.

Em seguida, instalei o Windows 10 Pro a partir de uma ISO baixada recentemente. Ele instalou o Windows Boot Manager na mesma partição UEFI e deixou o Ubuntu intacto (ótimo!) E ele é inicializado perfeitamente no Windows 10.

No entanto, ele fez "algo" que faz com que o firmware UEFI selecione imediatamente o Gerenciador de Inicialização do Windows em vez do GRUB na inicialização. A única maneira de inicializar o Linux agora é usar o gerenciador de inicialização do BIOS (F11 no meu BIOS) e selecionar o carregador de inicialização GRUB manualmente. O UEFI BIOS sabe que existem várias instalações inicializáveis ​​na partição UEFI, porque eu posso escolher entre elas no gerenciador de inicialização. No entanto, quando estou no menu de configuração no UEFI BIOS, ele apenas permite escolher "UEFI boot my internal drive" na seleção de prioridade de inicialização - não me permite escolher qual carregador de inicialização específico nessa partição usar . E, por padrão, ele escolhe o Windows, não o GRUB.

As internets (e este site) sugerem que a maneira antiga de corrigir isso é executar update-grub(para que o GRUB reconheça o Windows) e depois grub-install(para colocar o GRUB novamente no dispositivo.) Fiz isso, mas, infelizmente, ele ainda tem o comportamento de: descrito acima, onde o BIOS, por padrão, escolhe o Windows Boot Manager. ( update-grubencontra a instalação do Windows Boot Manager e a adiciona ao menu, e esse item de menu funciona quando escolho manualmente a partição GRUB no gerenciador de inicialização UEFI.)

O que posso fazer para tornar o GRUB a inicialização "padrão" na minha partição de inicialização UEFI?

Usando uma placa-mãe MSI X399 Carbon.

Segunda edição: como a resposta correta acaba sendo mencionada em um comentário a uma resposta, repetirei aqui:

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

Você só precisa instalar o Windows e o Linux. Não o contrário. Eu tenho o problema exatamente oposto. Quando a energia acaba e o computador volta para o grub e inicializa no Linux, smh. Uma coisa é que eu tenho cada sistema em sua própria unidade. Na ordem de inicialização, eu escolho a unidade com Linux e Grub.
dmb 19/02/19

1
É incrível quantas pessoas sugerem coisas que já foram sugeridas por outras pessoas, e eu já disse que não funcionou, nem no meu post original, nem nos comentários abaixo. A solução correta foi "BCDEDIT" em um shell de administração do Windows. Nenhuma das outras sugestões resolveu (ea maioria deles, eu já tinha tentado, de acordo com a minha pergunta.)
Jon Watte

Respostas:


21

Existem várias maneiras diferentes de fazer isso, incluindo:

  • O utilitário de configuração da EFI - a maioria das EFIs fornece utilitários de configuração que você pode acessar pressionando uma tecla especial no momento da inicialização (Esc, Del ou uma tecla de função, normalmente; mas qual é a chave varia de um sistema para outro). Isso geralmente, mas nem sempre, fornece uma maneira de ajustar a ordem de inicialização. Se o seu firmware oferecer essa opção, você poderá usá-lo para mover o GRUB para a posição superior. (É provável que o GRUB seja chamado ubuntu, uma vez que você o instalou a partir dessa distribuição.)
  • Um shell EFI - Você pode usar o bcfgcomando em um shell EFI versão 2, conforme descrito no wiki do Arch Linux. Se o seu sistema ainda não estiver configurado com um shell de fácil acesso, é provável que essa abordagem seja mais difícil de usar do que as outras, mas é independente do sistema operacional.
  • EasyUEFI - O programa Windows EasyUEFI de terceiros provavelmente será a maneira mais fácil de fazer o que você deseja. Você pode clicar na ubuntuentrada da lista do EasyUEFI e movê-la para o topo.
  • bcdedit- O bcdeditcomando do Windows pode alterar a ordem de inicialização baseada na NVRAM. Especificamente, abrir uma janela do prompt de comando do administrador e digitar bcdedit /set "{bootmgr}" path \EFI\ubuntu\shimx64.efi(opcionalmente seguido por bcdedit /set "{bootmgr}" description "ubuntu"para manter a descrição sensata) deve funcionar.
  • efibootmgr- Esta ferramenta Linux pode ajustar a ordem de inicialização. Comece digitando sudo efibootmgrsozinho para ver as opções. Anote o número ( Boot####) associado à ubuntuentrada e a ordem de inicialização atual (na BootOrderlinha). Você pode inserir uma nova ordem de inicialização com a ubuntuentrada na parte superior usando a -oopção Por exemplo, se a ordem de inicialização atual for 0000.0003.0007.0004 e ubuntu0007, você digitaria sudo efibootmgr -o 0007,0000,0003,0004para ajustar a ordem de inicialização.
  • refind-mkdefault- Este script vem com rEFInd, e é uma maneira de automatizar o procedimento anterior. Se você não estiver usando o rEFInd, precisará fazer o download do script aqui e torná-lo executável ( chmod a+x refind-mkdefault). Você o executaria como sudo ./refind-mkdefault -L ubuntuou sudo ./refind-mkdefault -L shimx64para tornar o GRUB a entrada de inicialização padrão.

Existem possíveis problemas e complicações com qualquer uma dessas opções. O fator complicador mais provável é se houver ubuntuentradas de inicialização antigas ou alternativas . É importante que você mova o correto para a posição superior na ordem de inicialização; se você mover o caminho errado, você terminará com nenhuma mudança de comportamento ou com algo que não seja inicializado, o que tornaria mais difícil inicializar. Se você usar efibootmgr, a BootCurrentlinha poderá ajudá-lo a dizer qual opção você deve definir como padrão.

Existem outras maneiras de fazer isso que são um exagero. Reinstalar o GRUB (por meio do Boot Repair ou grub-install) deve funcionar, por exemplo. Essas abordagens correm o risco de danificar uma configuração GRUB de trabalho conhecida.

Observe também que alguns EFIs são defeituosos e há outros problemas que podem dificultar a inicialização confiável do GRUB. Você pode verificar estas perguntas e respostas no AskUbuntu se tiver esses problemas:


Como descrevi na pergunta, o utilitário de configuração EFI não me deixou escolher o ubuntu como padrão, embora me permita fazer isso no menu de inicialização manual. Apenas me deixava escolher a unidade e inicia o Windows a partir disso. O efibootmgr tentou alterar a ordem de inicialização, mas o BIOS não prestou atenção na reinicialização. O EasyBCD não funcionou - não me permitiu adicionar mais itens de menu. No entanto, "BCDEDIT" em um shell de administrador realmente funcionou, então obrigado por essa opção!
Jon Watte

Observe que EasyBCD e EasyUEFI são dois programas diferentes do mesmo fornecedor. Infelizmente, parece que a versão gratuita do EasyUEFI não está mais disponível - apenas versões de teste são oferecidas. No entanto, o BOOTICE é outro programa gratuito que pode editar as configurações de inicialização da UEFI: site original em chinês , site em inglês com descrição e capturas de tela .
TelcoM

Usar sudo efibootmgr -n 0002é muito melhor do que modificar a ordem atual do SO. Ele muda BootNext: 0001e sai BootCurrent: 0002para a próxima vez, deixando as entradas atuais do GRUB intocadas. Basta adicionar um bash chmod +xe agrupar esse comando junto com o reinício.
M3nda 09/07/19

2

Eu tenho esse problema exato nas últimas semanas. Eu descobri usando essas opções. Antes de fazer qualquer uma dessas coisas, recomendo que você entre no BIOS / UEFI e verifique a ordem de inicialização e verifique se o grub está instalado é o primeiro.

Então, como eu vejo, você tem duas opções.

Opção 1

O que eu recomendaria é instalar o Windows 10 primeiro. Então instale o ubuntu. Mas eu sei que é meio tabu dizer apenas "reinstalar o software", então também vou oferecer uma alternativa.

opção 2

Com sua configuração atual, recomendo que você inicialize em uma unidade de CD / flash Live Ubuntu, instale e execute boot-repair. Clique na opção "Reparação recomendada" e siga as instruções fornecidas. Siga-o com cuidado e leia todos os comandos antes de executar. Isso substituirá a instalação atual do grub por uma nova que, esperamos, deve corrigi-la.


Obrigado pelas sugestões, mas eu já tinha tentado. A primeira vez que instalei as coisas, fui o Windows 10 primeiro, depois o Ubuntu 17.04 e depois o Boot Repair. Ele ainda era o padrão do Windows e, em seguida, limpei e reinstalei o Ubuntu primeiro, o que me leva a onde estou agora.
Jon Watte

Presumo que você tentou ajustar a ordem de inicialização no seu UEFI, certo?
taterbotz

Sim, como eu disse: "quando estou no menu de configuração no UEFI BIOS, ele apenas permite escolher" UEFI boot my drive internal "na seleção de prioridade de inicialização - não me permite escolher qual carregador de inicialização específico nessa partição para usar "
Jon Watte 8/17/17

2

Eu vejo várias soluções:

  1. Edite seu UEFI para ajustar o padrão. No linux você pode usar efibootmgr. No Windows, não tenho certeza, mas acho que você pode inicializar em uma opção de recuperação que permite configurar o UEFI. Ou você pode preferir instalar algo como rEFInd.
  2. Mude o nome da pasta na partição EFI. Eu acho que prefere, ou volta a, uma pasta chamada boot.
  3. Basta usar o carregador de inicialização do Windows, acho que pode ser configurado para inicializar outros sistemas operacionais.

Eu poderia editar a ordem de inicialização usando o efibootmgr, mas o BIOS a ignora e inicia o Windows de qualquer maneira. Alterar o nome da pasta de inicialização (ou mesmo copiar o grub para "boot") não funciona até eu remover o nome da Microsoft. O carregador de inicialização do Windows não inicialização não-Windows-os-es (pelo menos não aqueles não assinados.)
Jon Watte

@ JonWatte Talvez o gerenciador de inicialização uefi seja diferente, eu lembro de inicializar o ubuntu a partir do gerenciador de inicialização do Windows 7 em uma máquina de bios de 32 bits. Talvez ainda possa carregar o grub2 em cadeia? Como efibootmgrnão funciona, eu sei que não comprarei MSI.
Jggunjer # 8/17

Sim, esta placa-mãe MSI também tem outros problemas e está voltando para a Amazon em troca de um Gigabyte.
Jon Watte

1

Acabei de substituir minha placa mãe no meu laptop e o grub desapareceu completamente.

Sei que isso está marcado como fixo, mas achei que poderia ser útil para você.

Para fazer o grub aparecer como uma opção de inicialização. Eu precisava adicionar uma EFI ao BIOS.

Eu fui para a "opção de lista de inicialização" na minha bios. Clicou em "Adicionar opção de inicialização" (sei que isso é específico da bios). Isso me deu uma opção para o nome do arquivo, que no meu caso era \EFI\ubuntu\grubx64.efie deu um nome a elegrub

Em seguida, movi a grubentrada para o topo da sequência de inicialização e agora ela aparece como a entrada padrão.

Ou seja, o que estou dizendo é que você pode apenas precisar localizar o arquivo EFI correto e movê-lo para o topo da sua sequência / ordem de inicialização.


1

Nenhuma das opções acima funcionou para mim com o laptop HP 655 antigo. Descobri que a solução é definir o gerenciador de inicialização do Windows inativo:

sudo -s
efibootmgr
efibootmgr -b 4 --inactive

Substitua 4 pelo número de gerenciadores de inicialização do Windows. Execute o efibootmgr novamente e você verá uma estrela desaparecer para marcar a inatividade.

Depois que meu computador é inicializado no menu de inicialização em grupo, o Windows ainda pode ser escolhido.


-2

Uma solução possível seria editar manualmente o arquivo / etc / default / grub.

sudo vim /etc/default/grub

A entrada padrão é determinada pela GRUB_DEFAULT=configuração em / etc / default / grub. A primeira "entrada do menu" tem o valor "0". Se o Ubuntu for a segunda entrada na tela de inicialização, defina GRUB_DEFAULT = 1.

Posteriormente, você precisaria executar o comando para atualizar a configuração do grub: update-grub

Outra opção seria a instalação do grub-customizer e usar sua GUI para configurar a prioridade de inicialização.


O problema não está no Grub. Como eu disse no post, se eu puder fazer o BIOS escolher a opção de inicialização Grub UEFI, recebo o menu de inicialização Grub, que permite escolher o Windows ou o Ubuntu. Este é o menu que eu quero por padrão. Infelizmente, o BIOS escolhe o Windows Boot Manager por padrão.
Jon Watte

Como eu disse, você pode corrigi-lo na ordem de inicialização do grub configurando o Ubuntu como o primeiro sistema a ser iniciado. Use o grub-customizer para fazer isso usando a GUI. linuxandubuntu.com/home/…
Sr. Raspberry

Novamente, o Grub nem é iniciado pelo BIOS. A ordem de inicialização do Grub não importa. GRUB_DEFAULT não importa. Esse não é o problema aqui.
precisa saber é o seguinte
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.