¿Es posible iniciar Windows 8.1 sin su propio gestor de arranque?

10

He estado tratando de encontrar una forma más fácil de instalar el arranque dual de Windows y Linux en mi computadora portátil, no necesariamente en ese orden. Lo que generalmente tenemos que hacer es instalar Windows primero, y luego instalar Linux y permitir que GRUB maneje Windows.

Entonces, lo que estoy tratando de lograr es encontrar una manera de evitar ese molesto proceso de instalación (Windows) y simplemente usar una imagen para copiar directamente en mi disco. Esto también me permitiría conservar mi gestor de arranque (GRUB). (No es que no pueda restaurarlo más tarde, pero es política de Microsoft monopolizar, en este caso negar la existencia de otros gestores de arranque en el sistema).

Primero obtuve una copia legal de Windows 8.1, luego procedí a instalarla en una máquina virtual usando VirtualBox. Luego, creé una partición NTFS en mi disco duro con particiones GPT y copié el contenido de la partición de Windows de la imagen .vdi a la partición recién creada.

Por supuesto, aún no funciona. No sé cómo reemplazar bootmgr. Da

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

porque no puede encontrar ese archivo de la otra partición que se usa para el arranque, la recuperación del sistema, etc.

Ahora, he leído que bootmgr finalmente ejecuta winload.exe para iniciar Windows. No tengo idea de qué hacer a continuación.

Creo que debería funcionar teóricamente porque tengo todos los archivos necesarios para ejecutar Windows. También creo que no debería ser el único que haya pensado en esto, y por lo tanto, puede estar perdiendo algo muy básico aquí. Tal vez ya está hecho?

Tengo poca idea de cómo funciona el arranque. Lo que logré entender es que cuando inicias dual Windows y Linux, encadenas el gestor de arranque de Windows a Linux. Entonces, lo que estoy tratando de lograr es deshacerme de alguna manera del cargador de arranque de Windows.

EDITAR

He estado mirando los archivos binarios bootmgry \Boot\BCD. bootmgrlee el archivo BCD y enumera sus opciones, entre las cuales puede seleccionar iniciar.

Entonces, la información como la ejecución winload.exereside en el archivo BCD. Ahora, creo que bootmgrsyslinux lo ejecuta utilizando el chain.c32módulo. Lo que intento hacer es ejecutar de alguna manera el gestor de arranque de Windows, es decir, winload.exedirectamente desde syslinux (si es posible), o modificarlo bootmgrpara que se ejecute winload.exesolo (cuya ruta estará directamente en el bootmgrejecutable) sin buscar BCD o cualquier otra cosa.

La hibernación (que requiere un procedimiento diferente) no me preocupa en este paso.

Edite su pregunta para decirnos el tipo de firmware y (si es EFI) si ha habilitado el Módulo de soporte de compatibilidad en la configuración del firmware

Mi firmware es EFI (con CSM habilitado), y normalmente inicio en Arch Linux usando GRUB. He descubierto que se bootmgrejecuta System32\winload.exeen sistemas heredados y System32\winload.efien EFI.

Tengo 0.0idea de qué hacer desde aquí. Durante los últimos 10 días, he estado tratando de hacer cambios en BCD y creo que estoy a punto de alcanzar el éxito. Pero eso es irrelevante, porque lo que realmente quiero hacer es evitar el Administrador de arranque de Windows por completo.

Si tiene alguna idea de si hay una manera de ejecutar eso winload.efidesde el shell EFI (solo una suposición), o alguna otra modificación a GRUB para que arranque Windows en modo EFI sin el cargador de cadenas.

Cualquier consejo es bienvenido.

Apéndice

Las siguientes publicaciones en el foro pueden proporcionar información útil:

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

1)

En este momento, grub4dos puede cargar en cadena un cargador de arranque (como NTLDR o BOOTMGR) porque puede actuar como un reemplazo del código contenido en un sector de arranque "normal" (es decir, algo así como 300 bytes de código de máquina).

Este código simplemente establece algunos parámetros y luego llama al cargador.

Incluso eso (no) fue fácil de entender y replicar con código diferente.

Un cargador de sistema NT como BOOTMGR tiene más o menos en un solo .exe un sistema operativo de "modo real" (no del todo distinto de DOS) e instalaciones / herramientas para analizar tanto el texto sin formato como las colmenas del Registro, no es algo que se pueda recuperar escrito desde cero fácilmente.

Los buenos @ReactOS están trabajando en escribir FREELDR (que pretende ser un reemplazo para el NTLDR mucho más simple) desde AÑOS (y créanme que hay entre los programadores de ReactOS algunos muy buenos y buenos en eso).

Se parece (pero no se documenta claramente) que lograron arrancar de forma experimental un servidor 2003 con NTLDR.

2)

Con la introducción del soporte para (U) EFI, BootMgr ayuda a abstraer la diferencia entre BIOS y (U) EFI. Por ejemplo, aquí hay dos secuencias:

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

WinLoad espera que un determinado entorno (incluida la API) esté presente. BootMgr se encarga de esto, por lo que [casi] el mismo programa WinLoad funcionará en cualquier entorno.

