Como reinstalar o GRUB2 EFI?

56

Depois de atualizar com sucesso minha bios, algo deu errado e acabei com um cursor piscando no canto superior esquerdo de uma tela preta. Sem erros, sem nada. Agora, o BIOS listou apenas uma SATA: <disc name>opção de inicialização no lugar da UEFI usual ubuntu. Estou usando um esquema de particionamento GPT.

Acabei descobrindo que a solução de trabalho era reinstalar corretamente grub-efi-amd64. Então, como faço isso?

PS: Na verdade, consegui reinstalar o GRUB2 EFI por conta própria e postarei minha resposta aqui, pois não consegui encontrar nenhum tutorial completo sobre isso.

Maxime R.
fonte
Eu tive problemas com minha inicialização dupla: laptop Windows 10 / PCLinuxOS. De alguma forma, perdi o carregador grub2 ou a funcionalidade. Depois de tentar muitas das contorções acima, sem sucesso, tropecei na iso do Grub2 Boot Rescue, queimei em um CD e deixei na unidade. Era um pouco entediante passar pelo processo de inicialização todas as vezes, mas pelo menos funcionava. Então eu encontrei o iso do disco de reparo da inicialização e o queimei em um DVD. Nesse ponto, minha unidade estava realmente desajeitada pelos meus esforços, então reformatei e reinstalei tudo, desta vez o Windows 10 e o Mint Sonya. Em seguida, inicializei o Boot Repair Disk e instalei o Grub2 ov
Keith Krehbiel

Respostas:

87
  • Inicialize seu computador com um live-USB / CD no modo UEFI . Eu tinha duas opções de inicialização <flash_drive>e UEFI: <flash_drive>, a segunda é necessária para expor as variáveis ​​efi /sys/firmware/efi/para que efibootmgrnão falhem mais tarde. A inicialização com a primeira opção me dá o seguinte erro:

    Fatal: Couldn't open either sysfs or procfs directories for accessing EFI variables.
    Try 'modprobe efivars' as root.
    

    modprobe efivars não funcionou para mim.

  • chroot no sistema danificado (semelhante à ajuda do ubuntu grub2, mas com especificidades efi):

    sudo mount /dev/sda2 /mnt #sda2 is the root partition
    sudo mount /dev/sda1 /mnt/boot/efi #sda1 is the efi partition
    for i in /dev /dev/pts /proc /sys; do sudo mount -B $i /mnt$i; done
    sudo cp /etc/resolv.conf /mnt/etc/ #makes the network available after chrooting
    modprobe efivars # make sure this is loaded
    sudo chroot /mnt
    
  • Dependendo da sua distribuição Linux, agora você faz coisas diferentes.

    • Para Ubuntu / Debian :

      apt-get install --reinstall grub-efi-amd64
      

      ou alternativamente:

      apt-get install --reinstall grub-efi
      update-grub
      

      o acima deve fornecer um grub, mas não um inicializável

    • Para o Fedora (até 16, pode funcionar para outros):

      yum reinstall grub-efi
      

      No comando a seguir, você deve substituir o sdX pelo dispositivo que possui a partição EFI da qual deseja inicializar. Em --part Yvocê tem que substituir o Y com o número da partição EFI (como em /dev/sdXY).

      efibootmgr -c --disk /dev/sdX --part Y
      efibootmgr -v # verify a new record called Linux is there
      
  • Agora digite Ctrl + D para sair do chroot, desmonte tudo e reinicie:

    for i in /sys /proc /dev/pts /dev; do sudo umount /mnt$i; done
    sudo umount /mnt/boot/efi #please do this. Corrupted efi partitions are not nice
    sudo umount /mnt
    sudo reboot
    

Pode ser necessário adaptar isso às suas necessidades (tabela de partições diferente, partição de inicialização / separada, etc.) e pode não ser a única opção, mas funcionou bem para mim.

Um sistema ao vivo adequado para consertar as coisas é o grml . Há também um guia abrangente sobre como configurar um dispositivo USB inicializável, dos quais a seção Mac é a mais útil, na verdade (basta criar uma partição FAT32, copiar os arquivos, reiniciar, concluir).

