Vou usar o termo BIOS abaixo quando me referir a conceitos que são iguais para os sistemas UEFI mais novos e para os sistemas BIOS tradicionais, já que, embora essa seja uma pergunta orientada à UEFI, falar melhor sobre os jibes "BIOS" com, por exemplo, documentação do GRUB e "BIOS / UEFI" é muito desajeitado. O GRUB (na verdade, o GRUB 2 - geralmente é usado de maneira ambígua) é o gerenciador de inicialização instalado pelo linux e usado para inicializar duas vezes o Windows.
Primeiro, uma palavra sobre a ordem das unidades e a ordem de inicialização. Ordem de unidade refere-se à ordem em que as unidades estão fisicamente conectadas ao barramento na placa-mãe (primeira unidade, segunda unidade, etc.); essas informações são relatadas pelo BIOS. Ordem de inicializaçãorefere-se à sequência na qual o BIOS procura uma unidade inicializável. Isso não é necessariamente o mesmo que a ordem da unidade e geralmente é configurável na tela de configuração do BIOS. A ordem das unidades não deve ser configurável ou afetada pela ordem de inicialização, pois isso seria algo muito hostil a ser feito no sistema operacional (mas, em teoria, um BIOS obtuso poderia). Além disso, se você desconectar a primeira unidade, a segunda unidade provavelmente se tornará a primeira. Nós vamos usar UUIDs na configuração do gerenciador de inicialização para tentar evitar problemas como este (os instaladores linux contemporâneos também fazem isso).
A maneira ideal de obter o que você deseja é instalar o linux na segunda unidade em termos de ordem e depois selecioná-lo primeiro em termos de ordem de inicialização usando a configuração UEFI. Uma vantagem adicional disso é que você pode usar a ordem de inicialização do BIOS / UEFI para selecionar a unidade do Windows e ignorar o grub, se desejar. A razão pela qual recomendo o Linux na segunda unidade é porque o GRUB deve "carregar em cadeia" o carregador de inicialização nativo do Windows, e o carregador de inicialização do Windows sempre pressupõe que ele esteja na primeira unidade. Há uma maneira de enganá-lo, no entanto, se você preferir ou precisar o contrário.
Felizmente, você pode simplesmente usar um CD ao vivo ou qualquer outra coisa e fazer isso usando o instalador da GUI. Nem todos os instaladores são criados iguais, no entanto, e se isso estragar tudo e você tiver problemas como:
Instalei o linux no primeiro disco e agora não consigo inicializar o Windows ou
Instalei o linux no segundo disco, mas usando o primeiro disco para o carregador de inicialização, e agora não consigo inicializar nada!
Então continue lendo. No segundo caso, você deve primeiro tentar reinstalar o linux no segundo disco, e dessa vez verifique se é para onde o carregador de inicialização vai. A maneira mais fácil e infalível de fazer isso seria remover temporariamente a unidade do Windows da máquina, pois vamos assumir que não há nada extra instalado nela, independentemente da ordem da unidade.
Depois de instalar o Linux e garantir que ele possa inicializar, conecte novamente a unidade do Windows (se você a removeu - e lembre-se, o ideal é que seja o primeiro em termos de ordem da unidade e a segunda unidade em termos de ordem de inicialização) e prossiga para a próxima etapa.
Acessando a configuração do GRUB
Inicialize o linux, abra um terminal e
> su root
Você será solicitado a senha do root. Deste ponto em diante, você é o superusuário nesse terminal (para verificar, tentar whoami
), portanto, não faça nada estúpido. No entanto, você ainda é um usuário normal na GUI e, como editaremos um arquivo de texto, se você preferir um editor de GUI, teremos que alterar temporariamente a propriedade desse arquivo e o diretório em que ele está:
> chown -R yourusername /etc/grub.d/
Se você receber "Operação não permitida", não o fez su
corretamente. Se você conseguir chown: invalid user: ‘yourusername’
, você assumiu o último comando literalmente.
Agora você pode navegar /etc/grub.d
no seu navegador de arquivos e procurar um arquivo chamado 40_custom
. Deve ficar assim:
#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the 'exec tail' line above.
Se você não conseguir encontrá-lo, digite o seguinte comando no terminal raiz:
> touch /etc/grub.d/40_custom
> chmod 755 /etc/grub.d/40_custom
> chown yourusername /etc/grub.d/40_custom
Abra-o no seu editor de texto, copie e cole a parte acima (iniciando com #!/bin/sh
) e siga para a próxima etapa.
Adicionando uma opção de inicialização do Windows
Copie e cole isso com o editor de texto no final do arquivo:
menuentry "MS Windows" {
insmod part_gpt
insmod search_fs_uuid
insmod ntfs
insmod chain
}
Esta é uma lista de módulos que o GRUB precisará executar ( ntfs
pode ser supérfluo, mas também não deve prejudicar nada). Observe que esta é uma entrada incompleta - precisamos adicionar alguns comandos cruciais.
Localizando o carregador de inicialização do Windows Second Stage
Sua instalação do linux provavelmente montou automaticamente sua partição do Windows e você poderá encontrá-la em um navegador de arquivos. Caso contrário, descubra uma maneira de fazê-lo (se você não tiver certeza de como, faça uma pergunta neste site). Feito isso, precisamos saber o ponto de montagem - isso deve ser óbvio no navegador de arquivos, por exemplo /media/ASDF23SF23/
. Para economizar digitação, vamos colocar isso em uma variável do shell:
win="/whatever/the/path/is"
Não deve haver espaços em nenhum dos lados do sinal de igual. Não inclua nenhum elemento de um caminho do Windows aqui. Isso deve apontar para a pasta de nível superior na partição do Windows. Agora:
cd $win
find . -name bootmgfw.efi
Isso pode levar alguns minutos se você tiver uma grande partição, mas provavelmente a primeira coisa que ela despeja é o que estamos procurando; pode haver outras referências no sistema de arquivos que contenham longas seqüências de anotações do Google - essas não são. Use Ctrl-c
para interromper a descoberta quando vir algo curto e simples como ./Windows/Boot/EFI/bootmgfw.efi
ou ./EFI/HP/boot/bootmgfw.efi
.
Exceto .
no começo, lembre-se desse caminho para mais tarde; você pode copiá-lo para o seu editor de texto em uma linha em branco na parte inferior, pois o usaremos lá. Se você quiser voltar ao diretório anterior agora, use cd -
, embora não importe onde você está no shell daqui em diante.
Definindo os parâmetros corretos
O GRUB precisa encontrar e entregar o processo de inicialização para o segundo estágio do carregador de inicialização do Windows. Já temos o caminho na partição do Windows, mas também precisamos de alguns parâmetros para informar ao GRUB onde está essa partição. Deve haver uma ferramenta instalada no seu sistema chamada grub-probe
ou (no, por exemplo, Fedora) grub2-probe
. Digite grub
e pressione Tabduas ou três vezes; você deve ver uma lista incluindo uma ou outra.
> grub-probe --target=hints_string $win
Você deve ver uma sequência como:
--hint-bios=hd1,msdos1 --hint-efi=hd1,msdos1 --hint-baremetal=ahci1,msdos1
Volte ao editor de texto com a configuração do GRUB e adicione uma linha após todos os insmod
comandos (mas antes da chave de fechamento) para que fique assim:
insmod chain
search --fs-uuid --set=root [the complete "hint bios" string]
}
Não quebre essa linha ou permita que seu editor de texto faça isso. Pode aparecer no visor - uma maneira fácil de saber a diferença é ativar a numeração das linhas. Próximo:
> grub-probe --target=fs_uuid $win
Isso deve retornar uma sequência mais curta de letras, números e traços possíveis, como "123A456B789X6X" ou "b942fb5c-2573-4222-acc8-bbb883f19043". Adicione isso ao final da search --fs-uuid
linha após a sequência de sugestões da bios, separada por um espaço.
Em seguida, se (e somente se) o Windows estiver na segunda unidade em termos de ordem , adicione uma linha após a search --fs-uuid
linha:
drivemap -s hd0 hd1
Este é "o truque" mencionado anteriormente. Observe que não é garantido que funcione, mas não custa tentar.
Finalmente, a última linha deve ser:
chainloader (${root})[the Windows path to the bootloader]
}
Só para ficar claro, por exemplo:
chainloader (${root})/Windows/Boot/EFI/bootmgfw.efi
É isso aí. Salve o arquivo e faça o check-in em um navegador de arquivos para garantir que ele realmente tenha sido salvo e tenha a aparência que deveria.
Adicione a nova opção de menu ao GRUB
Isso é feito com uma ferramenta chamada grub-mkconfig
or grub2-mkconfig
; estará na lista com a qual você encontrou Tabanteriormente. Você também pode ter um comando chamado update-grub
. Para verificar isso, digite-o no terminal raiz. Se você receber "comando não encontrado", precisará usar grub-mkconfig
diretamente. Caso contrário (incluindo obter um erro mais longo), você acabou de definir a configuração e pode deslizar um pouco.
Para usar grub-mkconfig
diretamente, primeiro precisamos encontrar grub.cfg
:
> find /boot -name grub.cfg
Provavelmente será /boot/grub/grub.cfg
ou /boot/grub2/grub.cfg
.
> grub-mkconfig -o /boot/grub/grub.cfg
update-grub
irá verificar automaticamente a configuração quanto a erros. grub-mkconfig
não, mas é importante fazer isso porque é muito mais fácil lidar com eles agora do que quando você tenta inicializar a máquina. Para isso, use grub-script-check
(ou grub2-script-check
):
> grub-script-check /boot/grub/grub.cfg
Se isso (ou update-grub
) produzir um erro indicando um número de linha, esse é o número da linha no grub.cfg, mas você precisará corrigir a parte correspondente em /etc/grub.d/40_custom
(o arquivo no seu editor de texto). Você pode precisar ser root apenas para olhar o arquivo anterior, então tente less /boot/grub/grub.cfg
no terminal, pressione :e digite o número da linha. Você deve ver sua entrada no menu. Encontre o erro de digitação, corrija-o no editor de texto e execute update-grub
-o grub-mkconfig
novamente.
Quando terminar, você pode fechar o editor de texto e digitar exit
o terminal para sair do modo superusuário.
Reinicie!
Quando você chegar ao menu grub, role para baixo rapidamente (antes que o tempo limite expire, geralmente 5 segundos) até a opção "Windows" e teste-a. Se você receber um erro de mensagem de texto no grub, algo está errado com a configuração. Se você receber uma mensagem de erro do Windows , esse problema está entre você e a Microsoft. No entanto, não se preocupe, sua unidade do Windows não foi modificada e você poderá inicializar diretamente nela, colocando-a em primeiro lugar (em termos de ordem de inicialização) através da configuração do BIOS.
Quando você retornar ao linux novamente, retorne a propriedade do /etc/grub.d
diretório e seu conteúdo para o estado original:
sudo chmod 755 /etc/grub.d/40_custom
Referências
chainload $({root})
deveria serchainload (${root})
(não consigo editá-lo porque é uma alteração muito pequena)./etc/grub.d
e ele não está sendo adicionado quando você gera a configuração, algo estranho está acontecendo. Se você executargrub-mkconfig
sem-o
o uso padrão, isso pode ajudar a confirmar ou negar que suas adições estão sendo processadas.