É possível inicializar o Windows 8.1 sem o seu próprio gerenciador de inicialização?

10

Eu tenho tentado encontrar uma maneira mais fácil de instalar o Windows e Linux de inicialização dupla no meu laptop, não necessariamente nessa ordem. O que geralmente precisamos fazer é instalar o Windows primeiro e, em seguida, instalar o linux e permitir que o GRUB manipule o Windows.

Então, o que estou tentando conseguir é encontrar uma maneira de ignorar esse processo de instalação traquina (windows) e apenas usar uma imagem para copiar diretamente na minha unidade. Isso também me permitiria manter meu gerenciador de inicialização (GRUB). (não que eu não possa restaurá-lo posteriormente, mas é política da Microsoft monopolizar, neste caso, negar a existência de outros gerenciadores de inicialização no sistema).

Obtive uma cópia legal do Windows 8.1 e depois instalei-a em uma máquina virtual usando o VirtualBox. Em seguida, criei uma partição NTFS no disco rígido particionado GPT e copiei o conteúdo da partição do Windows da imagem .vdi para a partição recém-criada.

Claro, ainda não funciona. Não sei como substituir o bootmgr. Dá

File: \Boot\BCD
Status: 0xc000000e
Info: The Boot Configuration Data for your PC is missing or contains errors.

porque ele não consegue encontrar o arquivo da outra partição usada para inicialização, recuperação do sistema etc.

Agora, li que o bootmgr finalmente executa o winload.exe para inicializar o Windows. Não tenho idéia do que fazer a seguir.

Acho que deveria funcionar teoricamente porque tenho todos os arquivos necessários para executar o Windows. Também acho que não devo ser o único que pensou nisso e, portanto, posso estar perdendo algo muito básico aqui. Talvez já esteja pronto?

Eu tenho pouca ideia de como a inicialização funciona. O que eu consegui entender é que, quando você inicializa duas vezes o Windows e o Linux, liga o carregador de inicialização do Windows ao Linux. Então, o que estou tentando alcançar é de alguma forma se livrar do gerenciador de inicialização do Windows.

EDITAR

Eu estive olhando os arquivos binários bootmgre \Boot\BCD. bootmgrlê o arquivo BCD e lista suas opções, entre as quais você pode selecionar para inicializar.

Portanto, informações como a execução winload.exeresidem no arquivo BCD. Agora, acho que bootmgrele próprio é executado pelo syslinux usando o chain.c32módulo. O que estou tentando fazer é, de alguma forma, executar o gerenciador de inicialização do Windows, ou seja, winload.exediretamente do syslinux (se possível), ou modificar bootmgrpara que ele se execute winload.exe(cujo caminho estará diretamente no bootmgrexecutável) sem procurar o BCD ou qualquer outra coisa.

A hibernação (que requer um procedimento diferente) não me interessa nesta etapa.

Edite sua pergunta para nos informar o tipo de firmware e (se EFI) se você ativou o Compatibility Support Module na configuração do firmware

Meu firmware é EFI (com CSM ativado) e normalmente inicializo no Arch Linux usando o GRUB. Eu descobri que é bootmgrexecutado System32\winload.exeem sistemas legados e System32\winload.efina EFI.

Eu tenho 0.0idéia do que fazer a partir daqui. Nos últimos 10 dias, tenho tentado fazer alterações no BCD e acho que estou prestes a alcançar o sucesso. Mas isso é irrelevante, porque o que realmente quero fazer é ignorar completamente o Gerenciador de Inicialização do Windows.

Se você tem alguma idéia de se existe uma maneira de executar isso a winload.efipartir do shell EFI (apenas uma suposição) ou alguma outra modificação no GRUB, para que ele inicialize o Windows no modo EFI sem o carregador de cadeia.

Quaisquer conselhos são bem-vindos.

Termo aditivo

As seguintes postagens no fórum podem fornecer algumas dicas úteis:

http://reboot.pro/topic/19371-chainload-directly-to-winloadexe/

1

O grub4dos agora pode carregar um carregador de inicialização em cadeia (como NTLDR ou BOOTMGR) porque pode atuar como uma substituição do código contido em um setor de inicialização "normal" (ou seja, algo como 300 bytes de código de máquina).

Esse código simplesmente define alguns parâmetros e depois chama o carregador.

Mesmo isso (não foi) fácil de entender e replicar com código diferente.

