是否有可能在没有自己的启动管理器的情况下启动 Windows 8.1?

是否有可能在没有自己的启动管理器的情况下启动 Windows 8.1?

我一直在尝试找到一种更简单的方法,在我的笔记本电脑上安装 Windows 和 Linux 双启动,不一定按这个顺序。我们通常要做的是先安装 Windows,然后安装 Linux,并让 GRUB 处理 Windows。

因此,我试图找到一种方法来绕过那个麻烦的安装过程(Windows),只需使用映像直接复制到我的驱动器中即可。这也允许我保留我的启动管理器(GRUB)。(并不是说我无法在之后恢复它,但这是微软的垄断政策,在这种情况下否认系统中存在其他启动管理器)。

我首先获得了 Windows 8.1 的合法副本,然后使用 VirtualBox 将其安装在虚拟机上。然后,我在 GPT 分区硬盘上创建了一个 NTFS 分区,并将 Windows 分区的内容从 .vdi 映像复制到新创建的分区。

当然,它现在还不起作用。我不知道如何替换 bootmgr。它给了

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

因为它无法从用于启动、系统恢复等的其他分区中找到该文件。

现在,我读到 bootmgr 最终会执行 winload.exe 来启动 Windows。我不知道下一步该怎么做。

我认为理论上应该可行,因为我有运行 Windows 所需的所有文件。我还认为应该不只有我一个人想到了这一点,因此我可能遗漏了一些非常基本的东西。也许已经完成了?

我不太清楚启动是如何进行的。我设法理解的是,当你双启动 Windows 和 Linux 时,你会将 Windows 引导加载程序链接到 Linux 的引导加载程序。所以我试图实现的是以某种方式摆脱 Windows 引导加载程序。

编辑

我一直在查看二进制文件bootmgr\Boot\BCDbootmgr读取 BCD 文件并列出您的选项,您可以从中选择启动。

因此,诸如执行之类的信息winload.exe驻留在 BCD 文件中。现在,我认为bootmgr它本身是由 syslinux 使用chain.c32模块执行的。我想做的是以某种方式执行 Windows 引导加载程序,即winload.exe直接从 syslinux 执行(如果可能),或者进行修改,bootmgr以便它winload.exe自己执行(其路径将直接位于bootmgr可执行文件中),而无需查找 BCD 或其他任何内容。

在这一步,我并不关心休眠(需要不同的程序)。

编辑您的问题以告诉我们固件类型,以及(如果是 EFI)您是否在固件设置中启用了兼容性支持模块

我的固件是 EFI(启用了 CSM),我通常使用 GRUB 启动 Arch Linux。我发现它可以在旧系统和EFI 上bootmgr执行。System32\winload.exeSystem32\winload.efi

我知道0.0接下来该怎么做。在过去的 10 天里,我一直在尝试更改 BCD,我想我即将成功。但那无关紧要,因为我真正想做的是完全绕过 Windows 启动管理器。

如果您知道是否有办法winload.efi从 EFI shell 执行该操作(只是猜测),或者对 GRUB 进行其他修改,以便它可以在没有链式加载器的情况下以 EFI 模式启动 Windows。

欢迎提出任何建议。

附录

以下论坛帖子可能会提供一些有用的见解:

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

1.

grub4dos 现在可以链式加载引导加载程序(如 NTLDR 或 BOOTMGR),因为它可以充当“正常”引导扇区中包含的代码的替代品(即 300 字节的机器代码)。

这段代码只是设置了几个参数,然后调用了加载器。

即使这样,用不同的代码来理解和复制也是不容易的。

像 BOOTMGR 这样的 NT 系统加载器在单个 .exe 中或多或少包含“实模式”操作系统(与 DOS 完全不同)和用于解析纯文本和注册表配置单元的设施/工具,它不是可以轻易从头开始重写的东西。

多年以来,好心人 @ReactOS 一直致力于编写 FREELDR(旨在替代更简单的 NTLDR)(相信我,在 ReactOS 程序员中有一些非常优秀的人,并且擅长此道)。

似乎(但没有明确记录)他们设法实验性地启动了带有 NTLDR 的 Server 2003。

2.

通过引入对 (U)EFI 的支持,BootMgr 有助于抽象 BIOS 和 (U)EFI 之间的差异。例如,这里有两个序列:

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