Maxime R.
fonte
4
Cara! Muito obrigado! Isso me salvou depois que meu Lenovo X220 não queria mais inicializar após uma redefinição, que ativou as atualizações mais recentes do pacote e ao mesmo tempo me viu fazendo uma redefinição do BIOS porque isso supostamente corrige problemas de conexão com a placa 3G. Depois disso, a inicialização tornou-se impossível, por qualquer motivo. Até eu usar o seu guia. BTW, a parte em que você copiou o resolv.conf não funcionou para mim, porque é um link simbólico para o /run/resolvconf...(no Ubuntu 12.04); em vez disso, eu apenas costumava mount --bind /run /mnt/runmontar o /rundiretório inteiro no ambiente chroot.
#
Estendi a resposta com minhas experiências no Fedora 16 e uma referência ao grml. Se você pudesse revisar e aceitar a edição, ficaria feliz.
Jonas Schäfer
11
No Ubuntu (pelo menos para 12.04) update-grubnão copia a imagem mais recente do grub2 para sua partição EFI, apenas atualiza o grub.cfg. Então, a melhor maneira de fazer é apt-get install --reinstall grub-efi(ou grub-efi-amd64) isso também chamará update-grub no final.
Number5
3
Salvei meu media player ontem. 300 pontos de internet para você.
Stefano Borini 12/09
2
Depois de executar update-grubminha /boot/efipasta ainda estava vazia (eu criei essa nova partição). Somente após a execução, grub-installos arquivos reais foram gravados lá. Este guia me ajudou (alemão): wiki.ubuntuusers.de/EFI_Problembehebung
Philippe Gerber
8

Como uma possível simplificação do primeiro método, é possível inicializar diretamente no sistema no disco rígido, usando apenas o grub do live CD. Testado no xubuntu 13.10 com o live CD do xubuntu 13.10.

Verifique se o Secure Boot está desativado no seu BIOS. Insira o CD ativo e inicialize-o via UEFI. O menu GRUB do CD será exibido. Pressione "c" para chegar à linha de comando.

configfile (hd0,gpt1)/EFI/ubuntu/grub.cfg

Adapte o comando grub acima se você tiver uma partição do sistema EFI diferente.

Após a inicialização do sistema a partir do disco rígido, basta reinstalar o grub na partição do sistema EFI e registrá-lo no firmware via grub-install.

sudo grub-install

fonte
Não funciona configfile (hd0,gpt1)/EFI/ubuntu/grub.cfgfaz nada. Como inicializo após emitir este comando?
Autodidata
3
Uau. Eu não esperava que fosse tão fácil! Esta é uma resposta infernal! Corri sudo grub-install --target=x86_64-efi --efi-directory=/boot/efiem vez do comando sugerido acima (mas o acima pode funcionar também - não sei). E depois disso, você pode acessar seu sistema operacional Linux novamente. Em seguida, basta executar sudo update-grube tudo deve ser inicializável.
precisa
@ SandeepDatta: seu diretório efi provavelmente está em um disco / partição diferente. Mine foi no / dev / sdb1, então eu corri: configfile (hd1,gpt1)/EFI/ubuntu/grub.cfg. Inicialize um LiveCD e execute sudo gpartedpara localizar sua partição efi.
precisa
5

Assim como no Maxine, achei minhas configurações UEFI no BIOS danificadas e minha máquina não inicializava.

No meu caso, é um Lenovo ThinkServer RD430 com Linux Mint Debian e parecia que qualquer coisa que eu faria sobre o update-grub ou a alteração de qualquer disco rígido no servidor faria com que ele não inicializasse. O SO no meu caso é o linuxmint-201403-mate-dvd-64bit instalado via USB. (veja abaixo uma descrição completa dos eventos que causariam o UEFI não funcionar)

Seguir exatamente as mesmas etapas em um ThinkServer TS140 não fez com que a UEFI perdesse a cabeça sequer uma vez. Olhou para a página do driver RD430 e minha bios tem duas versões antigas. Eu nunca tive que atualizar o BIOS em uma placa-mãe antes, então não sou um que atualiza automaticamente quando há novas versões disponíveis. Depois de atualizar o BIOS, a resposta de Maxine acima funcionou, apenas com um toque ...

# efibootmgr -c --disk /dev/sdX --part Y
# efibootmgr -v
BootCurrent: 0004
Timeout: 1 seconds
BootOrder: 0002,0000,0003,0001,0004
Boot0000* linuxmint HD(1,800,1f4000,829f6cc9-5b17-479c-b3ea-61e43faecbf7)File(\EFI\linuxmint\grubx64.efi)
Boot0001* LMDE Linux Mint Debian    HD(1,800,15d505800,934c598c-fe3c-fd43-84a1-fa38e4f72552)File(\EFI\linuxmint\grubx64.efi)
Boot0002* Linux HD(1,800,1f4000,829f6cc9-5b17-479c-b3ea-61e43faecbf7)File(\elilo.efi)
Boot0003* UEFI: Built-in EFI Shell  Vendor(5023b95c-db26-429b-a648-bd47664c8012,)AMBO
Boot0004* UEFI: VerbatimSTORE N GO 1.00 ACPI(a0341d0,0)PCI(1a,0)USB(1,0)USB(4,0)HD(1,80,1d70780,00000000)AMBO
mint / # 

