Question Est-il possible de démarrer Windows 8.1 sans son propre gestionnaire de démarrage?


J'ai essayé de trouver un moyen plus facile d'installer le double amorçage Windows et Linux sur mon ordinateur portable, pas nécessairement dans cet ordre. Ce que nous devons généralement faire, c’est d’installer d’abord Windows, puis d’installer linux et d’autoriser GRUB à gérer Windows.

Donc, ce que j'essaie de faire, c'est de trouver un moyen de contourner ce processus d'installation embêtant (Windows) et d'utiliser simplement une image pour copier directement dans mon lecteur. Cela me permettrait également de conserver mon gestionnaire de démarrage (GRUB). (pas que je ne puisse pas le restaurer par la suite, mais la politique de Microsoft est de monopoliser, dans ce cas de nier l'existence d'autres gestionnaires de démarrage dans le système).

J'ai d'abord obtenu une copie légale de Windows 8.1, puis je l'ai installé sur une machine virtuelle en utilisant VirtualBox. Ensuite, j'ai créé une partition NTFS sur mon disque dur partitionné GPT et copié le contenu de la partition Windows de l'image .vdi vers la partition nouvellement créée.

Bien sûr, cela ne fonctionne pas encore. Je ne sais pas comment remplacer bootmgr. Il donne

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

car il ne peut pas trouver ce fichier à partir de l’autre partition utilisée pour le démarrage, la récupération du système, etc.

Maintenant, j'ai lu que bootmgr exécute éventuellement winload.exe pour démarrer Windows. Je n'ai aucune idée de ce qu'il faut faire ensuite.

Je pense que cela devrait fonctionner théoriquement parce que j'ai tous les fichiers requis pour exécuter Windows. Je pense aussi que je ne devrais pas être le seul à avoir pensé à cela, et par conséquent, il se peut que je manque quelque chose de très fondamental ici. Peut-être que c'est déjà fait?

J'ai une petite idée du fonctionnement du démarrage. Ce que j'ai réussi à comprendre, c'est que lorsque vous double-démarrez Windows et Linux, vous installez le bootloader Windows sur Linux. Donc, ce que j'essaie de faire, c'est de se débarrasser du chargeur de démarrage Windows.

MODIFIER

J'ai regardé les fichiers binaires bootmgr et \Boot\BCD. bootmgr lit le fichier BCD et répertorie vos options, parmi lesquelles vous pouvez choisir de démarrer.

Donc, l'information comme exécuter winload.exe réside dans le fichier BCD. Maintenant, je pense bootmgr lui-même est exécuté par syslinux en utilisant le chain.c32 module. Ce que j'essaie de faire, c'est d'exécuter le chargeur de démarrage Windows, c'est-à-dire winload.exe directement depuis syslinux (si possible), ou modifier bootmgr afin qu'il exécute winload.exe lui-même (dont le chemin sera directement dans le bootmgr exécutable) sans chercher de BCD ou autre chose.

Hibernation (qui nécessite une procédure différente) ne me concerne pas à cette étape.

Modifiez votre question pour nous indiquer le type de firmware et (si EFI) si   vous avez activé le module Compatibility Support dans le firmware   installer

Mon firmware est EFI (avec CSM activé) et je démarre normalement sur Arch Linux en utilisant GRUB. J'ai découvert que bootmgr exécute System32\winload.exe sur les systèmes existants, et System32\winload.efi sur EFI.

j'ai 0.0 idée de ce qu'il faut faire d'ici. Au cours des 10 derniers jours, j'ai essayé de modifier BCD et je pense que je vais réussir. Mais ce n'est pas pertinent, car ce que je veux vraiment faire, c'est contourner le gestionnaire de démarrage Windows.

Si vous avez une idée de la possibilité d'exécuter cette opération winload.efi à partir du shell EFI (juste une conjecture), ou une autre modification de GRUB afin qu'il démarre Windows en mode EFI sans le chargeur de chaîne.

Tous les conseils sont les bienvenus.

Addenda

Les publications suivantes du forum pourraient fournir des informations utiles:

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

