我们有 UEFI 服务器,并且遇到过需要强制 Windows Server 2008 通过传统 BIOS 方法而不是通过 UEFI 启动的情况。
有没有办法告诉 Windows Server 2008(无论是在安装期间还是安装后)忽略它正在安装到 EFI 机器上的事实,而是安装和使用旧的 BIOS 引导加载程序?
我尝试了一些没有帮助的建议:
在安装 Windows 之前将磁盘格式化为 MBR 分区
不,Windows 拒绝安装:
安装 Windows,将分区迁移到 MBR 磁盘,修复系统
不行,系统修复控制台拒绝加载。它抱怨说无法识别我试图修复的 Windows 版本。
禁用 UEFI
如果我可以禁用 UEFI 并使系统仅支持旧版,我会这么做。但是,我使用的特定系统(IBM HS22、x3690X5)是仅支持 UEFI 且支持旧版的系统。您不能直接禁用它们上的 UEFI。这需要完整的 BIOS 实现。
解决方案!
正如 JdeBP 指出的那样,Windows 用于确定是否使用 EFI/GPT 或 BIOS/MBR 引导加载程序的唯一方法是用于启动安装 CD 的方法。
结合 Weaver 的建议,制作一个没有 0xEF 启动目录项的 .iso 映像(顺便说一下,通过十六进制编辑比重新制作图像要容易得多)让我们得到一个简洁的答案:
强制安装媒体通过 BIOS 启动,而不是通过 UEFI 启动,因为这是 Windows 安装程序用来确定使用哪种启动方案的唯一区别。
答案1
微软不会让你实现你的步骤;所以,你要解决你的目标。
微软错误地混淆了有一个 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 分区的硬盘上。
正如韦弗所指出的,正如微软文档所解释的那样,安装CD-ROM实际上是双启动的。 正如罗德·史密斯进一步解释的那样因此,可以手动构建一个以旧 PC98 方式引导的 Windows NT 6.1 安装盘。然后,Windows NT 6.1 安装程序将允许安装到旧 PC/AT MBR 分区硬盘上。
然而,在缺乏兼容性支持模块就像你说你的系统那样,这不会有任何帮助。您的系统将需要安装在 EFI 系统分区上的 EFI 版本的 Microsoft 启动管理器,因为这是您的固件尝试引导操作系统的方式。但是,当在非 EFI 固件上启动 Windows NT 6.1 安装程序时,它会安装非 EFI 版本的 Microsoft 启动管理器,并且不会创建 EFI 系统分区。这样的安装实际上不会在您的机器上引导,您甚至无法完成安装过程。事实上,由于您缺少 CSM,您甚至无法开始安装过程,因为你甚至无法按照旧的 PC98 方式引导安装光盘。微软不会让你重复完成你的步骤。
因此,请专注于您的目标。您的目标是让客户能够将 Windows Server 2008 部署到具有来自系统映像的 EFI 固件的机器上。因此,您应该向软件供应商提出的正确问题是如何修复旧的/损坏的磁盘映像软件,以便它不会遇到 EFI 分区表问题。
答案2
简而言之,出于几个不同的原因,答案是肯定的,答案也不是。如果 Windows 从 GPT 磁盘启动,则必须从 UEFI 启动。Windows 启动管理器和加载程序无法从本国的UEFI。但是,如果 UEFI 配置为传统 BIOS 启动模式,则可以使用 MBR 磁盘进行启动。这是因为 Windows 启动模式(BIOS 带 MBR 或 UEFI 带 GPT)取决于其调用的环境。
请继续阅读以了解更多技术知识——
物理硬件(或虚拟硬件,但仍然是硬件)固件(BIOS/UEFI)为操作系统启动过程的后续阶段提供初始操作环境(启动相关的数据结构和约定)和固件服务。
BIOS/MBR
对于 BIOS/MBR 启动,第一个可启动磁盘的第一个扇区 - 主引导记录 (LBA 0) 包含少量 x86(16 位 8088)程序集,然后是分区表,然后是签名。BIOS 将此扇区加载到内存中并开始执行 - 一旦 MBR 介入,BIOS 就会放弃其自己的程序代码控制。
http://www.ata-atapi.com/hiwmbr.html
MBR 中的 x86 程序集(大多数 MBR 中的 Intel 8088)解析分区表,搜索活动分区,然后跳转到该分区中的第一个扇区 - 称为卷引导记录。卷引导记录包含一个 x86 程序集 jmp、一个 BIOS 参数块(系统 BIOS 根本不使用,因此名称令人困惑)以及一堆最终从引导卷/分区本身加载操作系统的引导加载程序(在 Windows 环境中为 NTLDR 或 BOOTMGR)的 x86 程序集。
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 进行 GPT 启动。
安装后 - 离线更改磁盘格式(MBR 到 GPT 和 GPT 到 MBR),然后启动到恢复控制台(在适当的 UEFI 或 BIOS 模式下)并使用 bcdboot 和 bcdedit 来直接设置 Windows 启动管理器,可能会有一些有趣的可能性。
更新 2011.09.09
@MikeyB
列出我所理解的选项,但实际上并未提出任何正式建议。
然而,在对 UEFI 进行了更多研究之后(回想一下,我对它没有太多积极的经验)我发现了一些有关 UEFI 启动管理器和对 CD/DVD 启动支持的有趣的信息。
El Torito 启动规范(1995 年发布)至今仍然存在,并且用于可启动 CD/DVD。单个 CD/DVD 可能需要在多个架构上启动 - 尽管 ISO 9660 相当独立于平台,但可执行代码却并非如此。因此,El Torito 启动规范允许多个启动条目/映像。
这些条目/图像包含平台标识,旨在指示某个条目是否适用于 PC、PowerPC 和其他架构,以便架构的 BIOS(或固件)可以选择正确的启动条目。
带有 BIOS 的标准 x86 PC 有一个 El Torito平台标识0x00。支持 UEFI平台标识是 0xEF -- 相当有创意。
标准 x86 PC BIOS 忽略除 0x00 之外的所有其他条目。具有旧版 BIOS 支持的 UEFI 固件(称为兼容性支持模块 (CSM))——虽然能够启动 0x00,但会优先选择目录中的 0xEF 本机启动条目。
Windows 2008、2008 R2 和 7 DVD 介质包含多个 El Torito 映像目录,其中既有 0x00,也有 0xEF。0x00 是默认值,但如果存在 0xEF,UEFI 将忽略它并选择 0xEF 条目 — — 因为它是原生的。
有可能的是——制作媒体仅有的包含 El Torito 启动目录中的首选平台 ID。不要创建多条目目录,而是创建一个具有 0x00 平台 ID 的单条目目录。如果 UEFI 固件实际上支持传统 BIOS 启动,这将强制其选择 0x00 平台 ID 并在 Windows 媒体上启动传统 BIOS 启动条目。
怎么做?
使用振荡这是可能的。以下是人们创建仅 UEFI 媒体以绕过 Apple 的 UEFI 实现中的限制的几个示例。请注意,这与我们尝试做的相反——我们只想创建 BIOS,从目录中省略 UEFI 启动项。
创建仅 BIOS 介质的过程类似,但以下内容的-b
和参数有所变化-p
-bC:\path\to\Etfsboot.com -p0x00
一个很棒的资源可以很好地阐明微软在 Windows 安装介质上选择的疯狂行为,那就是Windows 操作系统的 UEFI 支持和要求文档。
答案3
一种简单的方法是在不支持 EFI 的机器上执行 Windows 基本安装,用映像软件捕获它并将其恢复到真实硬件。
一个不错的选择可能是在虚拟机中构建基础安装。在早期版本(版本 < 6)中,Windows 无法很好地适应从一种硬件类型转移到另一种硬件类型。对于最新版本的 Windows,只要映像支持存储控制器,Windows 就能很好地适应新硬件。
Windows 安装(版本 >=6)磁盘通常包含维姆文件基本上只是操作系统的一个图像。