O efibootmgr -ccomando adicionou duas entradas 0000e 0002!
A Boot0002* Linux HDentrada primeiro na ordem de inicialização não está correta .
A 0000entrada está correta.

Para testar isso, tentei inicializar sem nenhuma interrupção, que é a 0002entrada. Como esperado, não funcionou. Então, reiniciei o servidor, pressione F12 e escolhi linuxmint. Como esperado, ele inicializou na minha instalação do LMDE.

A maneira de remover entradas indesejadas via efibootmgr é:

# efibootmgr -b 2 -B

Eu usei este comando para remover entradas 0001e 0002. A opção 0001foi da última das minhas muitas tentativas de recuperar o sistema operacional.


Notas UEFI

Se você está lendo isso e está tão frustrado com a UEFI quanto eu sou, aqui estão algumas notas e recursos:
»A inicialização no UEFI Shell é semelhante ao uso de um shell do DOS.
»A Intel criou um manual de referência em PDF para comandos efi shell.
»O documento UEFI_on_TS430 da Lenovo é o único recurso que eu vi explicando o uso do efi shell.
» Outra referência ao shell uefi do nPartition Administrator's Guide .
»Você pode tentar inicializar em uma partição a partir do efi shell, navegando até o carregador e executando-o.
»A UEFI deseja que o disco tenha uma tabela de partições GPT, não uma tabela de partes msdos.
»A UEFI deseja que a primeira partição do seu disco seja formatada como fat32 ou vfat.
»Para uma inicialização" genérica ", deve haver um /EFI/bootdiretório na raiz com bootx64.efiele.
»Algumas pessoas as copiam grubx64.efide onde foram instaladas /EFI/boot/bootx64.efie esse truque funcionou para elas.
»Sempre que você fizer alterações no grub, use efibootmgr -vantes e depois para garantir que sua reinicialização esteja correta.


Minha experiência no RD430

Eu reinstalei o sistema operacional mais de 10 vezes na semana passada, tentando resolver isso e configurar o servidor. Minha configuração é um SSD neste controlador RAID no slot PCIe 2.0 com o LMDE instalado. Controlador RAID AOC-S3008L-L8i ( reflashed para o modo IT ) no segundo slot PCIe 3.0 com unidades de 3 TB de 6x. RAM: ECC de 12 GB (3x 4 GB).

Aqui estão as alterações que eu faria que fizessem com que o sistema não inicializasse:
»Altere os slots PCI S3008L-L8i (deixando o cartão SSD + em paz).
»Desative o prompt do LSi software raid bios para o controlador integrado.
»Adicione minha placa HighPoint RocketRaid antiga a um slot PCIe aberto.
»Faça uma alteração /etc/default/grube depois execute update-grub.
( talvez grub-installprecise ser executado também? )

Chris K
fonte
Estou muito frustrado com UEFi.I ter instalado Linux com BIOS, mas é muito difícil obtê-lo para trabalhar com UEFI e refind
Suici Doga
3

Gostaria de votar novamente, mas aparentemente não tenho representante suficiente no SuperUser. Estou feliz por finalmente ter encontrado uma resposta para isso depois de dias de luta contra clones que funcionaram, mas não funcionavam. Eu acho que tudo está relacionado à UEFI e algum tipo de mecanismo de "inicialização segura" ou algo assim.

Estou trabalhando off-line, então o apt-get não era uma opção. O que fiz foi colocar o Ubuntu Desktop em um pendrive, adicionar os pacotes grub-efie grub-efi-amd64à raiz do pendrive (grub-efi_1.99 ~ rc1-13ubuntu3_amd64.deb e grub-efi-amd64_1.99 ~ rc1-13ubuntu3_amd64.deb para Ubuntu 11.04 - altere conforme apropriado para distribuição e arquitetura) e coloque o seguinte em um script no pendrive:

#! /bin/bash
sudo mount /dev/sda2 /mnt
sudo mount /dev/sda1 /mnt/boot/efi
dir=`dirname $0`
sudo cp $dir/grub-efi*.deb /mnt/tmp
for i in /dev /dev/pts /proc /sys; do sudo mount -B $i /mnt$i; done
sudo chroot /mnt /bin/sh -c "dpkg -i /tmp/grub-efi*.deb"
sudo shutdown -r now

Inicie o Live USB stick, abra um terminal, execute o comando e o trabalho é uma boa solução! O único problema ocasional é que o UEFI às vezes foi movido para baixo na ordem de prioridade de inicialização abaixo do HDD, momento em que você precisa acessar o BIOS e alterar a ordem de inicialização para impedir que tente (e falhe) SATA: drive.

