Acabo de passar por dificuldades ao tentar fazer um sistema com dual boot com Linux e Windows, e relato aqui esta experiência, junto a um conjunto de dicas sobre como contornar a situação de forma mais eficiente, rápida e indolor. Fazer dual boot Linux-Windows já foi muito mais simples!
Estou voltando a acompanhar o Linux, depois de vários anos afastado do uso. Da lá para cá algumas tecnologias de hardware e firmware foram introduzidas, e é bom estar ciente de como elas podem tornar o processo de dual boot mais complicado. Faz uns 3 ou 4 meses que instalei o Ubuntu 16.04 LTS em um dos meus PCs, que desde então tenho usado como a máquina principal, e agora queria instalar o 17.10 em uma outra máquina na qual ainda uso o Windows 7 por questões de compatibilidade. A forma como sempre preferi fazer dual boot foi instalar o Linux em um HD separado, controlando o boot manager, e não mexer no HD de instalação do Windows. No final eu entrava nos arquivos de configuração do GRUB e adicionava a entrada do Windows. Pois bem, meu erro crucial foi achar que nas novas motherboards, que implementam BIOS com UEFI e Secureboot, este procedimento seria o mesmo. No final das contas, algo que eu costumava fazer em meia hora durou a tarde inteira, entrando pela noite... mas não precisa ser assim, se forem tomados alguns cuidados.
A informação está toda na Web, só que espalhada, vinculada a sistemas específicos (a placa mãe, a distro linux, a versão do Windows), e nem sempre fica claro o que é opcional. Por isso resolvi fazer um conjunto de dicas mais genéricas num formato de checklist, e ressaltando os pontos de atenção essenciais, de modo a orientar o usuário de qualquer desses sistemas, que depois se necessário poderá procurar os detalhes para um modelo específico. Entre esses usuários possivelmente estarei eu no futuro, muita coisa desse blog eu documento para mim mesmo :-). E várias vezes realmente consultei depois. É importante notar que a solução descrita abaixo implica em desabilitar o Secure Boot, e caso haja alguma restrição quanto a isso outra opção deve ser buscada.
Pressuposto: um PC com BIOS mais novo, usando UEFI, um HD com Windows instalado, a partir da versão 7, um HD vazio (ou a ser apagado) para instalar o Linux em dual boot. A instalação do Windows não deve ser mexida e o controle de boot manager irá ficar no Linux.
No meu caso específico foram usados uma placa mãe Asus Sabertooth 990FX R2.0, Windows 7 e Ubuntu 17.10. Você vai precisar também da mídia de instalação do Windows, no meu caso o DVD original do Windows 7, a mídia de instalação do Linux, obviamente, um pendrive vazio para backup das chaves do Secure Boot, e é bom ter também um pendrive live do gparted para corrigir algum erro e recomeçar rapidamente.
Vamos ao checklist:
1. Verifique se o Secure boot está habilitado na sua placa mãe, e se estiver, desabilite. Provavelmente estará, pois costuma vir assim por default. Ao desabilitar o Securom deve-se salvar antes as chaves para poder reabilitar no futuro, para isso deve ser usado o pendrive vazio. No artigo linkado nas fontes deste post, no final, é mostrado o procedimento para o BIOS da Asus semelhante ao meu. O procedimento é semelhante em outras placas mãe, mas caso não seja tão evidente no seu BIOS necessário buscar manual, na Web, etc.
2. Verifique se a partição de instalação do Windows está no modo GPT. Confesso que depois de instalar Windows centenas de vezes nunca tinha prestado atenção nisso. Neste ponto é que será necessária a mídia de instalação do Windows, entrar no modo console (shift+F10 na tela inicial da instalação) e fazer a conversão, se necessário. No meu caso, depois de tudo dar errado e eu passar a procurar os culpados, verifiquei que a partição do Windows já estava no modo GPT, aparece um asterisco na coluna "gpt" ao listar a partição (comando "diskpart", e depois "list disk"). Ao que parece este deve ser o default das instalações atuais, pois como falei, nunca havia considerado isso antes. Provavelmente não será preciso fazer nada, ainda assim, como esta foi a situação de sucesso, considerei importante incluir este item. Se não estiver como GPT devem ser usado os comandos:
select disk <número do disco que aparece no list disk>clean
convert gpt
exit
O mesmo link citado antes também cobre esta parte, mas já reproduzi quase tudo aí acima.
3. Instale o Linux no HD vazio. Aqui algumas precauções devem ser tomadas. Normalmente antes eu instalava o Linux até desconectando o HD do Windows, para garantir que não seria alterado. Mas ao instalar o Ubuntu 17.10 com o HD do Windows 7 plugado, no momento oportuno da instalação ele avisa que existe um outros sistemas não-UEFI (em modo BIOS) e que caso se instale o Ubuntu com boot UEFI poderá haver dificuldade para boot do outro sistema. Isto é uma grande facilidade, e ao ver esta mensagem basta voltar e se certificar de não instalar o Linux em modo UEFI. O resto da instalação é normal. O resultado deste passo é que todos os sistemas instalados no PC não serão com boot UEFI.
4. Verifique se na ordem de boot o HD com o Linux tem prioridade. Basta reiniciar pelo BIOS e verificar, caso necessário alterar a ordem. Como é a instalação do Linux é que vai gerenciar o menu de boot, segundo o pressuposto no início, ele tem que entrar primeiro. Aqui vale um elogio ao Ubuntu, que agora já coloca uma entrada no menu do GRUB para direcionar direto para o Setup do BIOS. Se ao reiniciar a primeira vez depois de instalar o Linux ele entrar no Windows, é por causa desta ordem errada (nem seria preciso dizer que as midias de instalação do Windows e Linux a esta altura já deveriam ter sido removidas...).
5. Verificar a entrada no Windows no menu do GRUB. O Ubuntu agora já detecta e insere o Windows automáticamente, e quando não o faz e por causa de falha em um dos itens acima. Tradicionalmente eu fazia as alterações na mão, e na realidade neste ponto ficou mais fácil, ou seja, tomadas as precauções, o processo acaba não sendo tão desgastante. Se a sua distro não incluir a entrada automaticamente será preciso alterar a configuração de boot editando os arquivos. No GRUB é o arquivo "40_custom" que fica em "\etc\grub.d\", e depois deve-se usar o comando "update-grub". Se o menu do GRUB não estiver aparecendo durante o boot, olhar a configuração dos timeouts no arquivo "\etc\default\grub". Atenção, antes de sair editando arquivos execute uma ou duas inicializações normais (sem erros) do sistema Linux. Comigo só apareceu no segundo boot, e na tentativa final de sucesso não precisei editar os arquivos do GRUB.
Conclusão
Resumindo, a forma de conviver com o Secure boot e UEFI e ainda poder fazer dual boot é evitar os primeiros. Na realidade eu não busquei a alternativa para compatibilizar as duas coisas. Quando os BIOS UEFI foram lançados li vários artigos sobre as vantagens técnicas e de segurança desta nova tecnologia, embora ficando com a impressão que vinha para resolver problemas que eu não tinha. No entanto ao seguir o procedimento acima é importante estar consciente de se estar anulando estas melhorias.
Fontes:
[1] https://www.technorms.com/45538/disable-enable-secure-boot-asus-motherboard-uefi-bios-utility
[2] Artigo na Wikipedia sobre UEFI e Secure Boot
https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface