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

7

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

The question is:

How can I make the BIOS prefer GRUB over Windows Boot Manager on the same UEFI boot partition?

The problem is not with Grub; Grub does the right thing when the BIOS starts it. The problem is not with "the disk isn't bootable," because both the Windows UEFI bootstrap and the Grub UEFI bootstrap are bootable. The problem is which UEFI bootstrap the BIOS chooses to boot from.

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

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

Então eu instalei o Windows 10 Pro a partir de um ISO baixado recentemente. Ele instalou o Gerenciador de Inicialização do Windows na mesma partição UEFI e deixou o Ubuntu intacto (ótimo!) E que inicializa bem 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 gerenciador de inicialização GRUB manualmente. O UEFI BIOS sabe que há várias instalações inicializáveis na partição UEFI, porque posso escolher entre elas no gerenciador de inicialização. No entanto, quando eu estou no menu de configuração no UEFI BIOS, ele apenas me permite escolher "UEFI inicializar minha unidade interna" na seleção de prioridade de inicialização - ele não me deixa escolher qual carregador de boot específico usar nessa partição . 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, em seguida, grub-install (colocar o GRUB de volta no dispositivo). mas, infelizmente, ainda tem o comportamento descrito acima, onde o BIOS, por padrão, escolhe o Gerenciador de Inicialização do Windows. ( update-grub encontra a instalação do Gerenciador de inicialização do Windows e a adiciona ao menu, e esse item de menu funciona quando escolho manualmente a partição do 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 para uma resposta, eu a repetirei aqui:

"BCDEDIT" in an admin shell on Windows is the working solution. The others don't work.
    
por Jon Watte 04.09.2017 / 18:19

4 respostas

6

Existem algumas maneiras diferentes de fazer isso, incluindo:

  • O utilitário de configuração 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). Geralmente, eles, mas nem sempre, fornecem uma maneira de ajustar a ordem de inicialização. Se o seu firmware fornecer essa opção, você poderá usá-lo para mover o GRUB para a posição superior. (É provável que o GRUB seja chamado de ubuntu , já que você o instalou a partir dessa distribuição.)
  • Um shell EFI - Você pode usar o comando bcfg 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, essa abordagem provavelmente será mais difícil de usar do que as outras, mas é agnóstico do sistema operacional. .
  • EasyUEFI - O programa EasyUEFI de terceiros provavelmente será a maneira mais fácil fazer o que quiser. Você pode clicar na entrada ubuntu na lista do EasyUEFI e movê-la para o topo.
  • bcdedit - O comando bcdedit do Windows pode alterar a ordem de inicialização baseada em NVRAM. Especificamente, abrir uma janela de Prompt de Comando Administrator e digitar bcdedit /set "{bootmgr}" path \EFI\ubuntu\shimx64.efi (seguido opcionalmente por bcdedit /set "{bootmgr}" description "ubuntu" para manter a descrição sensata) deve funcionar.
  • efibootmgr - Esta ferramenta do Linux pode ajustar a ordem de inicialização. Comece digitando sudo efibootmgr sozinho para ver as opções. Observe o número ( Boot#### ) associado à entrada ubuntu e a ordem de inicialização atual (na linha BootOrder ). Em seguida, você pode inserir uma nova ordem de inicialização com a entrada ubuntu na parte superior, usando a opção -o . Por exemplo, se a ordem de inicialização atual for 0000,0003,0007,0004 e ubuntu for 0007, você digitará sudo efibootmgr -o 0007,0000,0003,0004 para ajustar a ordem de inicialização.
  • refind-mkdefault - Este script vem com o rEFInd e é uma maneira de automatizar o procedimento anterior. Se você não estiver usando o rEFInd, será necessário fazer o download do script aqui e torná-lo executável ( chmod a+x refind-mkdefault ). Em seguida, você o executaria como sudo ./refind-mkdefault -L ubuntu ou sudo ./refind-mkdefault -L shimx64 para 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 entradas de inicialização antigas ou alternativas ubuntu . É importante que você mova o correto para a posição superior na ordem de inicialização; se você mover o caminho errado, você não terá nenhuma mudança de comportamento ou algo de inicialização não-funcional, o que dificultaria a inicialização. Se você usar efibootmgr , a linha BootCurrent poderá ajudá-lo a informar qual opção você deve definir como padrão.

Existem outras maneiras de fazer isso que são exageradas. Reinstalar o GRUB (via Reparo de inicialização ou grub-install ) deve fazer o truque, por exemplo. Essas abordagens, no entanto, correm o risco de danificar uma configuração do GRUB conhecida.

Note também que algumas EFIs são problemáticas e há outros problemas que podem dificultar a inicialização confiável do GRUB. Você pode querer verificar essas perguntas e respostas no AskUbuntu se você tiver esses problemas:

por 07.09.2017 / 15:51
1

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

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

Opção 1

O que eu recomendo para você é instalar o Windows 10 primeiro. Em seguida, instale o Ubuntu. Mas eu sei que é meio tabu dizer apenas "reinstalar o software", então vou oferecer uma alternativa também.

Opção 2

Com sua configuração atual, eu recomendo que você inicie em um Live CD / flash drive do Ubuntu, instale e execute boot-repair . Clique na opção "Reparação recomendada" e siga as instruções dadas. Siga cuidadosamente e leia todos os comandos antes de executar. Isso substituirá a instalação atual do grub por uma nova que, esperamos, conserte.

    
por 04.09.2017 / 18:58
1

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. Altere o nome da pasta na partição EFI. Eu acho que ele prefere, ou cai de volta, uma pasta chamada boot .
  3. Basta usar o gerenciador de inicialização do Windows, acho que ele pode ser configurado para inicializar outros sistemas operacionais.
por 07.09.2017 / 04:23
-1

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

sudo vim /etc/default/grub

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

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

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

    
por 06.09.2017 / 17:00