Como reinstalar o GRUB2 EFI?

54

Depois de atualizar minha biografia com êxito, algo deu errado e acabei com um cursor piscando no canto superior esquerdo de uma tela preta. Nenhum erro, nada. A bios agora listou apenas uma opção de inicialização SATA: <disc name> no lugar do UEFI usualubuntu one. Estou usando um esquema de particionamento GPT.

Eu finalmente descobri 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 manual completo sobre isso.

    
por Maxime R. 09.01.2012 / 17:37

6 respostas

86
  • 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 em /sys/firmware/efi/ , para que efibootmgr não falhe mais tarde. A inicialização com a primeira opção me deu o seguinte erro:

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

    modprobe efivars did'nt trabalhar para mim.

  • chroot no sistema quebrado (semelhante à ajuda do ubuntu grub2 , mas com especificidades de 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, você agora faz coisas diferentes.

    • Para o Ubuntu / Debian :

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

      ou alternativamente:

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

      deve o acima dar-lhe um grub, mas não um inicializável

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

      yum reinstall grub-efi
      

      No seguinte comando, você deve substituir sdX pelo dispositivo que tem o Partição EFI da qual você deseja inicializar. Em --part Y você 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, desmontar tudo e reinicializar:

    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
    

Você pode precisar adaptar isso às suas necessidades (tabela de partição diferente, partição / boot separada, etc.) e pode não ser a única opção, mas isso funcionou muito bem para mim.

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

    
por 09.01.2012 / 17:39
7

Como 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 xubuntu 13.10.

Certifique-se de que o Secure Boot esteja desativado no seu BIOS. Insira o live CD e inicialize-o via UEFI. O menu GRUB do CD será exibido. o 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 o seu sistema inicializar a partir do disco rígido, deve ser suficiente reinstalar o grub na partição do sistema EFI e registrá-lo com o firmware via grub-install.

sudo grub-install
    
por 24.02.2014 / 19:06
5

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

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

Passar exatamente pelas mesmas etapas em um ThinkServer TS140 não resultou na UEFI perdendo sua mente nem uma vez. Olhei para a página do driver RD430 e meu BIOS tem duas versões antigas. Eu nunca tive que atualizar bios em uma placa-mãe antes, então eu não sou um para atualizar automaticamente quando há novas versões disponíveis. Depois de atualizar o bios, a resposta de Maxine acima funcionou, apenas com uma torção ...

# 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 comando efibootmgr -c adicionou duas entradas 0000 e 0002 !
A entrada Boot0002* Linux HD primeiro na ordem de inicialização não está correta .
O 0000 entry está correto.

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

A maneira de remover entradas indesejadas via efibootmgr é:

# efibootmgr -b 2 -B

Eu usei este comando para remover as entradas 0001 e 0002 . A opção 0001 foi a última das minhas muitas tentativas para recuperar o SO.

Notas da UEFI

Se você está lendo isso e tão frustrado com a UEFI quanto eu / era, aqui estão algumas notas e recursos:
»A inicialização para o UEFI Shell é semelhante ao uso de um shell do DOS.
»A Intel criou um manual de referência do PDF para comandos shell do efi .
»O documento UEFI_on_TS430 da Lenovo é o único recurso que vi explicando o uso do shell efi

» Outra referência de shell do uefi de nPartition Administrator's Guide .
»Você pode tentar inicializar em uma partição do shell do efi, 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 em seu disco seja formatada como fat32 ou vfat.
»Para uma inicialização" genérica ", deve haver um diretório /EFI/boot na raiz com bootx64.efi .
»Algumas pessoas copiam seu grubx64.efi de onde ele foi instalado para /EFI/boot/bootx64.efi e esse truque funcionou para eles.
»Sempre que fizer alterações no grub, use efibootmgr -v antes e depois para garantir que a reinicialização esteja correta.

Minha experiência com o RD430

Eu tenho reinstalado o OS 10 + vezes na semana passada tentando resolver isso e configurar o servidor. Minha configuração é um SSD em este controlador RAID no slot PCIe 2.0 com o LMDE instalado. AOC- Controlador RAID S3008L-L8i ( re-programado para o modo IT ) no segundo slot PCIe 3.0 com unidades 6x 3TB. RAM: 12 GB de ECC (3 x 4 GB).

Estas são as alterações que eu fiz que fizeram com que meu sistema não inicializasse:
»Altere os slots pci do S3008L-L8i (deixando apenas a placa SSD +).
»Desabilite o prompt de bugs do LSi software raid para controlador onboard.
»Adicionar meu antigo cartão HighPoint RocketRaid a um slot PCIe aberto.
»Faça uma alteração em /etc/default/grub e, em seguida, execute update-grub .
( talvez grub-install também precise ser executado? )

    
por 20.03.2014 / 01:27
3

Eu votaria para cima, mas aparentemente não tenho representante suficiente no SuperUser. Estou feliz que finalmente encontrei uma resposta para isso depois de dias de luta com clones que funcionavam, mas não inicializavam. Acho que tudo se relaciona com o 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 eu fiz foi colocar o Ubuntu Desktop em um stick USB, adicionar os pacotes grub-efi e grub-efi-amd64 na 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 - mude conforme apropriado para distro 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

Inicialize o Live USB stick, abra um terminal, execute o comando e o trabalho é um bom 'un! O único problema ocasional é que o UEFI às vezes é movido para baixo na ordem de prioridade de inicialização abaixo do HDD. Nesse ponto, você precisa entrar no BIOS e alterar a ordem de inicialização para pará-lo (e falhar) no SATA: drive .

Você também pode usar dpkg-reconfigure em vez de dpkg -i , mas isso faz algumas perguntas sobre o gerenciador de inicialização.

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

    
por 01.03.2012 / 12:08
1

No meu Ubuntu de 32 bits de 32 bits no Lenovo Yoga 2 Pro, mudei para boot UEFI assim:

  • criar pasta

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

    fdisk -l|grep EFI
    

    isto 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
    
  • instale grub-efi-amd64-bin e desinstale grub-efi-ia32-bin

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

    update-grub
    
  • teste se inicializar bem, então eu instalei grub-efi-amd64 e desinstalei grub-pc grub-gfxpayload-lists com

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

Eu escolhi não remover / boot quando solicitado.

Talvez eu tenha complicado e isso funcionasse bem:

apt-get install --reinstall grub-efi
update-grub
    
por 21.01.2015 / 12:38
0

Esta entrada tem mais a ver com preparar seu computador para reinstalar as entradas do efi. É também o que você pode achar que é uma maneira simples e eficaz de criar um disco de recuperação após a instalação do sistema na mídia interna (SSD, HDD).

Com o Linux Mint Tara (uma variante do Linux intimamente relacionada ao Ubuntu Bionic Beaver), o método borked minha instalação e tornou possível salvá-lo posteriormente. Surgiu da minha vontade de ter um USB com persistência, 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, eu simplesmente usei a mesma distribuição ao vivo para fazer uma instalação no USB. foi usado para instalar o sistema operacional no SSD interno.

Claro, nada disso é RAID ou qualquer outra configuração especializada, mas exigiu uma partição de volume preparada na unidade USB e uma instalação feita naquele USB usando o método disponível da distro, contornando a unidade interna para uma instalação na raiz de uma única partição (/) mount.

Aqui é onde a nova instalação do grub se entrelaça com a unidade interna. Quando reiniciei o USB, as entradas internas do UEFI grub pareciam ter desaparecido, deixando apenas o menu grub ao tentar selecionar o drive usando as entradas no menu do BIOS.

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

Entrando em 'advanced', mais de um resgate de kernel estava disponível. A partir daí, execute o utilitário grub e inicialize normalmente.

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

Quando você reinicializa sem o USB, deve conseguir voltar. Neste ponto, o USB é configurado para ativar a unidade interna no modo normal ou de resgate, e a unidade possui seu próprio menu.

    
por 08.08.2018 / 03:32