O Sony VAIO com Insyde H2O EFI BIOS não inicializa no GRUB EFI

10

Comprei um novo laptop da série Sony Vaio S. Ele usa o Insyde H2O BIOS EFI, e tentar instalar o Linux nele está me enlouquecendo.

root@kubuntu:~# parted /dev/sda print
Model: ATA Hitachi HTS72756 (scsi)
Disk /dev/sda: 640GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number  Start  End    Size    File system  Name                          Flags
 1      1049kB  274MB  273MB  fat32        EFI system partition          hidden
 2      274MB  20.8GB  20.6GB  ntfs        Basic data partition          hidden, diag
 3      20.8GB  21.1GB  273MB  fat32        EFI system partition          boot
 4      21.1GB  21.3GB  134MB                Microsoft reserved partition  msftres
 5      21.3GB  342GB  320GB  ntfs        Basic data partition
 6      342GB  358GB  16.1GB  ext4        Basic data partition
 7      358GB  374GB  16.1GB  ntfs        Basic data partition
 8      374GB  640GB  266GB  ntfs        Basic data partition

O que é surpreendente é que existem duas partições do sistema EFI no disco. A partição sda2 é uma partição de recuperação de 20gb que carrega janelas com uma interface de recuperação básica. Isto é acessível pressionando o botão "ASSIST" em oposição ao botão de energia normal. Eu presumo que a Partição do Sistema EFI sda1 (ESP) carregue para esta recuperação.

O sda3 ESP tem entradas mais expansivas para o Microsoft Windows, que na verdade vai para o Windows 7 (como confirmado pelo bcdedit.exe no Windows). O Ubuntu está instalado no sda6 e, durante a instalação, escolhi o sda3 como minha partição de inicialização. O instalador criou corretamente um aplicativo sda3 / EFI / ubuntu / grubx64.efi.

O verdadeiro problema: para a vida de mim, não posso configurá-lo para ser o padrão! Eu tentei criar um sda3 / startup.nsh que chamou grubx64.efi, mas não ajudou - na reinicialização, o sistema ainda é inicializado no Windows. Eu tentei usar o efibootmgr, e isso mostra como funcionou:

root@kubuntu:~# efibootmgr 
BootCurrent: 0000
BootOrder: 0000,0001
Boot0000* EFI USB Device
Boot0001* Windows Boot Manager
root@kubuntu:~# efibootmgr --create --gpt --disk /dev/sda --part 3 --write-signature --label "GRUB2" --loader "\EFI\ubuntu\grubx64.efi" 
BootCurrent: 0000
BootOrder: 0002,0000,0001
Boot0000* EFI USB Device
Boot0001* Windows Boot Manager
Boot0002* GRUB2
root@kubuntu:~# efibootmgr
BootCurrent: 0000
BootOrder: 0002,0000,0001
Boot0000* EFI USB Device
Boot0001* Windows Boot Manager
Boot0002* GRUB2

No entanto, na reinicialização, como você adivinhou, a máquina foi reinicializada diretamente no Windows.

As únicas coisas em que consigo pensar são:

  1. A partição sda1 está sendo usada de alguma forma
  2. Sobrescreva /EFI/Boot/bootx64.efi e /EFI/Microsoft/Boot/bootmgfw.efi com grubx64.efi [mas isso parece realmente radical].

Alguém por favor pode me ajudar? Obrigado - qualquer ajuda é muito apreciada, como esta questão está me deixando louco!

    
por Rohan Dhruva 13.06.2012 / 05:59

5 respostas

8

Eu finalmente consegui resolver isso. Eu substituí o EFI / Microsoft / boot / bootmgfw.efi pelo grub64.efi. Renomeiei o antigo para bootmgfw.efi.old e usei o grub para adicionar uma opção de menu para encadear nele.

Isso implica que o firmware é codificado para procurar o carregador de inicialização do Microsoft Windows e não respeita as configurações do efibootmgr ou o startup.nsh. Isso é realmente terrível.

Descobri como o processo de inicialização do Sony EFI funciona:

  1. Procure em /EFI/Microsoft/Boot/fwbootmgr.efi; se presente, inicialize-o.
  2. Procure em todos os subdiretórios de / EFI / para grubx64.efi. Se presente, inicialize-o.
  3. Inicialize /EFI/Boot/bootx64.efi
  4. Exibir uma mensagem de erro, como "Sistema operacional não encontrado".

