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

我们有UEFI服务器,并且遇到了一种情况,我们需要强制Windows Server 2008通过传统BIOS方法而不是通过UEFI进行引导。

有没有办法告诉Windows Server 2008(无论是在安装还是在安装后)忽略它安装到EFI机器的事实,而是安装和使用传统BIOS引导加载程序?


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

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

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

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

    不,系统修理控制台拒绝加载。 它抱怨说,它不能识别我试图修复的Windows版本。

  • 禁用UEFI

    如果我可以禁用UEFI,并使系统只有遗留,我会。 但是,我使用的特定系统(IBM HS22,x3690X5)仅支持UEFI。 你不能只closures他们的UEFI。 这需要完整的BIOS实现。


解决scheme!

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

与Weaver的build议相结合,制作一个没有0xEF启动目录条目的.iso映像(顺便说一句,通过hex编辑而不是重新制作映像要容易得多),我们得到了一个很好的,简洁的答案:

强制安装介质通过BIOS启动,而不是通过UEFI启动,因为这是Windows Installer用来确定使用哪种启动scheme的唯一区别。

    微软不会让你实现你的脚步; 所以要改变你的目标。

    微软错误地将EFI分区硬盘EFI固件相混淆。 当然,这显然是错误的。 这是很有可能的 – 而且现在越来越需要在具有旧的非EFI固件的计算机上使用EFI分区光盘。 你其实 – 虽然这里花了两个多星期的时间让人们把目标从你身上挤出来,而不是一步一步地想要相反。 您希望在具有EFI固件的计算机上安装旧的PC / AT式MBR分区光盘。 (EFI固件本身对分区表格式没有任何问题,并且EFI规范确实需要理解这两者。这是Microsoft的错误)。而且您需要这样做,因为其他人的软件无法理解EFI分区表。

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

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

    但是,在缺乏兼容性支持模块的系统上,正如您所说的系统所做的那样, 这无济于事 。 您的系统将需要安装在EFI系统分区上的Microsoft启动pipe理器的EFI版本,因为这是您的固件将尝试引导操作系统的方式。 但是,如果在非EFI固件上启动Windows NT 6.1安装程序,则会安装Microsoft的启动pipe理器的非EFI版本,并且不会创buildEFI系统分区。 这样的安装实际上不会引导您的机器,甚至不能完成安装过程。 事实上,由于缺lessCSM,您甚至无法开始安装过程,因为您甚至无法以旧PC98方式引导安装光盘。 微软不会让你实现你的两倍。

    所以请重点关注你的目标。 您的目标是使客户能够将Windows Server 2008部署到系统映像中具有EFI固件的计算机上。 因此,对软件供应商而言,你应该问一个正确的问题,那就是如何修复旧的/损坏的光盘映像软件,以便在EFI分区表上没有问题。

    总之,是和不是由于几个不同的原因。 如果Windows从GPT磁盘启动,则必须来自UEFI。 Windows启动pipe理器和加载程序无法从本机 UEFI启动到MBR磁盘。 但是,如果将UEFIconfiguration为传统BIOS引导模式,则可以使用MBR磁盘进行引导。 这源于Windows引导模式(具有MBR的UEFI或具有GPT的UEFI的BIOS)取决于它所在的环境。

    阅读一点技术 –

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

    BIOS / MBR

    在BIOS / MBR引导的情况下,第一个可引导磁盘的第一个扇区 – 主引导logging(LBA 0)包含一些x86(16位8088)程序集,然后是分区表,然后是签名)。 BIOS将该扇区加载到内存中并开始执行 – 只要MBR卷入,BIOS就放弃自己的程序代码控制。

    http://mbr.adamsatoms.com/

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

    MBR中的x86程序集(大多数MBR中的Intel 8088)会分析分区表,search活动分区并跳转到该分区中的第一个扇区(称为卷引导logging)。 卷引导logging包含一个x86程序集jmp,一个BIOS参数块(根本不使用系统BIOS,所以名字混淆),以及更多x86程序集,最终加载操作系统的引导加载程序(Windows环境中的NTLDR或BOOTMGR )从启动卷/分区本身。

    NTLDR或BOOTMGR将CPU翻转到保护模式,查阅它们的引导时间configuration(引导卷/分区上分别是boot.ini或BCD),然后加载其余为历史logging的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固件包含自己的启动pipe理器。 该引导pipe理器扫描磁盘和介质, – 掩盖GPT格式化磁盘的保护性MBR,到达GPT头,然后潜入EFI系统分区(ESP),在那里查找EFI可执行程序 – 这应该是作为操作系统引导加载程序直接启动操作系统,但正如我们已经看到的最新的MS和苹果EFI可执行文件,他们实际上是启动pipe理器添加另一个层面的过程和复杂性。

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

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

    结论/ TL; DR

    从这个angular度来看,有一个预期的环境,操作系统的引导pipe理器和引导加载程序期望运行。 从固件级可用服务(BIOS / UEFI中断),数据结构(variables,堆栈约定等),甚至磁盘格式化约定。 不能在运行时改变 – 至less不是我理解它的方式。

    你的select?

    在安装之前,您可以使用MBR或带有GPT的UEFI在传统BIOS引导中使用BIOS / MBR或UEFI来控制安装。

    安装后 – 将磁盘格式(从MBR到GPT和GPT到MBR)更改为脱机,然后启动到故障恢复控制台(在适当的UEFI或BIOS模式下)以及使用bcdboot和bcdedit来获取Windows引导pipe理器设置直。

    更新2011.09.09

    @MikeyB

    根据我的理解,列出选项并不真正提出任何正式的build议。

    尽pipe如此,在对UEFI进行了一些更多的研究之后(我记得我没有太多积极的经验),我发现了一些关于UEFI启动pipe理器和支持CD / DVD启动的有趣消息。

    从1995年起,El Torito引导规范仍然在今天,并且与可启动的CD / DVD一起使用。 单个CD / DVD可能需要在多种体系结构上启动 – 而ISO 9660与平台无关,而可执行代码则不是。 因此,El Torito引导规范允许多个启动项/图像。

    这些条目/图像包含一个平台ID ,用于指示一个条目是否适用于PC,PowerPC和其他体系结构,以便架构的BIOS(或固件)可以select正确的引导条目。

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

    标准x86 PC BIOS忽略除0x00之外的所有其他条目。 具有传统BIOS支持的UEFI固件(称为兼容性支持模块(CSM)) – 虽然能够启动0x00,但会优先使用来自目录的0xEF本地启动项。

    Windows 2008,2008 R2和7 DVD介质包含一个带有0x00和0xEF的多图像El Torito目录。 0x00是默认值,但是如果存在0xEF,则UEFI将覆盖它并select0xEF条目 – 因为它是本地的。

    什么是可能的 – 是制作包含El Torito引导目录中的首选平台ID的媒体。 使用0x00平台ID创build单个条目目录,而不是多条目目录。 这应该强制UEFI固件(如果实际上它支持传统BIOS启动)select0x00平台ID,并在Windows媒体上启动传统BIOS启动条目。

    怎么做?

    使用Oscdimg是可能的。 下面是几个人创buildUEFI媒体的例子,以解决在苹果的UEFI实施的限制。 请注意,这与我们正在尝试执行的操作相反 – 我们只想创build一个BIOS,从目录中删除UEFI引导项。

    UEFI Only(相反)1

    UEFI Only(相反)2

    创build仅BIOS介质的过程与对以下内容的-b-p参数的更改类似

     -bC:\path\to\Etfsboot.com -p0x00 

    UEFI对Windows操作系统的支持和要求文档是微软在Windows安装介质上select的疯狂的一个很好的资源。

    一个简单的方法是简单地在不支持EFI的计算机上执行Windows的基本安装,使用您的映像软件捕获它并将其还原到真实硬件。

    在VM中构build基本安装是一个不错的select。 在Windows的早期版本(ver <6)中,不能很好地适应从一种types的硬件移动到另一种types的硬件。 使用最新版本的Windows,只要存储控制器在映像上受支持,Windows就会在适应新硬件方面做得相当不错。

    Windows安装(ver> = 6)磁盘基本上通常包含一个基本上只是操作系统映像的wim文件。