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

10

Eu tenho tentado criar uma maneira mais fácil de instalar o Windows e o Linux no meu laptop, não necessariamente nessa ordem. O que geralmente precisamos fazer é instalar o Windows primeiro, depois instalar o linux e permitir que o GRUB cuide do Windows.

Então, o que eu estou tentando conseguir é encontrar uma maneira de contornar esse processo de instalação irritante (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 depois, mas é política da Microsoft monopolizar, neste caso, negar a existência de outros gerenciadores de inicialização no sistema).

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

Claro, isso não funciona ainda. Eu não sei como substituir o bootmgr. Isso dá

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

porque não pode encontrar esse arquivo da outra partição que é usada para inicializar, recuperar o sistema, etc.

Agora, eu li que o bootmgr eventualmente executa o winload.exe para inicializar o Windows. Eu não tenho ideia do que fazer a seguir.

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

Eu não tenho idéia de como o boot funciona. O que eu consegui entender é que quando você dual-boot Windows e Linux, você encadeia o gerenciador de inicialização do Windows para o Linux. Então, o que eu estou tentando alcançar é de alguma forma se livrar do bootloader do Windows.

EDITAR

Eu tenho visto os arquivos binários bootmgr e \Boot\BCD . bootmgr lê o arquivo BCD e lista suas opções, dentre as quais você pode selecionar para inicializar.

Portanto, informações como executar winload.exe residem no arquivo BCD. Agora, acho que bootmgr é executado pelo syslinux usando o módulo chain.c32 . O que eu estou tentando fazer é de alguma forma executar o bootloader do windows, ie winload.exe diretamente do syslinux (se possível), ou modificar bootmgr para que ele execute winload.exe (cujo caminho será diretamente no executável bootmgr ) sem procurar por BCD ou qualquer outra coisa.

A hibernação (que requer um procedimento diferente) não é uma preocupação para mim nesta etapa.

Edit your question to tell us the firmware type, and (if EFI) whether you have enabled the Compatibility Support Module in the firmware's setup

Meu firmware é EFI (com o CSM ativado) e normalmente inicializo no Arch Linux usando o GRUB. Descobri que bootmgr executa System32\winload.exe em sistemas legados e System32\winload.efi em EFI.

Eu tenho 0.0 idé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 eu realmente quero fazer é ignorar completamente o Gerenciador de Inicialização do Windows.

Se você tem alguma idéia se existe uma maneira de executar esse winload.efi do shell EFI (apenas um palpite), ou alguma outra modificação no GRUB para que ele inicialize o Windows no modo EFI sem o chainloader.

Qualquer conselho é bem-vindo.

Adendo

As seguintes postagens no fórum podem fornecer algumas informações úteis:

link

1.

The grub4dos right now can chainload a bootloader (like NTLDR or BOOTMGR) because it can act as a replacement of the code contained in a "normal" bootsector (i.e. something like 300 bytes of machine code).

This code simply sets a few parameters and then calls the loader.

Even that is (was) not easy at all to understand and replicate with different code.

A NT system loader like BOOTMGR has more or less in a single .exe a "real mode" operating system (not entirely unlike DOS) and facilities/tools to parse both plain text and Registry hives, it is not something that can be re-written from scratch easily.

The good guys @ReactOS are working on writing the FREELDR (which aims to be a replacement for the much simpler NTLDR) since YEARS (and believe me there are among the ReactOS programmers some really good and good at it guys).

It seems (but it is not documented clearly) that they managed to boot experimentally a Server 2003 with NTLDR.

2.

With the introduction of support for (U)EFI, BootMgr helps to abstract the difference between BIOS and (U)EFI. For example, here are two sequences:

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

WinLoad expects a certain environment (including API) to be present. BootMgr takes care of this, so [almost] the same WinLoad program will work in either environment.

In fact, (U)EFI defines a method for storing and fetching boot parameters, so BootMgr's BCD covers that same purpose, regardless of BIOS/(U)EFI.

But beyond BIOS and (U)EFI differences, BootMgr lets you make a "boot choice," whereas WinLoad boots a particular operating system that it knows how to boot.

Depending on how much of an environment WinLoad expects to be present, it might be possible to invoke WinLoad directly. Michael Brown's wimboot invokes the BootMgr PE[1] directly, so it could invoke WinLoad directly, except that WinLoad probably wants more of an environment. You could try it!

[1] Not to be confused with the BootMgr which GRUB4DOS and Syslinux' chain.c32 can invoke. That BootMgr includes a stub which knows how to invoke the embedded BootMgr PE.

    
por osolmaz 15.03.2014 / 00:53

3 respostas

5

Para responder à sua pergunta original, não. O Windows não pode ser carregado sem passar pelo próprio bootloader (no caso de instalações com 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 irá falhar até você corrigir o problema. Há 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 (carregando o sistema operacional, carregando o ambiente de recuperação, pseudo pré-ambiente, e etc). A única maneira de obter atualmente qualquer semelhança de sanidade é carregar em cadeia usando o Grub-efi.

    
por 30.03.2014 / 11:54
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 Windows Bootloader 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 corretamente o Windows, a partição EFI da sua máquina atual pode não conter o bootloader adequado. Assim, é necessário

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

Você deve então ser capaz de escolher qual OS é inicializado simplesmente mudando a ordem de inicialização no BIOS. No meu laptop, pressionar F12 abre um menu para selecionar qual bootloader carregar.

Para essas etapas, usarei efibootmgr e siga as etapas de este tutorial :

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

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

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

Em seguida, você precisa adicionar o arquivo .efi às entradas de inicialização da 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/sda e -p 1 para os valores corretos para o dispositivo de disco e o número da partição.

Observe isto se você tiver um laptop Lenovo:

Also note that at least one manufacturer (Lenovo) ships products with a known bug that causes the system to refuse to boot unless the boot loader's name is either "Windows Boot Manager" or "Red Hat Enterprise Linux".

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

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

(etc.)

e bcdedit no Windows mostram 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
    
por 29.03.2014 / 23:50
0

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

Basta fazer o seguinte depois de instalar todos os seus sistemas operacionais.

  1. Obtenha o "Boot Repair Disk" aqui. link

  2. Crie uma pen drive USB inicializável ao vivo dela (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.

Tudo de bom.

    
por 26.03.2014 / 11:07