Você também pode usar em dpkg-reconfigurevez de dpkg -i, mas isso faz algumas perguntas ao carregador de inicialização.

[editar] Eu também não tenho representante suficiente para comentar, então o que eu pensei que era um comentário em uma resposta acaba sendo uma resposta.

IBBoard
fonte
Bem-vindo a bordo! Na verdade, você precisa de 15 pontos para votar, 50 para comentar (consulte superuser.com/privileges ), basta procurar por perguntas fáceis que você pode responder e pronto, essa é a maneira da stackexchange de agradecer :) Cuidado com o script desmonte qualquer coisa antes de desligar. Ainda bem que ajudou.
Maxime R.
Confusão foi mais porque eu tenho contas em outros sites relacionados. Esqueci que eu era novo neste lado. O Linux normalmente desmonta no desligamento e o chroot com um comando retorna depois que ele termina, então não acho que deva causar um problema. Descobri que não será abortado se você não inicializar a UEFI na distribuição ao vivo, mas não era uma prioridade testar se sudo chroot /mnt /bin/sh -c "dpkg -i /tmp/grub-efi*.deb" && sudo shutdown -r nowdeu o comportamento correto.
IBBoard
1

No meu Ubuntu 14.10 de 32 bits no Lenovo Yoga 2 Pro, mudei para a inicialização UEFI desta forma:

  • criar pasta

    sudo su
    mkdir /boot/efi
    
  • monte a partição "Sistema EFI" no /etc/fstab

    fdisk -l|grep EFI
    

    isso mostrou: /dev/sda2 2050048 2582527 532480 260M EFI System

    echo "/dev/sda2 /boot/efi   vfat    defaults,sync   0   0">>/etc/fstab
    

    monte essa partição

    mount /boot/efi
    
  • instalar grub-efi-amd64-bine desinstalargrub-efi-ia32-bin

    aptitude install grub-efi-amd64-bin grub-efi-ia32-bin_
    
    grub-install --target=x86_64-efi
    
  • reinicie o Ubuntu no modo efi

    update-grub
    
  • testar se ele inicializa bem, instalei grub-efi-amd64e desinstalei grub-pc grub-gfxpayload-listscom

    aptitude install grub-efi-amd64 grub-pc_ grub-gfxpayload-lists_
    

Eu escolho não remover / inicializar quando solicitado.


Talvez eu tenha complicado, e isso teria funcionado bem:

apt-get install --reinstall grub-efi
update-grub
rubo77
fonte
0

Essa entrada é mais parecida com a preparação do computador para reinstalar as entradas efi. Também é o que você pode achar uma maneira simples e eficaz de criar um disco de recuperação após a instalação do sistema em mídia interna (SSD, HDD).

Com o Linux Mint Tara (uma variante do Linux intimamente relacionada ao Ubuntu Bionic Beaver), o método atrapalhou minha instalação e tornou possível posteriormente salvá-la. Surgiu do meu desejo de persistência de um USB ativo e, como o tempo para instalar um utilitário como o Unetbootin para uma instalação persistente é aproximadamente o mesmo que uma nova instalação, simplesmente usei a mesma distribuição ao vivo para fazer uma instalação no USB como foi usado para instalar o sistema operacional no SSD interno.

Obviamente, nada disso é RAID ou qualquer outra configuração especializada, mas exigia uma partição de volume preparada na unidade USB e uma instalação feita nesse USB usando o método disponível da distribuição, contornando a unidade interna para instalação em uma única montagem raiz (/) da partição.

É aqui que a nova instalação do grub se emaranha com a unidade interna. Quando reinicializei o USB, as entradas grub UEFI internas pareciam ter desaparecido, deixando apenas o menu grub ao tentar selecionar a unidade usando as entradas no menu BIOS.

Em vez disso, a inicialização a partir do USB mostrou que o método da distro havia produzido um menu grub pronto, com uma listagem para o / dev / sda2, a partição que contém a montagem / boot / efi. Na maioria das instalações de unidades internas primárias, o nome do grub da partição é hd0, gpt1.

Indo para 'avançado', mais de um resgate de kernel estava disponível. A partir daí, execute o utilitário grub e, em seguida, inicialize normalmente.

A partir desse ponto, executando o sistema operacional na unidade interna que anteriormente era inacessível, desconecte o USB e execute sudo grub-install.

Quando você reinicia sem o USB, deve poder entrar novamente. Nesse ponto, o USB está configurado para iniciar a unidade interna no modo normal ou de recuperação, e a unidade possui seu próprio menu.

Tim Pozza
fonte