Ist es möglich, Windows 8.1 ohne eigenen Bootmanager zu starten?

10

Ich habe versucht, eine einfachere Methode zum Installieren von Windows- und Linux-Dual-Booten auf meinem Laptop zu finden, nicht unbedingt in dieser Reihenfolge. Im Allgemeinen müssen wir zuerst Windows und dann Linux installieren und GRUB erlauben, mit Windows umzugehen.

Ich versuche also, einen Weg zu finden, um diesen lästigen Installationsprozess (Windows) zu umgehen und einfach ein Image zu verwenden, um es direkt auf mein Laufwerk zu kopieren. Dies würde es mir auch ermöglichen, meinen Bootmanager (GRUB) beizubehalten. (Nicht, dass ich es später nicht wiederherstellen kann, aber es ist eine Microsoft-Richtlinie, die monopolisiert werden muss. In diesem Fall wird die Existenz anderer Boot-Manager im System geleugnet.)

Ich habe zuerst eine legale Kopie von Windows 8.1 erhalten und diese dann mit VirtualBox auf einer virtuellen Maschine installiert. Anschließend habe ich eine NTFS-Partition auf meiner GPT-partitionierten Festplatte erstellt und den Inhalt der Windows-Partition vom .vdi-Image auf die neu erstellte Partition kopiert.

Natürlich funktioniert es noch nicht. Ich weiß nicht, wie ich bootmgr ersetzen soll. Es gibt

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

weil es diese Datei von der anderen Partition, die zum Booten, zur Systemwiederherstellung usw. verwendet wird, nicht finden kann.

Jetzt habe ich gelesen, dass bootmgr schließlich winload.exe ausführt, um Windows hochzufahren. Ich habe keine Ahnung, was ich als nächstes tun soll.

Ich denke, es sollte theoretisch funktionieren, da ich alle Dateien habe, die zum Ausführen von Windows erforderlich sind. Ich denke auch, dass ich nicht der einzige sein sollte, der daran gedacht hat, und daher kann mir hier etwas sehr Grundlegendes fehlen. Vielleicht ist es schon fertig?

Ich habe keine Ahnung, wie das Booten funktioniert. Was ich verstanden habe, ist, dass Sie beim Dual-Boot von Windows und Linux den Windows-Bootloader mit Linux verketten. Ich versuche also, den Windows-Bootloader irgendwie loszuwerden.

BEARBEITEN

Ich habe mir die Binärdateien angesehen bootmgrund \Boot\BCD. bootmgrLiest die BCD-Datei und listet Ihre Optionen auf, unter denen Sie zum Booten auswählen können.

Informationen wie das Ausführen befinden winload.exesich also in der BCD-Datei. Jetzt denke ich, dass bootmgrselbst von syslinux mit dem chain.c32Modul ausgeführt wird. Ich versuche, den Windows-Bootloader irgendwie auszuführen, dh winload.exedirekt von Syslinux (falls möglich), oder ihn bootmgrso zu ändern , dass er sich winload.exeselbst ausführt (dessen Pfad direkt in der bootmgrausführbaren Datei liegt), ohne nach BCD oder etwas anderem zu suchen.

Der Ruhezustand (für den ein anderes Verfahren erforderlich ist) ist mir in diesem Schritt nicht wichtig.

Bearbeiten Sie Ihre Frage, um uns den Firmware-Typ und (falls EFI) mitzuteilen, ob Sie das Kompatibilitäts-Support-Modul im Firmware-Setup aktiviert haben

Meine Firmware ist EFI (mit aktiviertem CSM) und ich starte normalerweise mit GRUB in Arch Linux. Ich habe entdeckt , dass , bootmgrführt eine System32\winload.exeauf Legacy - Systemen und System32\winload.efiauf EFI.

Ich habe eine 0.0Idee, was ich von hier aus tun soll. In den letzten 10 Tagen habe ich versucht, Änderungen an BCD vorzunehmen, und ich denke, ich bin dabei, Erfolg zu haben. Das ist aber irrelevant, denn ich möchte wirklich den Windows Boot Manager komplett umgehen.

Wenn Sie eine Idee haben, ob es eine Möglichkeit gibt, dies winload.efiüber die EFI-Shell auszuführen (nur eine Vermutung) oder eine andere Änderung an GRUB, damit Windows im EFI-Modus ohne den Kettenlader gestartet wird.

Ratschläge sind willkommen.

Nachtrag

Die folgenden Forenbeiträge bieten möglicherweise nützliche Einblicke:

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

1.

Die grub4dos können derzeit einen Bootloader (wie NTLDR oder BOOTMGR) kettenladen, da er als Ersatz für den in einem "normalen" Bootsektor enthaltenen Code dienen kann (dh etwa 300 Byte Maschinencode).