Um carregador de sistema NT como o BOOTMGR possui mais ou menos em um único .exe um sistema operacional "modo real" (não muito diferente do DOS) e recursos / ferramentas para analisar texto simples e seções do Registro, não é algo que possa ser recuperado. escrito do zero facilmente.

Os mocinhos do @ReactOS estão trabalhando para escrever o FREELDR (que visa substituir o NTLDR muito mais simples) desde ANOS (e acredite, existem entre os programadores do ReactOS alguns realmente bons e bons nisso).

Ela parece (mas não está documentado claramente) que conseguiram arrancar experimentalmente um Server 2003 com NTLDR.

2)

Com a introdução do suporte para (U) EFI, o BootMgr ajuda a abstrair a diferença entre BIOS e (U) EFI. Por exemplo, aqui estão duas sequências:

BIOS (PCAT) -> BootMgr { BootMgr stub -> embedded BootMgr.exe } -> WinLoad.exe -> Windows
64-bit (U)EFI -> BootMgFw.efi -> BootMgr.efi -> WinLoad.efi -> Windows

O WinLoad espera que um determinado ambiente (incluindo API) esteja presente. O BootMgr cuida disso, portanto [quase] o mesmo programa WinLoad funcionará em qualquer ambiente.

De fato, o (U) EFI define um método para armazenar e buscar parâmetros de inicialização, portanto, o BCD do BootMgr cobre o mesmo objetivo, independentemente do BIOS / (U) EFI.

Além das diferenças de BIOS e (U) EFI, o BootMgr permite fazer uma "escolha de inicialização", enquanto o WinLoad inicializa um sistema operacional específico que ele sabe como inicializar.

Dependendo da quantidade de ambiente que o WinLoad espera estar presente, pode ser possível invocar o WinLoad diretamente. O wimboot de Michael Brown invoca o BootMgr PE [1] diretamente, para que possa invocar o WinLoad diretamente, exceto que o WinLoad provavelmente deseja mais um ambiente. Você poderia tentar!

[1] Não deve ser confundido com o BootMgr que GRUB4DOS e Syslinux 'chain.c32 podem invocar. Esse BootMgr inclui um stub que sabe como chamar o BootMgr PE incorporado.

osolmaz
fonte
1
Você não forneceu informações suficientes ainda. Edite sua pergunta para informar aos respondentes se esta máquina possui firmware EFI ou firmware PC / AT antigo. No momento, você está falando sobre programas de inicialização MBR em discos particionados EFI, o que é (a menos que um esteja usando um dos meus programas ou o de H. Peter Anvin), um absurdo e provavelmente não o modo como a sua máquina é inicializada .
JdeBP
A política que você descreve não sair Microsoft faz impedir ninguém de sistemas de inicialização dupla
Ramhound
@JdeBP Você está certo. Em algum momento, eu estava realmente usando os dois. Eu estava usando o syslinux com o método pc \ at. Então instalei o GRUB em uma partição EFI. Então, meu laptop suporta ambos, mas eu sempre tive o mesmo resultado. Enquanto isso, tentarei me informar. Por outro lado, você entende o que estou tentando alcançar? Esquecendo o que descrevi antes, talvez você possa me dar conselhos, se é factível ou não.
Osolmaz 15/03
Não pedi o tipo de firmware à toa. Esse é um dado vital, que você deve fornecer. Sem isso, as pessoas não conseguem nem começar uma resposta adequada. Edite sua pergunta para nos informar o tipo de firmware e (se EFI) se você ativou o Compatibility Support Module no setuputilitário do firmware .
JdeBP
@JdeBP Eu editei a pergunta.
Osolmaz 15/03

Respostas:

5

Para responder à sua pergunta original, não. O Windows não pode ser carregado sem passar por seu próprio gerenciador de inicialização (no caso de instalações UEFI, bootmgfw.efi). Isso ocorre porque o Windows espera que o gerenciador de inicialização esteja lá E chame o winload.efi. Se isso não acontecer, o Windows falhará até você corrigir o problema. Existem muitas razões para isso (prático e ignorante). Principalmente, é porque a Microsoft escreveu o gerenciador de inicialização para lidar com todas as coisas (carregamento do SO, carregamento do ambiente de recuperação, ambiente de pseudo pré-SO e etc.). Atualmente, a única maneira de obter qualquer aparência de sanidade é encadear a carga usando o Grub-efi.

