强制 Windows Server 2008 使用旧版 BIOS 引导加载程序而不是 EFI

Mik*_*eyB 12 windows-server-2008 uefi

我们有 UEFI 服务器,并且遇到过需要强制 Windows Server 2008 通过传统 BIOS 方法而不是通过 UEFI 启动的情况。

有没有办法告诉 Windows Server 2008(在安装过程中或安装后)忽略它正在安装到 EFI 机器上的事实,而是安装和使用旧版 BIOS 引导加载程序?


我尝试了一些没有帮助的建议:

  • 在安装 Windows 之前将磁盘格式化为 MBR 分区

    不,Windows 拒绝安装:在 EFI 系统上,Windows 只能安装到 GPT 磁盘

  • 安装 Windows,将分区迁移到 MBR 磁盘,修复系统

    不,系统修复控制台拒绝加载。它抱怨它无法识别我正在尝试修复的 Windows 版本。

  • 禁用 UEFI

    如果我可以禁用 UEFI 并使系统成为仅遗留系统,我会这样做。但是,我使用的特定系统(IBM HS22、x3690X5)仅支持 UEFI,并提供旧版支持。您不能只是在它们上禁用 UEFI。这将需要一个完整的 BIOS 实现。


解决方案!

正如 JdeBP 指出的那样,Windows 用来确定是使用 EFI/GPT 还是 BIOS/MBR 引导加载程序的唯一方法是用于引导安装 CD 的方法。

将此与 Weaver 的建议相结合,即在没有 0xEF 引导目录条目的情况下制作 .iso 映像(顺便说一下,通过十六进制编辑而不是重新制作映像更容易做到)使我们得到了一个漂亮而简洁的答案:

强制安装媒体通过 BIOS 启动,而不是通过 UEFI 启动,因为这是 Windows Installer 用来确定要使用的启动方案的唯一区别。

Wea*_*ver 7

简而言之,是和否有几个不同的原因。如果 Windows 从 GPT 磁盘启动,则它必须来自 UEFI。Windows 启动管理器和加载程序无法从本机UEFI启动到 MBR 磁盘。但是,如果 UEFI 配置为传统 BIOS 引导模式,则可以使用 MBR 磁盘进行引导。这源于 Windows 启动模式(带有 MBR 的 BIOS 或带有 GPT 的 UEFI)取决于它被调用的环境。

继续阅读一些技术——

物理硬件(或虚拟硬件,但仍然是硬件)固件 (BIOS/UEFI) 提供初始操作环境(与引导相关的数据结构和约定)和可用于操作系统引导过程的后续阶段的固件服务。

BIOS/MBR

在 BIOS/MBR 引导的情况下,第一个可引导磁盘的第一个扇区——主引导记录 (LBA 0) 包含少量 x86(16 位 8088)程序集,然后是分区表,然后是签名)。BIOS 将这个扇区加载到内存中并开始执行——一旦 MBR 介入,BIOS 就会放弃它自己的程序代码控制。

http://mbr.adamsatoms.com/

http://www.ata-atapi.com/hiwmbr.html

MBR 中的 x86 程序集(在大多数 MBR 中为 Intel 8088)解析分区表,搜索活动分区,然后跳转到该分区中的第一个扇区——称为卷引导记录。卷引导记录包含一个 x86 程序集 jmp、一个 BIOS 参数块(系统 BIOS 根本不使用,所以名称很混乱),以及更多 x86 程序集,最终加载操作系统的引导加载程序(Windows 环境中的 NTLDR 或 BOOTMGR) ) 来自启动卷/分区本身。

NTLDR 或 BOOTMGR 将 CPU 翻转到保护模式,查阅它们的引导时配置(分别位于引导卷/分区上的 boot.ini 或 BCD),并加载 NTOSKRNL,其中其余部分是历史记录。

http://technet.microsoft.com/en-us/library/cc781134%28WS.10%29.aspx

http://en.wikipedia.org/wiki/Windows_NT_startup_process

http://homepage.ntlworld.com./jonathan.deboynepollard/FGA/bios-parameter-block.html

UEFI/GPT

首先让我声明,我对 UEFI/GPT 没有太多积极的经验。然而,正如我已经使用它并理解它的操作一样——最大的不同(因为它与我们的对话有关)是可执行控制没有转移到 MBR。

相反,UEFI 固件包含其自己的引导管理器。这个启动管理器扫描磁盘和媒体,——掩盖 GPT 格式化磁盘的保护 MBR,到达 GPT 头,然后潜入 EFI 系统分区 (ESP),在那里它寻找 EFI 可执行程序——应该是直接引导操作系统的操作系统引导加载程序,但是正如我们在最新的 MS 和 Apple EFI 可执行文件中看到的那样,它们实际上是引导管理器,为流程和复杂性添加了另一层。

http://homepage.ntlworld.com/jonathan.deboynepollard/FGA/efi-boot-process.html

http://msdn.microsoft.com/en-us/windows/hardware/gg463525#X-201104111922443

结论/TL; DR

需要注意的是,操作系统的引导管理器和引导加载程序期望在一个预期环境中运行。从可用的固件级服务(BIOS/UEFI 中断)、数据结构(变量、堆栈约定等),甚至磁盘格式化约定。不能在运行时更改——至少不是我理解的方式。

你的选择?

预安装您可以通过在传统 BIOS 引导中使用 BIOS/MBR 或 UEFI 来控制安装,MBR 或 UEFI with GPT。