No Linux, a ferramenta efibootmgr funciona, mas exibe muitas bobagens geradas automaticamente, incluindo a última unidade USB que você usou.

Veja como eu aprendi tudo isso:

  1. Eu abri minha nova máquina e recolhi a partição do Windows para instalar o Linux e o Mac lado a lado.
  2. Eu instalei o Ubuntu 12.10 e o instalador sobrescreveu o fwbootmgr.efi, fazendo o backup do antigo gerenciador de inicialização do Windows.
  3. Eu restaurei o antigo gerenciador de inicialização do Windows, mas não consegui inicializar nada, exceto o Windows.
  4. Eu renomei o bootloader do Windows para algo falso, e então o Grub BL assumiu.
  5. Eu renomeiei o diretório ubuntu para outra coisa, e o Grub ainda carregado, mesmo tendo instalado o rEFInd.
  6. A única maneira pela qual eu poderia obter o que eu queria era o seguinte:

  7. Mova o fwbootmgr.efi para seu diretório pai; rEFInd ainda vai encontrá-lo, e o Windows não vai reclamar que você o renomeou.

  8. Renomeie o grubx64.efi para rfgrubx64.efi ou algo mais reconhecível.
  9. Copie rEFInd de / EFI / refind para / EFI / boot, renomeie /EFI/refind_x64.efi para * .bak e, por último, renomeie /Boot/refind_x64.efi para bootx64.efi. Agora você deve conseguir inicializar o Windows BL ou o GRUB a partir de rEFInd. Eu pretendo atualizar minha instalação do MacOS para o Clover e também carregar o Clover a partir do rEFInd.

(Talvez seja possível usar o Gerenciador de Inicialização do Windows para fazer tudo isso, mas o suporte a EFI do EeasyBCD ainda é uma bagunça na minha experiência. Eu me recuso a tocá-lo novamente por um tempo.)

    
por Rohan Dhruva 14.06.2012 / 06:36
5

Primeiro, você não tem dois ESPs. Um ESP é uma partição com um código de tipo de partição C12A7328-F81F-11D2-BA4B-00A0C93EC93B, que parted identifica como uma partição com o seu conjunto "boot flag". Sua saída indica que apenas / dev / sda3 tem seu "sinalizador de inicialização" configurado, então você tem apenas um ESP - / dev / sda3. Em GPT, as partições podem ter nomes e você tem duas partições com o nome "partição do sistema EFI", mas esses nomes são usados apenas para fins de identificação humana. Assim, meu palpite é que você (ou algum utilitário automático) criou um / dev / sda1 com a intenção de torná-lo um ESP, mas ou houve um erro ao definir seu código de tipo de partição ou algum outro utilitário alterou incorretamente seu código de tipo C12A7328-F81F-11D2-BA4B-00A0C93EC93B para outra coisa.

Existem várias maneiras de corrigir isso. O mais simples é apenas alterar o nome de / dev / sda1 para evitar confusão. Se você acha que / dev / sda1 não serve, você pode fazer o backup e excluí-lo. Isso vai tirá-lo do caminho e evitar confusão, mas é claro que você terá 273 MB de espaço em disco não utilizado. Alternativamente, você poderia dedicar o espaço para outra finalidade, se necessário, alterando o nome e o código de tipo para evitar confusão. O EFI explicitamente permite múltiplos ESPs, então você pode alterar o código do tipo (configurando o "boot flag" usando parted, por exemplo) e usar os dois ESPs; mas isso pode ser confuso.