ChrisR.
fonte
Antes de aceitar isso como resposta, devo perguntar: Será que a tarefa seria tediosamente difícil de realizar, principalmente devido à quantidade de hackers de baixo nível necessários para enganar qualquer programa envolvido no processo; o engano é que o Windows ainda pensaria que foi inicializado com seu próprio gerenciador de inicialização, enquanto na realidade era outra coisa ... E acho que todas as versões do Windows exigiriam esforço separado. Mas isso não torna a tarefa impossível, apenas realmente difícil, certo?
Osolmaz 30/03
3
Eu não diria que é totalmente impossível (na programação), mas você teria que fazer engenharia reversa das chamadas que o bootmgfw.efi faz no sistema operacional Windows. A quantidade de hackers de baixo nível envolvidos na conjunção com a necessidade de fazer engenharia reversa de chamadas de protocolo de inicialização de baixo nível para um carregador de SO é proibitivamente cara em termos de tempo. Você precisaria não apenas enganar o Windows para acreditar que o bootmgfw.efi estava lá, mas também que o BCD existe e que foi criado por suas próprias ferramentas e assim por diante.
ChrisR.
2

Você precisa adicionar o carregador de inicialização do Windows EFI à lista de opções de inicialização no firmware UEFI. Dessa forma, você poderá escolher se:

  1. O GRUB2 deve ser carregado ou
  2. o carregador de inicialização do Windows deve ser carregado

Opções adicionais, como a unidade de DVD, discos rígidos externos ou inicialização de rede, também devem estar visíveis nesse ponto. O carregador de inicialização UEFI geralmente reside na partição \EFI( /boot/efi/). Como você acabou de copiar a imagem do disco rígido do Windows sem instalar o Windows corretamente, a partição EFI da sua máquina atual pode não conter o carregador de inicialização adequado. Assim, é necessário

  1. Copie o carregador de inicialização na partição EFI
  2. Adicione o Windows como uma opção de inicialização ao lado do GRUB2

Você poderá escolher qual sistema operacional será inicializado simplesmente alterando a ordem de inicialização do BIOS. No meu laptop, pressionar F12exibe um menu para selecionar qual carregador de inicialização carregar.

Para essas etapas, usarei efibootmgre seguirei as etapas deste tutorial :

Você precisará copiar o arquivo correspondente bootmgfw.efipara a partição EFI em \EFI\Microsoft\Boot\bootmgfw.efiou /boot/efi/Microsoft/Boot/bootmgfw.efiao usar o Linux:

# mkdir -p /boot/efi/EFI/Microsoft
# cp -r Microsoft /boot/efi/EFI/Microsoft

onde Microsofté uma pasta que contém os arquivos EFI originais para sua versão do Windows.

Em seguida, você precisa adicionar o .efiarquivo às entradas de inicialização UEFI usando:

# efibootmgr -c -d /dev/sda -p 1 -l \\EFI\\Microsoft\\Boot\\bootmgfw.efi -L "Windows Boot Manager"

onde é claro que você precisa alterar /dev/sdae -p 1os valores corretos para o seu dispositivo de disco e número da partição.

Observe isso se você tiver um laptop Lenovo:

Observe também que pelo menos um fabricante (Lenovo) envia produtos com um bug conhecido que faz com que o sistema se recuse a inicializar, a menos que o nome do carregador de inicialização seja "Windows Boot Manager" ou "Red Hat Enterprise Linux".

A inicialização do seu PC deve mostrar algo assim (se você pressionar as teclas correspondentes durante o processo de inicialização):

Windows Boot Manager
ubuntu
USB CD
USB FDD
ATAPI CD
ATA HDD2

(etc.)

e bcdeditno Windows mostra isso:

C:\WINDOWS\system32>bcdedit /enum firmware

Firmware Boot Manager
---------------------
identifier              {fwbootmgr}
displayorder            {bootmgr}
                        {bb086763-b111-11e2-bf8e-806e6f6e6963}
                        {8e7fb978-8bc8-11e2-bf2f-806e6f6e6963}
timeout                 0

Windows Boot Manager
--------------------
identifier              {bootmgr}
device                  partition=\Device\HarddiskVolume2
path                    \EFI\Microsoft\Boot\bootmgfw.efi
description             Windows Boot Manager
locale                  en-US
inherit                 {globalsettings}
integrityservices       Enable
default                 {current}
resumeobject            {ec215a09-8bc4-11e2-bf2b-0024d7eb75a4}
displayorder            {current}
toolsdisplayorder       {memdiag}
timeout                 2