安装后——离线更改磁盘格式(MBR 到 GPT 和 GPT 到 MBR),然后启动到恢复控制台(在适当的 UEFI 或 BIOS 模式下)并使用 bcdboot 和 bcdedit 获取 Windows,可能会有一些有趣的可能性引导管理器直接设置。

更新 2011.09.09

@MikeyB

按照我的理解列出选项,实际上并没有提出任何正式的建议。

尽管如此,在对 UEFI 进行了更多研究之后(回想一下,我并没有多少积极的经验),我发现了一些关于 UEFI 引导管理器和对 CD/DVD 引导的支持的有趣花絮。

95 年的 El Torito 引导规范今天仍然存在,并与可引导 CD/DVD 一起使用。一张 CD/DVD 可能必须在多个架构上启动——虽然 ISO 9660 与平台无关,但可执行代码不是。因此,El Torito 引导规范允许多个引导条目/映像。

这些条目/映像包含一个Platform ID,旨在指示条目是否适用于 PC、PowerPC 和其他体系结构,以便体系结构的 BIOS(或固件)可以选择正确的引导条目。

带有 BIOS 的标准 x86 PC 的 El Torito平台 ID为 0x00。支持 UEFI 的平台 ID是 0xEF——相当有创意。

标准 x86 PC BIOS 会忽略除 0x00 之外的所有其他条目。具有传统 BIOS 支持(称为兼容性支持模块 (CSM))的 UEFI 固件——虽然能够引导 0x00,但更喜欢目录中的 0xEF 本机引导条目。

Windows 2008、2008 R2 和 7 DVD 媒体包含带有 0x00 和 0xEF 的多图像 El Torito 目录。0x00 是默认值,但如果 0xEF 存在,UEFI 将掩盖它并选择 0xEF 条目——因为它是原生的。

可能的做法是制作包含 El Torito 引导目录中首选平台 ID 的媒体。创建一个带有 0x00 平台 ID 的单条目目录,而不是多条目目录。这应该强制 UEFI 固件(如果它实际上支持传统 BIOS 引导)选择 0x00 平台 ID 并引导 Windows 媒体上的传统 BIOS 引导条目。

怎么做?

使用Oscdimg是可能的。以下是人们创建仅 UEFI 媒体以绕过 Apple 的 UEFI 实施中的限制的几个示例。请注意,这与我们尝试做的相反——我们只想创建一个 BIOS,从目录中删除 UEFI 引导条目。

仅 UEFI(相反)1

仅 UEFI(相反)2

创建仅 BIOS 媒体的过程与对以下内容-b-p参数的更改类似

-bC:\path\to\Etfsboot.com -p0x00
Run Code Online (Sandbox Code Playgroud)

一个很好的资源可以很好地说明 Microsoft 在 Windows 安装媒体上选择的疯狂行为是Windows 操作系统UEFI 支持和要求文档。


Jde*_*eBP 6

微软不会让你一步到位;所以要解决你的目标。

微软错误地将EFI 分区硬盘EFI 固件混为一谈。当然,这显然是错误的。在具有旧的非 EFI 固件的机器上安装 EFI 分区磁盘是很有可能的——而且现在确实变得越来越受欢迎。你实际上——尽管这里的人花了两周时间才从你身上榨取目标而不是步骤——想要相反的东西。您希望在具有 EFI 固件的机器上拥有旧的 PC/AT 式 MBR 分区磁盘。(EFI 固件本身对任何一种分区表格式都没有问题,并且确实是 EFI 规范要求理解这两种格式的。这是 Microsoft 造成的这个错误。)你想要这个是因为其他人的软件无法理解 EFI 分区表。

Microsoft 错误的几个后果之一是,必须从安装介质调用 Windows NT 6.1 安装程序,而该安装介质又是从旧的 PC98 固件引导的,以便它接受将 Windows NT 6.1 安装到光盘的想法使用旧的 PC/AT MBR 分区方案进行分区。不幸的是,如果 Windows NT 安装盘以新的 EFI 方式引导,安装程序会认为有 EFI 固件,因此声明它不能安装到非 EFI 分区的硬盘上。

正如 Weaver 指出的那样,并且正如 Microsoft 文档所解释的那样,安装 CD-ROM 实际上是双引导的。 正如 Rod Smith 进一步解释的那样,因此可以手动构建一张以旧 PC98 方式引导的 Windows NT 6.1 安装光盘。然后,Windows NT 6.1 安装程序将允许安装到旧的 PC/AT MBR 分区硬盘。

但是,在缺少兼容性支持模块的系统上,正如您所说的系统那样,这无济于事。您的系统将需要安装在 EFI 系统分区上的 Microsoft 引导管理器的 EFI 版本,因为这是您的固件尝试引导操作系统的方式。但是当 Windows NT 6.1 安装程序在非 EFI 固件上启动时,它会安装 Microsoft 引导管理器的非 EFI 版本,并且不会创建 EFI 系统分区。这样的安装实际上不会在您的机器上进行引导,您甚至无法完成安装过程。确实,因为您缺乏 CSM,您甚至无法开始安装过程,因为您甚至无法以旧的 PC98 方式引导安装光盘。Microsoft 不会让您完成两次以上的步骤。

因此,请专注于您的目标。您的目标是使您的客户能够将 Windows Server 2008 部署到具有来自系统映像的 EFI 固件的计算机上。因此,您应该问软件供应商的正确问题是如何修复旧的/损坏的磁盘映像软件,以便它不会遇到 EFI 分区表的问题。