Dieser Code legt einfach einige Parameter fest und ruft dann den Loader auf.

Auch das ist (war) gar nicht so einfach zu verstehen und mit unterschiedlichem Code zu replizieren.

Ein NT-Systemlader wie BOOTMGR hat mehr oder weniger in einer einzigen EXE-Datei ein "Real Mode" -Betriebssystem (nicht ganz anders als DOS) und Funktionen / Tools zum Parsen von Nur-Text- und Registry-Hives. Es kann nicht erneut verwendet werden leicht von Grund auf neu geschrieben.

Die Guten @ReactOS arbeiten seit JAHREN daran, das FREELDR (das ein Ersatz für das viel einfachere NTLDR sein soll) zu schreiben (und glauben Sie mir, es gibt unter den ReactOS-Programmierern einige wirklich gute und gute Leute).

Es scheint (aber es ist nicht klar dokumentiert), dass es ihnen gelungen ist, einen Server 2003 mit NTLDR experimentell zu starten.

2.

Mit der Einführung der Unterstützung für (U) EFI hilft BootMgr, den Unterschied zwischen BIOS und (U) EFI zu abstrahieren. Hier sind zum Beispiel zwei Sequenzen:

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

WinLoad erwartet, dass eine bestimmte Umgebung (einschließlich API) vorhanden ist. BootMgr kümmert sich darum, sodass [fast] dasselbe WinLoad-Programm in beiden Umgebungen funktioniert.

Tatsächlich definiert (U) EFI eine Methode zum Speichern und Abrufen von Boot-Parametern, sodass der BCD von BootMgr unabhängig vom BIOS / (U) EFI denselben Zweck abdeckt.

Abgesehen von BIOS- und (U) EFI-Unterschieden können Sie mit BootMgr eine "Startauswahl" treffen, während WinLoad ein bestimmtes Betriebssystem startet, das es zu booten weiß.

Abhängig davon, wie viel von einer Umgebung WinLoad erwartet, kann WinLoad möglicherweise direkt aufgerufen werden. Michael Browns Wimboot ruft das BootMgr PE [1] direkt auf, sodass es WinLoad direkt aufrufen kann, außer dass WinLoad wahrscheinlich mehr von einer Umgebung möchte. Sie könnten es versuchen!

[1] Nicht zu verwechseln mit dem BootMgr, den GRUB4DOS und Syslinux 'chain.c32 aufrufen können. Dieser BootMgr enthält einen Stub, der weiß, wie das eingebettete BootMgr-PE aufgerufen wird.

Osolmaz
quelle
1
Sie haben noch nicht genügend Informationen bereitgestellt. Bearbeiten Sie Ihre Frage, um den Antwortenden mitzuteilen, ob dieses Gerät über eine EFI-Firmware oder eine alte PC / AT-Firmware verfügt. Im Moment sprechen Sie über MBR-Bootstrap-Programme auf EFI-partitionierten Discs. Dies ist (es sei denn, man verwendet eines meiner Programme oder das von H. Peter Anvin) Unsinn und wahrscheinlich nicht die Art und Weise, wie Ihr Computer bootet .
JdeBP
Die von Ihnen beschriebene Richtlinie beendet Microsoft nicht und verhindert, dass jemand Dual-Boot-Systeme installiert
Ramhound,
@ JdeBP Du hast recht. Irgendwann habe ich tatsächlich beides benutzt. Ich habe Syslinux mit der Methode pc \ at verwendet. Dann habe ich GRUB auf einer EFI-Partition installiert. Mein Laptop unterstützt also beide, aber ich hatte jedes Mal das gleiche Ergebnis. Ich werde versuchen, mich in der Zwischenzeit zu informieren. Verstehst du andererseits, was ich erreichen will? Wenn Sie vergessen, was ich zuvor beschrieben habe, können Sie mir vielleicht einen Rat geben, ob es machbar ist oder nicht.
Osolmaz
Ich habe nicht untätig nach dem Firmware-Typ gefragt. Das ist ein wichtiges Datum, das Sie bereitstellen müssen. Ohne sie können die Leute nicht einmal eine richtige Antwort beginnen. Bearbeiten Sie Ihre Frage, um uns den Firmware-Typ und (falls EFI) mitzuteilen, ob Sie das Kompatibilitäts-Support-Modul im Firmware- setupDienstprogramm aktiviert haben .
JdeBP
@JdeBP Ich habe die Frage bearbeitet.
Osolmaz

Antworten:

5