(...)

Firmware Application (101fffff)
-------------------------------
identifier              {bb086763-b111-11e2-bf8e-806e6f6e6963}
device                  partition=\Device\HarddiskVolume2
path                    \EFI\ubuntu\grubx64.efi
description             ubuntu
jmiserez
fonte
1
Muito bem explicado, obrigado. Poucos dias atrás, consegui fazer a mesma coisa, mas ainda usando uma partição separada para o gerenciador de inicialização do Windows EFI e através do carregamento em cadeia com o GRUB. Agora eu aprendi que também poderia usar meu EPS original. Além disso, em vez de usar o bcdedit, usei o hivex para corrigir o BCD; Pretendo escrever uma coleção de ferramentas gratuitas para poder manipular arquivos BCD no linux. Mas o que estou tentando alcançar é algo diferente. Se o bootmgfw.efi de alguma forma executa o winload.efi, por que eu não seria capaz de executar o winload.efi diretamente do GRUB?
Osolmaz 30/03
Ah eu vejo. Então, você deseja pular o carregamento do Windows Boot Manager (bootmgfw.efi) e carregar o Windows Bootloader (winload.efi) diretamente lendo a BCD System Store? (Seguindo as definições daqui .) Isso é interessante, nunca ouvi falar de alguém fazendo isso. Qual é a sua motivação, por que é necessário carregar diretamente o winload.efi? Além disso, você tem uma cópia completa da \EFI\Boot\Microsoftpasta para teste (existem alguns arquivos lá)?
jmiserez
Bem, se eu conseguisse isso, nem precisaria ler o BCD, poderia apenas adicionar uma entrada no GRUB para a partição. (Estou excluindo a hibernação e a recuperação do sistema aqui). Minha motivação é que seria muito mais fácil instalar o Windows sem se preocupar que você precisará corrigi-lo mais tarde. Útil para administradores de sistemas, instalações em lote e assim por diante (e para mim ^^). Por que carregar diretamente o winload.efi: lidar com arquivos de registro do Windows de especificação fechada (binário) é muito mais entediante do que lidar com arquivos de configuração de texto sem formatação, como o GRUB. É apenas mais fácil eliminar o intermediário.
Osolmaz 30/03
1
Entendo o que você quer dizer, sim, isso seria muito útil. Gostaria de saber se 1) existem variáveis ​​que o bootmgfw.efi passa para o winload.efi quando é iniciado e 2) se pode haver um problema com a inicialização segura e algum tipo de cadeia de certificados necessária. Você descobriu o que inherit {bootloadersettings}realmente significa na loja BCD?
jmiserez
1
3) Desde que usei o hivex, posso adivinhar a qual objeto corresponde. Há um objeto de configurações "globais" na seção, e todos os outros objetos têm uma referência a ele. O que posso dizer é que apenas dois objetos são suficientes para inicializar no Windows: 1: o objeto Windows Boot Manager com o uuid constante {9dea862c-5cdd-4e70-acc1-f32b344d4795} 2: o objeto que contém as informações da partição e o caminho do carregador de inicialização para a raiz real do Windows. A parte mais difícil foi entender a estrutura de dados binários que especificou a partição. Isto foi feito principalmente por wodny: bitbucket.org/wodny/libbcd/src .
Osolmaz 30/03
0

Você pode fazer instalações em qualquer ordem, ou seja, Instalando o GNU / Linux e, em seguida, Windows ou vice-verso.

Faça o seguinte depois de instalar todos os seus sistemas operacionais.

  1. Obtenha o "Disco de reparo de inicialização" aqui. http://sourceforge.net/projects/boot-repair-cd/

  2. Crie um pen drive USB inicializável ao vivo (Instruções em pendrivelinux.com)

  3. Ou grave o arquivo ISO em um CD.

  4. Inicialize com isso e siga as instruções na tela. Você terá um GRUB reinstalado contendo todos os sistemas operacionais instalados.

Muito bem sucedida.

Raju Devidas
fonte
1
Estou ciente disso, o que eu quero é algo diferente. Estou perguntando se o Windows pode ser inicializado diretamente sem o carregamento em cadeia.
Osolmaz 27/03