1.

Les grub4dos peuvent maintenant charger un chargeur de démarrage (comme NTLDR ou   BOOTMGR) car il peut remplacer le code contenu dans   un moteur de démarrage "normal" (quelque chose comme 300 octets de code machine).

Ce code définit simplement quelques paramètres, puis appelle le chargeur.

Même cela (était) pas facile du tout à comprendre et à reproduire avec   code différent.

Un chargeur de système NT comme BOOTMGR a plus ou moins dans un seul fichier .exe un   système d'exploitation "mode réel" (pas complètement différent de DOS) et   installations / outils pour analyser à la fois le texte brut et les ruches du Registre, il est   pas quelque chose qui peut être réécrit facilement à partir de zéro.

Les bons @ReactOS travaillent sur l’écriture du FREELDR (qui vise à   pour remplacer le NTLDR beaucoup plus simple) depuis des années (et   croyez-moi, il y a parmi les programmeurs ReactOS des vraiment bons   et bien les gars).

Il semble (mais il n'est pas clairement documenté) qu'ils ont réussi à   démarrer expérimentalement un serveur 2003 avec NTLDR.

2.

Avec l'introduction de la prise en charge de (U) EFI, BootMgr aide à résumer   la différence entre BIOS et (U) EFI. Par exemple, voici deux   séquences:

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

WinLoad s'attend à ce qu'un certain environnement (y compris l'API) soit présent.   BootMgr s'en charge, donc [presque] le même programme WinLoad sera   travailler dans l'un ou l'autre environnement.

En fait, (U) EFI définit une méthode pour stocker et récupérer le démarrage   paramètres, donc BCD BootMgr couvre le même objectif, indépendamment de   BIOS / (U) EFI.

Mais au-delà des différences BIOS et (U) EFI, BootMgr vous permet de faire un "boot   choix, alors que WinLoad démarre un système d'exploitation particulier qu'il   sait comment démarrer.

En fonction de l’environnement que WinLoad attend,   il est possible d'invoquer WinLoad directement. Michael Brown   wimboot appelle directement le PE BootMgr [1], il pourrait donc invoquer WinLoad   directement, sauf que WinLoad veut probablement plus d'un environnement.   Vous pouvez l'essayer!

[1] Ne pas confondre avec le BootMgr que GRUB4DOS et Syslinux '   chain.c32 peut invoquer. Ce BootMgr comprend un stub qui sait comment   invoquer le PE BootMgr intégré.


10
2018-03-14 23:53


origine


Vous n'avez pas encore fourni suffisamment d'informations. modifier votre question pour dire aux répondeurs si cette machine a un firmware EFI ou un ancien firmware de style PC / AT. En ce moment, vous parlez de programmes de bootstrap MBR sur des disques partitionnés EFI, ce qui est (à moins d'utiliser l'un de mes programmes ou H. Peter Anvin's absurdités et probablement ne pas  la façon dont votre machine démarre. - JdeBP
La politique que vous décrivez ne quitte pas Microsoft empêche quiconque de systèmes de double démarrage - Ramhound
@JdeBP Vous avez raison À un moment donné, j'utilisais les deux. J'utilisais syslinux avec la méthode pc \ at. Ensuite, j'ai installé GRUB sur une partition EFI. Donc mon ordinateur portable supporte les deux, mais j'ai eu le même résultat à chaque fois. Je vais essayer de m'informer entre-temps. Par contre, comprenez-vous ce que j'essaie de réaliser? Oubliant ce que j'ai décrit précédemment, vous pouvez peut-être me donner des conseils, que ce soit faisable ou non. - osolmaz
Je n'ai pas demandé le type de firmware inutilement. C'est une donnée vitale que vous devez fournir. Sans cela, les gens ne peuvent même pas commencer une réponse appropriée. modifier votre question pour nous indiquer le type de firmware, et (si EFI) si vous avez activé le module Compatibility Support dans le firmware setup utilitaire. - JdeBP
@JdeBP J'ai édité la question. - osolmaz


Réponses:


Pour répondre à votre question initiale, non. Windows ne peut pas être chargé sans passer par son propre chargeur de démarrage (dans le cas des installations UEFI, bootmgfw.efi). C'est parce que Windows s'attend à ce que le gestionnaire de démarrage soit présent ET qu'il appelle winload.efi. Si cela ne se produit pas, Windows se bloquera jusqu'à ce que vous résolviez le problème. Il y a plusieurs raisons à cela (pratique et ignorant). La plupart du temps, c'est parce que Microsoft a écrit le gestionnaire de démarrage pour gérer tout (chargement du système d'exploitation, chargement de l'environnement de récupération, environnement pseudo-pré-os, etc.). La seule façon d’atteindre un semblant d’esprit est de charger la chaîne en utilisant Grub-efi.


5
2018-03-30 09:54



Avant d'accepter cette réponse, je dois demander: est-ce que la tâche serait péniblement difficile à réaliser, principalement en raison de la quantité de piratage de bas niveau requise pour tromper n'importe quel programme impliqué dans le processus; La tromperie étant que Windows penserait toujours qu’il a été démarré avec son propre gestionnaire de démarrage, alors qu’en réalité c’était autre chose… Et je suppose que chaque version de Windows nécessiterait un effort distinct. Mais cela ne rend pas la tâche impossible, juste vraiment difficile, non? - osolmaz
Je ne dirais pas que c'est totalement impossible (en programmation), mais vous devriez désosser les appels que le bootmgfw.efi apporte au système d'exploitation Windows. La quantité de piratage de bas niveau impliquée dans la nécessité de procéder au reverse engineering des appels de protocole de démarrage de bas niveau vers un chargeur de système d'exploitation est extrêmement coûteuse en termes de temps. Vous devrez non seulement tromper Windows en lui faisant croire que bootmgfw.efi était présent, mais aussi que le BCD existe et qu'il a été créé par ses propres outils, etc. - ChrisR.


Vous devez ajouter le chargeur de démarrage Windows EFI à la liste des options de démarrage du microprogramme UEFI. De cette façon, vous pourrez choisir si:

  1. GRUB2 doit être chargé ou
  2. le chargeur de démarrage Windows doit être chargé

Des options supplémentaires telles que le lecteur de DVD, les disques durs externes ou le démarrage réseau doivent également être visibles à ce stade. Le chargeur de démarrage UEFI réside généralement sur le \EFI (/boot/efi/) cloison. Comme vous venez de copier l'image du disque dur Windows sans installer correctement Windows, la partition EFI de votre ordinateur actuel peut ne pas contenir le chargeur de démarrage approprié. Il est donc nécessaire de

  1. Copiez le chargeur de démarrage sur la partition EFI
  2. Ajouter Windows comme option de démarrage avec GRUB2

Vous devriez alors être en mesure de choisir quel système d'exploitation est démarré en modifiant simplement l'ordre de démarrage dans le BIOS. Sur mon ordinateur portable, en appuyant sur F12 ouvre un menu pour sélectionner le chargeur de démarrage à charger.

Pour ces étapes, je vais utiliser efibootmgr et suivez les étapes de ce tutoriel:

Vous devrez copier le fichier correspondant bootmgfw.efi à la partition EFI à \EFI\Microsoft\Boot\bootmgfw.efi, ou /boot/efi/Microsoft/Boot/bootmgfw.efi en utilisant Linux:

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

Microsoft est un dossier contenant les fichiers EFI originaux pour votre version Windows.

Ensuite, vous devez ajouter le .efi fichier aux entrées de démarrage UEFI en utilisant:

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

où bien sûr vous devez changer /dev/sda et -p 1 aux valeurs correctes pour votre périphérique de disque et le numéro de partition.

Notez ceci si vous avez un ordinateur portable Lenovo:

Notez également qu'au moins un fabricant (Lenovo) expédie des produits avec un bogue connu qui provoque le refus du système, à moins que le nom du chargeur de démarrage soit "Gestionnaire de démarrage Windows" ou "Red Hat Enterprise Linux".

Le démarrage de votre PC devrait alors afficher quelque chose comme ceci (si vous maintenez les touches correspondantes enfoncées pendant le processus de démarrage):

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

(etc.)

et bcdedit sur Windows montre ceci:

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

2
2018-03-29 22:50



Très bien expliqué, merci. Il y a quelques jours, j'ai réussi à faire la même chose, mais j'utilisais toujours une partition distincte pour le gestionnaire de démarrage Windows EFI et le chargement en chaîne avec GRUB. Maintenant, j'ai appris que je pouvais aussi utiliser mon EPS original. De plus, au lieu d'utiliser bcdedit, j'ai utilisé hivex pour corriger le BCD; J'ai l'intention d'écrire une collection d'outils gratuits pour pouvoir manipuler des fichiers BCD sous Linux. Mais ce que j'essaie de réaliser est quelque chose de différent. Si bootmgfw.efi exécute en quelque sorte winload.efi, pourquoi ne pourrais-je pas exécuter winload.efi directement à partir de GRUB? - osolmaz
Oh je vois. Donc, vous voulez ignorer le gestionnaire de démarrage Windows (bootmgfw.efi) et charger le chargeur de démarrage Windows (winload.efi) directement en lisant le BCD System Store? (Selon les définitions de ici.) C'est intéressant, je n'ai jamais entendu parler de quelqu'un qui le fait. Quelle est votre motivation, pourquoi est-il nécessaire de charger directement winload.efi? Aussi, avez-vous une copie complète du \EFI\Boot\Microsoft dossier pour tester (il y a quelques fichiers là-bas)? - jmiserez
Eh bien, si je devais y arriver, je n'aurais même pas besoin de lire le BCD, je pourrais simplement ajouter une entrée dans GRUB pour la partition. (J'exclus le hibernation et la récupération du système ici) Ma motivation est la suivante: il serait beaucoup plus facile d'installer Windows sans craindre de devoir le réparer plus tard. Utile pour les administrateurs système, les installations par lots, etc. (et pour moi ^^). En ce qui concerne le chargement direct de winload.efi: traiter les fichiers de registre Windows de spécifications fermées (binary) est beaucoup plus fastidieux que de traiter des fichiers de configuration en texte brut comme ceux de GRUB. Il est juste plus facile d'éliminer l'homme moyen. - osolmaz
Je vois ce que tu veux dire, oui, ce serait très pratique. Je me demande si 1) il y a des variables que bootmgfw.efi transmet à winload.efi quand il est lancé et 2) s'il pourrait y avoir un problème avec le démarrage sécurisé et une sorte de chaîne de certificat nécessaire. Avez-vous trouvé ce que le inherit {bootloadersettings} dans le magasin BCD signifie réellement? - jmiserez
3) Depuis que j'ai utilisé hivex, je peux deviner à quel objet correspond. Il y a un objet de paramètres "global" dans la ruche, et tous les autres objets y ont une référence. Ce que je peux dire, c'est que deux objets suffisent à démarrer dans Windows pour votre racine Windows réelle. La partie la plus difficile était de comprendre la structure de données binaire qui spécifiait la partition. Cela a surtout été fait par Wodny: bitbucket.org/wodny/libbcd/src. - osolmaz


Vous pouvez faire des installations dans n'importe quel ordre, c'est-à-dire installer GNU / Linux puis Windows ou vice-versa.

Procédez comme suit après avoir installé tous vos systèmes d'exploitation.

  1. Obtenez le "disque de réparation de démarrage" à partir d'ici. http: // sourceforge.net/projects/boot-repair-cd/

  2. Créez un lecteur de stylo USB amorçable en direct (Instructions sur pendrivelinux.com)

  3. Ou gravez le fichier ISO sur un CD.

  4. Commencez par ceci et suivez les instructions à l'écran. Vous aurez un GRUB réinstallé contenant tous vos systèmes d'exploitation installés.

Bonne chance.


0
2018-03-26 10:07



Je suis conscient de cela, ce que je veux, c'est quelque chose de différent. Je demande si Windows peut être démarré directement sans chargement en chaîne. - osolmaz