Um Ihre ursprüngliche Frage zu beantworten, nein. Windows kann nicht geladen werden, ohne einen eigenen Bootloader zu durchlaufen (bei UEFI-Installationen bootmgfw.efi). Dies liegt daran, dass Windows erwartet, dass der Bootmanager vorhanden ist UND winload.efi aufruft. Wenn dies nicht der Fall ist, stürzt Windows ab, bis Sie das Problem behoben haben. Dafür gibt es viele Gründe (praktisch und unwissend). Meistens liegt es daran, dass Microsoft den Bootmanager geschrieben hat, um alle Aufgaben zu erledigen (Laden des Betriebssystems, Laden der Wiederherstellungsumgebung, Pseudo-Pre-OS-Umgebung usw.). Der einzige Weg, um derzeit einen Anschein von Vernunft zu erreichen, besteht darin, die Last mit Grub-efi zu verketten.

ChrisR.
quelle
Bevor ich dies als Antwort akzeptiere, muss ich fragen: Ist es so, dass die Aufgabe mühsam zu erreichen wäre, hauptsächlich aufgrund der Menge an Hacking auf niedriger Ebene, die erforderlich ist, um das in den Prozess involvierte Programm zu täuschen? Die Täuschung war, dass Windows immer noch denken würde, dass es mit einem eigenen Bootmanager gestartet wurde, während es in Wirklichkeit etwas anderes war ... Und ich vermute, dass jede Windows-Version einen separaten Aufwand erfordern würde. Aber das macht die Aufgabe nicht unmöglich, nur wirklich schwer, oder?
Osolmaz
3
Ich würde nicht sagen, dass dies (bei der Programmierung) völlig unmöglich ist, aber Sie müssten die Aufrufe, die bootmgfw.efi an das Windows-Betriebssystem tätigt, rückentwickeln. Die Menge an Low-Level-Hacking, die mit der Verbindung verbunden ist, mit der Notwendigkeit, Low-Level-Bootprotokollaufrufe an einen OS-Loader zurückzuentwickeln, ist zeitlich unerschwinglich teuer. Sie müssten Windows nicht nur täuschen, dass bootmgfw.efi vorhanden ist, sondern auch, dass der BCD vorhanden ist und von seinen eigenen Tools erstellt wurde und so weiter.
ChrisR.
2

Sie müssen den Windows EFI-Bootloader zur Liste der Startoptionen in der UEFI-Firmware hinzufügen. Auf diese Weise können Sie wählen, ob:

  1. GRUB2 sollte geladen sein oder
  2. Der Windows Bootloader sollte geladen sein

An dieser Stelle sollten auch zusätzliche Optionen wie das DVD-Laufwerk, externe Festplatten oder der Netzwerkstart sichtbar sein. Der UEFI-Bootloader befindet sich normalerweise auf der Partition \EFI( /boot/efi/). Da Sie gerade das Windows-Festplattenabbild kopiert haben, ohne Windows ordnungsgemäß zu installieren, enthält die EFI-Partition Ihres aktuellen Computers möglicherweise nicht den richtigen Bootloader. Daher ist es notwendig

  1. Kopieren Sie den Bootloader auf die EFI-Partition
  2. Fügen Sie neben GRUB2 Windows als Startoption hinzu

Sie sollten dann auswählen können, welches Betriebssystem gestartet wird, indem Sie einfach die Startreihenfolge im BIOS ändern. Wenn Sie auf meinem Laptop drücken F12, wird ein Menü zur Auswahl des zu ladenden Bootloaders angezeigt.

Für diese Schritte werde ich efibootmgrdie Schritte aus diesem Tutorial verwenden und befolgen :

Sie müssen die entsprechende Datei unter oder unter Linux bootmgfw.efiauf die EFI-Partition kopieren :\EFI\Microsoft\Boot\bootmgfw.efi/boot/efi/Microsoft/Boot/bootmgfw.efi

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

Wo Microsoftist ein Ordner, der die ursprünglichen EFI-Dateien für Ihre Windows-Version enthält.

Anschließend müssen Sie die .efiDatei zu den UEFI-Starteinträgen hinzufügen, indem Sie Folgendes verwenden:

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

wo natürlich müssen Sie ändern /dev/sdaund -p 1auf die richtigen Werte für Ihr Plattengerät und die Partitionsnummer.

Beachten Sie Folgendes, wenn Sie einen Lenovo Laptop haben:

Beachten Sie außerdem, dass mindestens ein Hersteller (Lenovo) Produkte mit einem bekannten Fehler ausliefert, der dazu führt, dass das System den Start verweigert, es sei denn, der Name des Bootloaders lautet entweder "Windows Boot Manager" oder "Red Hat Enterprise Linux".

