Janelas de inicialização dupla no segundo disco rígido, sistema UEFI / GPT

15

Gostaria de instalar o linux, mas não quero arriscar danificar minha instalação atual do Windows, pois ouvi muitas histórias de horror. Felizmente, tenho um disco rígido extra. Posso instalar o linux nele e depois em duas janelas de inicialização sem precisar modificar a unidade do windows?

Além disso, tenho um "BIOS" UEFI e a unidade do Windows está no formato GPT.

Cachinhos Dourados
fonte

Respostas:

18

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:

  1. Instalei o linux no primeiro disco e agora não consigo inicializar o Windows ou

  2. 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 sucorretamente. Se você conseguir chown: invalid user: ‘yourusername’, você assumiu o último comando literalmente.

Agora você pode navegar /etc/grub.dno 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 ( ntfspode 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-cpara interromper a descoberta quando vir algo curto e simples como ./Windows/Boot/EFI/bootmgfw.efiou ./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-probeou (no, por exemplo, Fedora) grub2-probe. Digite grube 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 insmodcomandos (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-uuidlinha 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-uuidlinha:

    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-mkconfigor 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-mkconfigdiretamente. Caso contrário (incluindo obter um erro mais longo), você acabou de definir a configuração e pode deslizar um pouco.

Para usar grub-mkconfigdiretamente, primeiro precisamos encontrar grub.cfg:

> find /boot -name grub.cfg

Provavelmente será /boot/grub/grub.cfgou /boot/grub2/grub.cfg.

> grub-mkconfig -o /boot/grub/grub.cfg

update-grubirá verificar automaticamente a configuração quanto a erros. grub-mkconfignã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.cfgno 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-mkconfignovamente.

Quando terminar, você pode fechar o editor de texto e digitar exito 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.ddiretório e seu conteúdo para o estado original:

sudo chmod 755 /etc/grub.d/40_custom

Referências

Cachinhos Dourados
fonte
2
O termo tecnicamente correto que você está procurando, que também não é desajeitado, é firmware , que pode se apresentar como BIOS ou UEFI.
Milind R
Infelizmente, o firmware também tem um significado muito mais geral, pois se refere a qualquer software incorporado ao hardware.
Kylotan
na área de trabalho, "cadeia" não é encontrada como um comando durante a inicialização, mas é um carregador de cadeia no arquivo 40_custom que preciso escrever. deixe-me saber se isso é normal
#
Muito agradável! No entanto, quando eu tento isso, minha instalação do Windows 8 não aparecerá como uma entrada no grub2. Corrigi todos os erros de sintaxe e o arquivo grub.cfg é criado sem erros. Observe também que há um erro de sintaxe quando o carregamento de cadeia é mencionado pela primeira vez: chainload $({root})deveria ser chainload (${root})(não consigo editá-lo porque é uma alteração muito pequena).
Sobe 17/05
@sobek Obrigado por isso - corrigido. Se você adicionou algo a um arquivo /etc/grub.de ele não está sendo adicionado quando você gera a configuração, algo estranho está acontecendo. Se você executar grub-mkconfigsem -oo uso padrão, isso pode ajudar a confirmar ou negar que suas adições estão sendo processadas.
goldilocks