De hecho, (U) EFI define un método para almacenar y recuperar parámetros de arranque, por lo que el BCD de BootMgr cubre el mismo propósito, independientemente del BIOS / (U) EFI.

Pero más allá de las diferencias de BIOS y (U) EFI, BootMgr le permite hacer una "elección de inicio", mientras que WinLoad inicia un sistema operativo particular que sabe cómo iniciar.

Según la cantidad de entorno que WinLoad espera que esté presente, es posible invocar WinLoad directamente. El wimboot de Michael Brown invoca el BootMgr PE [1] directamente, por lo que podría invocar WinLoad directamente, excepto que WinLoad probablemente quiera más de un entorno. ¡Podrías probarlo!

[1] No debe confundirse con el BootMgr que GRUB4DOS y Syslinux 'chain.c32 pueden invocar. Ese BootMgr incluye un código auxiliar que sabe cómo invocar el BootMgr PE incorporado.

osolmaz
fuente
1
No ha proporcionado suficiente información todavía. Edite su pregunta para informar a los encuestados si esta máquina tiene firmware EFI o firmware antiguo de PC / AT-style. En este momento está hablando de programas de arranque MBR en discos particionados EFI, lo cual es (a menos que uno esté usando uno de mis programas o el de H. Peter Anvin) sin sentido y probablemente no de la manera en que su máquina arranca .
JdeBP
La política que usted describe no sale de Microsoft, sí evita que alguien
use
@JdeBP Tienes razón. En algún momento, en realidad estaba usando ambos. Estaba usando syslinux con el método pc \ at. Luego instalé GRUB en una partición EFI. Entonces, mi computadora portátil es compatible con ambos, pero tuve el mismo resultado cada vez. Intentaré informarme mientras tanto. Por otro lado, ¿entiendes lo que estoy tratando de lograr? Olvidando lo que he descrito antes, tal vez puedas darme un consejo si es factible o no.
osolmaz
No pedí el tipo de firmware de forma ociosa. Ese es un dato vital, que debes proporcionar. Sin él, las personas ni siquiera pueden comenzar una respuesta adecuada. Edite su pregunta para decirnos el tipo de firmware y (si es EFI) si ha habilitado el Módulo de soporte de compatibilidad en la setuputilidad del firmware .
JdeBP
@JdeBP He editado la pregunta.
osolmaz

Respuestas:

5

Para responder a su pregunta original, no. Windows no se puede cargar sin pasar por su propio gestor de arranque (en el caso de las instalaciones UEFI, bootmgfw.efi). Esto se debe a que Windows espera que el gestor de arranque esté allí Y llame a winload.efi. Si eso no sucede, Windows se bloqueará hasta que solucione el problema. Hay muchas razones para esto (práctico e ignorante). Principalmente, es porque Microsoft escribió el gestor de arranque para manejar todas las cosas (cargar el sistema operativo, cargar el entorno de recuperación, entorno pseudo pre-os, etc.). La única forma de lograr actualmente una apariencia de cordura es encadenar la carga usando Grub-efi.

ChrisR.
fuente
Antes de aceptar esto como respuesta, debo preguntar: ¿Es que la tarea sería tediosamente difícil de lograr, principalmente debido a la cantidad de piratería de bajo nivel requerida para engañar cualquier programa involucrado en el proceso; el engaño es que Windows todavía pensaría que se ha arrancado con su propio gestor de arranque, mientras que en realidad era algo más ... Y supongo que cada versión de Windows requeriría un esfuerzo por separado. Pero esto no hace que la tarea sea imposible, solo realmente difícil, ¿verdad?
osolmaz
3
No diría que es completamente imposible (en programación), pero tendrías que aplicar ingeniería inversa a las llamadas que hace bootmgfw.efi al sistema operativo Windows. La cantidad de pirateo de bajo nivel involucrado en la conjunción con la necesidad de realizar ingeniería inversa de llamadas de protocolo de arranque de bajo nivel a un cargador de sistema operativo es prohibitivamente costoso en términos de tiempo. Debería no solo engañar a Windows para que crea que bootmgfw.efi estaba allí, sino que también existe el BCD y que fue creado por sus propias herramientas, etc.
ChrisR.
2

Debe agregar el cargador de arranque EFI de Windows a la lista de opciones de arranque en el firmware UEFI. De esa manera, podrá elegir si:

  1. GRUB2 debe cargarse o
  2. el cargador de arranque de Windows debe cargarse

Las opciones adicionales como la unidad de DVD, los discos duros externos o el arranque en red también deberían estar visibles en ese punto. El gestor de arranque UEFI generalmente reside en la partición \EFI( /boot/efi/). Como acaba de copiar la imagen del disco duro de Windows sin instalar Windows correctamente, es posible que la partición EFI de su máquina actual no contenga el gestor de arranque adecuado. Por lo tanto, es necesario

  1. Copie el gestor de arranque a la partición EFI
  2. Agregue Windows como opción de arranque junto con GRUB2