WinLoad 需要特定的环境(包括 API)。BootMgr 会处理这个问题,因此 [几乎] 相同的 WinLoad 程序可以在任一环境中运行。

事实上,(U)EFI 定义了一种存储和获取启动参数的方法,因此 BootMgr 的 BCD 涵盖相同的用途,无论 BIOS/(U)EFI 如何。

但除了 BIOS 和 (U)EFI 差异之外,BootMgr 允许您做出“启动选择”,而 WinLoad 会启动它知道如何启动的特定操作系统。

根据 WinLoad 期望存在的环境程度,可能可以直接调用 WinLoad。Michael Brown 的 wimboot 直接调用 BootMgr PE[1],因此它可以直接调用 WinLoad,但 WinLoad 可能需要更多的环境。你可以试试!

[1] 不要将其与 GRUB4DOS 和 Syslinux 的 chain.c32 可以调用的 BootMgr 相混淆。BootMgr 包含一个知道如何调用嵌入式 BootMgr PE 的存根。

答案1

回答你最初的问题,不行。Windows 无法在不经过其自己的引导加载程序的情况下加载(在 UEFI 安装的情况下,是 bootmgfw.efi)。这是因为 Windows 期望引导管理器存在并且调用 winload.efi。如果这没有发生,那么 Windows 将崩溃,直到你解决问题为止。造成这种情况的原因有很多(实际和无知)。主要是因为 Microsoft 编写了引导管理器来处理所有事情(加载操作系统、加载恢复环境、伪预操作系统环境等)。目前实现任何看似合理的唯一方法是使用 Grub-efi 进行链式加载。

答案2

您需要将 Windows EFI 引导加载程序添加到 UEFI 固件中的引导选项列表中。这样,您将能够选择是否:

  1. 应该加载 GRUB2 或
  2. 应该加载 Windows Bootloader

此时还应显示 DVD 驱动器、外部硬盘驱动器或网络启动等其他选项。UEFI 引导加载程序通常位于\EFI( /boot/efi/) 分区上。由于您刚刚复制了 Windows 硬盘驱动器映像而没有正确安装 Windows,因此当前机器的 EFI 分区可能不包含正确的引导加载程序。因此有必要

  1. 将引导加载程序复制到 EFI 分区
  2. 将 Windows 添加为与 GRUB2 一起的启动选项

然后,您只需更改 BIOS 中的启动顺序,即可选择要启动哪个操作系统。在我的笔记本电脑上,按下F12会弹出一个菜单,供您选择要加载哪个引导加载程序。

对于这些步骤,我将使用efibootmgr并按照本教程

您需要将相应的文件复制bootmgfw.efi到 EFI 分区\EFI\Microsoft\Boot\bootmgfw.efi,或者/boot/efi/Microsoft/Boot/bootmgfw.efi在使用 Linux 时:

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

其中Microsoft是包含适用于您的 Windows 版本的原始 EFI 文件的文件夹。

然后您需要.efi使用以下命令将文件添加到 UEFI 启动项:

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

当然,您需要将/dev/sda其更改-p 1为磁盘设备和分区号的正确值。

如果您有联想笔记本电脑,请注意以下几点:

还要注意,至少有一家制造商(联想)在发布产品时存在已知错误,该错误会导致系统拒绝启动,除非引导加载程序的名称是“Windows Boot Manager”或“Red Hat Enterprise Linux”。

启动您的电脑时应该会显示类似这样的内容(如果您在启动过程中按住相应的键):

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

(etc.)

bcdeditWindows 上显示如下:

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

答案3

您可以按任何顺序进行安装,即先安装 GNU/Linux,然后安装 Windows,反之亦然。

安装所有操作系统后,只需执行以下操作即可。

  1. 从这里获取“启动修复盘”。http://sourceforge.net/projects/boot-repair-cd/

  2. 创建一个可实时启动的 USB 笔式驱动器(pendrivelinux.com 上的说明)

  3. 或者将 ISO 文件刻录到 CD。

  4. 通过此启动并按照屏幕上的说明进行操作。您将获得一个重新安装的 GRUB,其中包含所有已安装的操作系统。

一切顺利。

相关内容