Das Starten Ihres PCs sollte dann ungefähr Folgendes anzeigen (wenn Sie während des Startvorgangs die entsprechenden Tasten gedrückt halten):

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

(etc.)

und bcdeditunter Windows zeigt dies:

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
quelle
1
Sehr schön erklärt, danke. Vor ein paar Tagen ist es mir gelungen, dasselbe zu tun, aber immer noch eine separate Partition für den Windows EFI-Bootmanager und durch Kettenladen mit GRUB zu verwenden. Jetzt habe ich gelernt, dass ich auch mein ursprüngliches EPS verwenden kann. Anstatt bcdedit zu verwenden, habe ich auch hivex verwendet, um die BCD zu reparieren. Ich beabsichtige, eine Sammlung kostenloser Tools zu schreiben, um BCD-Dateien unter Linux bearbeiten zu können. Aber was ich erreichen will, ist etwas anderes. Wenn bootmgfw.efi winload.efi irgendwie ausführt, warum kann ich winload.efi dann nicht direkt von GRUB ausführen?
Osolmaz
Oh ich verstehe. Sie möchten also das Laden des Windows-Boot-Managers (bootmgfw.efi) überspringen und den Windows-Bootloader (winload.efi) direkt laden, indem Sie den BCD-Systemspeicher auslesen? (Nach den Definitionen von hier .) Das ist interessant, ich habe noch nie von jemandem gehört, der das tut. Was ist Ihre Motivation, warum muss winload.efi direkt geladen werden? Haben Sie auch eine vollständige Kopie des \EFI\Boot\MicrosoftOrdners zum Testen (dort befinden sich einige Dateien)?
Jmiserez
Wenn ich das erreichen würde, müsste ich nicht einmal die BCD lesen, ich könnte einfach einen Eintrag in GRUB für die Partition hinzufügen. (Ich schließe den Ruhezustand und die Systemwiederherstellung hier aus.) Meine Motivation ist, dass es viel einfacher wäre, Windows zu installieren, ohne sich Sorgen machen zu müssen, dass Sie es später reparieren müssen. Nützlich für Systemadministratoren, Batch-Installationen usw. (und für mich ^^). Warum direkt winload.efi laden: Der Umgang mit Windows-Registrierungsdateien mit geschlossenen Spezifikationen (binär) ist viel mühsamer als der Umgang mit Nur-Text-Konfigurationsdateien wie GRUBs. Es ist einfach einfacher, den mittleren Mann zu eliminieren.
Osolmaz
1
Ich verstehe, was du meinst, ja das wäre sehr praktisch. Ich frage mich, ob 1) es Variablen gibt, die bootmgfw.efi beim Start an winload.efi weitergibt, und 2) ob es ein Problem mit dem sicheren Start und einer Art Zertifikatskette geben könnte. Haben Sie herausgefunden, was das inherit {bootloadersettings}im BCD-Laden eigentlich bedeutet?
jmiserez
1
3) Da ich Hivex verwendet habe, kann ich erraten, welchem ​​Objekt das entspricht. Im Bienenstock befindet sich ein "globales" Einstellungsobjekt, auf das alle anderen Objekte verweisen. Was ich sagen kann ist, dass nur zwei Objekte ausreichen, um in Windows zu booten: 1: das Windows Boot Manager-Objekt mit der Konstanten-UUID {9dea862c-5cdd-4e70-acc1-f32b344d4795} 2: das Objekt, das die Partitionsinformationen und den Bootloader-Pfad enthält für Ihr eigentliches Windows-Stammverzeichnis. Am schwierigsten war es, die binäre Datenstruktur zu verstehen, die die Partition spezifizierte. Dies wurde hauptsächlich von wodny gemacht: bitbucket.org/wodny/libbcd/src .
Osolmaz
0

Sie können Installationen in beliebiger Reihenfolge durchführen, z. B. GNU / Linux und dann Windows oder umgekehrt.

Führen Sie einfach die folgenden Schritte aus, nachdem Sie alle Betriebssysteme installiert haben.

  1. Holen Sie sich die "Boot Repair Disk" von hier. http://sourceforge.net/projects/boot-repair-cd/

  2. Erstellen Sie ein bootfähiges Live-USB-Stick (Anweisungen auf pendrivelinux.com).

  3. Oder brennen Sie die ISO-Datei auf eine CD.

  4. Starten Sie dies und befolgen Sie die Anweisungen auf dem Bildschirm. Sie haben einen neu installierten GRUB, der alle von Ihnen installierten Betriebssysteme enthält.

Alles Gute.

Raju Devidas
quelle
1
Mir ist bewusst, was ich will, ist etwas anderes. Ich frage, ob Windows direkt ohne Kettenladen gestartet werden kann.
Osolmaz