Entonces debería poder elegir qué sistema operativo se inicia simplemente cambiando el orden de inicio en el BIOS. En mi computadora portátil, al presionar F12aparece un menú para seleccionar qué gestor de arranque cargar.

Para estos pasos, usaré efibootmgry seguiré los pasos de este tutorial :

Deberá copiar el archivo correspondiente bootmgfw.efia la partición EFI en \EFI\Microsoft\Boot\bootmgfw.efi, o /boot/efi/Microsoft/Boot/bootmgfw.eficuando use Linux:

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

donde Microsofthay una carpeta que contiene los archivos EFI originales para su versión de Windows.

Luego debe agregar el .efiarchivo a las entradas de arranque UEFI usando:

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

donde, por supuesto, necesita cambiar /dev/sday -p 1los valores correctos para su dispositivo de disco y número de partición.

Tenga en cuenta esto si tiene una computadora portátil Lenovo:

También tenga en cuenta que al menos un fabricante (Lenovo) envía productos con un error conocido que hace que el sistema se niegue a arrancar a menos que el nombre del gestor de arranque sea "Windows Boot Manager" o "Red Hat Enterprise Linux".

El inicio de su PC debería mostrar algo como esto (si mantiene presionadas las teclas correspondientes durante el proceso de arranque):

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

(etc.)

y bcdediten Windows muestra esto:

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
fuente
1
Muy bien explicado, gracias. Hace unos días, logré hacer lo mismo, pero aún utilizo una partición separada para el administrador de arranque EFI de Windows y mediante la carga en cadena con GRUB. Ahora aprendí que también podía usar mi EPS original. Además, en lugar de usar bcdedit, usé hivex para arreglar el BCD; Tengo la intención de escribir una colección de herramientas gratuitas para poder manipular archivos BCD en Linux. Pero lo que estoy tratando de lograr es algo diferente. Si bootmgfw.efi de alguna manera ejecuta winload.efi, ¿por qué no podría ejecutar winload.efi directamente desde GRUB?
osolmaz
Oh ya veo. Entonces, ¿desea omitir la carga del Administrador de arranque de Windows (bootmgfw.efi) y cargar el cargador de arranque de Windows (winload.efi) directamente leyendo la Tienda de sistemas BCD? (Yendo por las definiciones de aquí .) Eso es interesante, nunca he oído que alguien haga eso. ¿Cuál es su motivación, por qué es necesario cargar winload.efi directamente? Además, ¿tiene una copia completa de la \EFI\Boot\Microsoftcarpeta para probar (hay un par de archivos allí)?
jmiserez
Bueno, si lograra eso, ni siquiera necesitaría leer el BCD, simplemente podría agregar una entrada en GRUB para la partición. (Estoy excluyendo la hibernación y la recuperación del sistema aquí). Mi motivación es que sería mucho más fácil instalar Windows sin preocuparme de que tenga que arreglarlo más tarde. Útil para administradores de sistemas, instalaciones por lotes, etc. (y para mí ^^). En cuanto a por qué cargar directamente winload.efi: tratar con archivos de registro de Windows de especificaciones cerradas (binario) es mucho más tedioso que tratar con archivos de configuración de texto sin formato como GRUB. Es más fácil eliminar al intermediario.
osolmaz
1
Ya veo lo que quieres decir, sí, eso sería muy útil. Me pregunto si 1) hay alguna variable que bootmgfw.efi pasa a winload.efi cuando se inicia, y 2) si podría haber un problema con el arranque seguro y algún tipo de cadena de certificados necesaria. ¿Has descubierto lo que inherit {bootloadersettings}realmente significa en la tienda BCD?
jmiserez
1
3) Como utilicé hivex, puedo adivinar a qué objeto corresponde. Hay un objeto de configuración "global" en la colmena, y todos los demás objetos tienen una referencia a él. Lo que puedo decir es que solo dos objetos son suficientes para arrancar en Windows: 1: el objeto Administrador de arranque de Windows con el uuid constante {9dea862c-5cdd-4e70-acc1-f32b344d4795} 2: el objeto que contiene la información de partición y la ruta del cargador de arranque para su raíz de Windows real. La parte más difícil fue comprender la estructura de datos binarios que especificaba la partición. Esto fue hecho principalmente por wodny: bitbucket.org/wodny/libbcd/src .
osolmaz
0

Puede realizar instalaciones en cualquier orden, es decir, instalar GNU / Linux y luego Windows o viceversa.

Simplemente haga lo siguiente después de haber instalado todos sus sistemas operativos.

  1. Obtenga el "Disco de reparación de arranque" desde aquí. http://sourceforge.net/projects/boot-repair-cd/

  2. Cree un Pen drive USB de arranque en vivo (Instrucciones en pendrivelinux.com)

  3. O grabe el archivo ISO en un CD.

  4. Inicie a través de esto y siga las instrucciones en pantalla. Tendrá un GRUB reinstalado que contiene todos los sistemas operativos instalados.

Todo lo mejor.

Raju Devidas
fuente
1
Soy consciente de eso, lo que quiero es algo diferente. Estoy preguntando si Windows se puede iniciar directamente sin cargar en cadena.
osolmaz