Provavelmente, esse problema não está relacionado à sua incapacidade de inicializar o Linux, já que parece que todos os arquivos relevantes estão em / dev / sda3. Várias razões possíveis para este problema me ocorrem:

  • Pode ser que você tenha digitado algo errado no seu comando efibootmgr. Não vejo nenhum erro de digitação óbvio, mas se o binário do GRUB não estiver localizado onde você especificou, o comando não funcionará. As opções "--gpt" e "--write-signature" são quase certamente desnecessárias, e podem estar causando problemas, mas provavelmente não são.
  • Seu firmware pode ter um bug que faz com que os efeitos do comando efibootmgr sejam temporários. Tente reinicializar e digite "sudo efibootmgr -v" para ver se a entrada criada sobreviveu a uma reinicialização.
  • Seu firmware pode ter um bug que faz com que a variável de ordem de inicialização seja ignorada. Eu tenho uma placa-mãe assim; Ele é inicializado na ordem em que as entradas de inicialização são criadas, em vez da ordem em que são especificadas pela variável BootOrder. Para contornar esse bug, você teria que excluir todas as entradas e recriá-las na ordem de inicialização que deseja usar.
  • Seu binário grubx64.efi pode ser danificado de tal forma que o firmware se recusa a iniciá-lo, e assim ele passa para o próximo item na ordem de inicialização.

Você pode tentar ajustar seu comando efibootmgr, localizar um novo binário ou algo assim para testar essas possibilidades. Se tudo mais falhar, recomendo que você faça o seguinte:

  1. Exclua todas as entradas de inicialização usando efibootmgr ou seu firmware (se ele fornecer uma interface para fazer isso).
  2. Copie grubx64.efi para EFI / Boot / bootx64.efi no ESP.
  3. Se você reiniciar o Windows, renomeie EFI / Microsoft / Boot / bootmgfw.efi para EFI / Microsoft / bootmgfw.efi.

Isso deve obter a inicialização do GRUB usando o nome padrão do gerenciador de inicialização (EFI / Boot / bootx64.efi). Um problema com isso é que o GRUB pode não ter uma entrada em funcionamento para o Windows. Você provavelmente pode criar um manualmente; uma entrada como esta deve funcionar:

menuentry "Windows 7" {
    set root='(hd0,gpt3)'
    chainloader /EFI/Microsoft/bootmgfw.efi
}

Como alternativa, você pode instalar rEFIt ou rEFInd como EFI / Boot / bootx64.efi. Observe que os binários rEFIt disponíveis em seu site não funcionarão em PCs baseados em UEFI; você precisará usar a versão nos repositórios do Ubuntu. rEFInd é uma bifurcação de rEFIt com inúmeras correções de bugs e atualizações, incluindo melhor suporte a UEFI. (O rEFIt parece ter sido abandonado há cerca de dois anos.) Assim, recomendo usar o rEFInd ao invés do rEFIt - mas sou o mantenedor do rEFInd, então não sou um observador independente nesse quesito. Infelizmente, o AFAIK rEFInd não está (ainda) incluído nos repositórios do Ubuntu, então você terá que baixar e instalar manualmente.

    
por Rod Smith 13.06.2012 / 19:24
4

Mesma posição inicial aqui em uma nova série sony vaio e. Obrigado Rod pela sua resposta.

Apenas no caso de alguém precisar de um passo a passo, isso é o que funcionou para mim:

Instalado o ubuntu 12.04 do USB ao lado do win7.

montagem / dev / sda3 da sessão ao vivo

  • copie EFI / ubuntu / grubx64.efi para EFI / Boot /
  • renomeie EFI / Boot / bootx64.efi para bootx64.efi.old
  • renomeie EFI / Boot / grubx64.efi para bootx64.efi

agora ele é inicializado diretamente no grub2, mas sem a entrada win7

após o carregamento do ubuntu eu editei

/etc/grub.d/40_custom

adicionando

menuentry "Windows 7" {
    set root='(hd0,gpt3)'
    chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}

e depois

sudo update-grub

tudo funciona bem

    
por michote 28.06.2012 / 11:07
1

Sugiro duas alternativas diferentes:

  1. Não sobrescreva o windows mbr, mas use-o para iniciar o grub

  2. altere as configurações da bios ( f2 ou f3 na inicialização) nas opções de inicialização do UEFI para o LEGACY, então ele normalmente iniciará o último sistema instalado como sempre

por Cardu 02.11.2012 / 15:34
0
  1. Execute Reparo de inicialização de um liveCD / liveUSB
  2. Clique no botão Recommended Repair . (isso instalará automaticamente os parâmetros corretos para o grub-efi, incluindo os parâmetros do SecureBoot, se necessário, e renomear os arquivos EFI, caso o firmware UEFI esteja bloqueado nos arquivos do Windows). Indique o URL que aparecerá se houver algum problema.

    
por LovinBuntu 28.11.2012 / 09:08

Tags