无法从iSCSI启动Windows Server 2012

Modified on: Wed, 26 Jun 2019 00:20:02 +0800

我正在研究如何在无盘服务器上安装各种操作系统,以便通过iSCSI运行。服务器没有特殊硬件(没有iSCSI HBA等)

我简单地使用了Windows部署服务,但它似乎与我想要的完全相反:我可能错了,但似乎是为了在系统上进行基于网络的Windows安装,然后从本地启动磁盘,而我想安装Windows,使其从iSCSI磁盘运行,我不在乎是否必须在本地插入安装媒体。因此,我目前的方法不使用WDS。

此测试属于Windows Server 2012,但也可能适用于以前的版本。

简而言之,我正在设置一个空白的iSCSI目标(我已经尝试了几个s / w供应商,虽然目前我正在使用StarWind,但似乎没有太大区别),并且使用PXE链接到gPXE或iPXE进行iSCSI启动(虽然我发现gPXE更容易使用,但我已经尝试了两种,但结果相似。)

当然,如果没有操作系统,启动会失败,但它会通过BIOS磁盘接口挂起LU,这样当启动本地DVD-ROM时,安装程​​序会看到要安装的卷。

我通过下载到gPXE提示符并输入以下命令来完成启动(在iPXE中除了接口#之外):

dhcp net1
set keep-san 1
sanboot iscsi:#.#.#.#::::iqn.xxxxxxxxxxxxxxxxxxx
exit

Windows Server 2012似乎安装并在某些时候重新启动。 iPXE开始从iSCSI启动,并出现“Metro”徽标 - 所以至少有一些东西安装到LU。然而,屏幕然后变成浅蓝色,一条消息短暂闪烁大字,有关“PC”(它实际上是一个机架服务器,但无论如何)遇到问题,但在它消失之前我无法读取它并且计算机是重新启动。

最终我得到一个标题为Windows Boot Manager的文本屏幕,内容如下:

Windows failed to start. A recent hardware or software change might be the
cause. To fix the problem:

  1. Insert your Windows installation disc and restart your computer.
  2. Choose your language settings, and then click "Next."
  3. Click "Repair your computer."

If you do not have this disc, contact your system administrator or computer
manufacturer for assistance.

    File: \Windows\system32\ntoskrnl.exe

    Status: 0xc00000e9

    Info: The operating system couldn't be loaded because the kernel is
          missing or contains errors

那些密切关注的人会意识到这些指令很难有效地遵循,特别是在物理硬件上。 (顺便说一句,我已经尝试过安装到物理机和虚拟机上,结果相似。)

我猜这里发生的事情是Windows 2012得到了它因为iPXE挂起中断13h(BIOS磁盘服务),但是一旦系统启动足够远以切换到保护模式驱动程序,启动是因为没有硬盘可以读取和/或Windows的iSCSI启动器失败而被粗暴地中断。

我正在尝试的iPXE是1.0.0+(3fcb),我试过的gPXE是1.0.1。

是否有可能让Server 2012在没有硬件HBA的情况下运行iSCSI,如果是这样,我可能做错了什么?

作者:,Kevin

最佳答案

(我的初步回答是不成熟的。正如所承诺的那样,我在完成所有工作后重写了它。)

首先,我发现一般来说,iSCSI-boot-enabled软件是半生不熟的,而且涉及的不同系统的互操作性非常差。出于这个原因我推荐使用基于硬件的解决方案,例如iSCSI HBA。如果可能的话。据说我会在这里讲述我的经验以防万一。

总结一下我发现的内容(我假设您已经为PXE和iSCSI目标设置了DHCP和TFTP,并且已经链接到gPXE或iPXE):

  • gPXE和iPXE 从不将多个NIC写入iBFT(iSCSI Boot Firmware Table),这可能会影响Windows Server。我已在此处的单独问题中详细讨论了此问题。

  • 除了上述设计限制外,gPXE还存在一个实际错误,同样会影响具有多个网络端口的系统。我将在下面解释。为了避免这个错误,我使用了gPXE的“UNDI only”构建。这可以防止gPXE直接访问NIC,并使其使用NIC的PXE加载程序提供的API。这使得gPXE认为只有一个网络端口(它被加载的那个),这就避免了这个错误。我不确定这个错误是否存在于较新的iPXE版本中。

  • 我最初对gPXE / iPXE中的keep-san选项感到困惑。仅当引导失败时,keep-san标志才会影响gPXE的行为 。因此,只有在安装开始时的第一次启动时才需要此选项。

  • Windows Server(至少2012年,可能还有其他人)显然不能容忍将提供系统磁盘的iSCSI启动器从一个网络端口移动到另一个网络端口。如果Windows是从与安装它的网络端口不同的网络端口上的启动器引导的,则Windows将在引导期间,在切换到MS启动器时崩溃(BSOD和/或重新引导)。

  • Windows Server(2003及更高版本)中存在一个已确认的功能/问题,即使目标位于本地子网上,它也将使用网关(如果已指定)访问目标。如果网关不可用或者没有路由回到同一端口,则在切换到MS启动器时启动将失败。 如果不需要,请确保DHCP没有给出网关设置。

我上面提到的gPXE错误涉及iBFT(iSCSI Boot Firmware Table)。这是一个由预启动系统放入内存的对象,该系统包含有关NIC,iSCSI启动器和用作系统磁盘的iSCSI目标的信息。一旦切换到保护模式,操作系统就会使用此信息继续启动。格式指定为此处

怀疑信息gPXE中的问题是放在iBFT中,我编写了一个引导扇区,它将iBFT的内容转储到屏幕上。使用这个我发现gPXE写的数据在某些情况下是错误的。

如上所述,gPXE只将一条NIC记录写入iBFT,但在某些情况下,写入该NIC记录的信息会混乱。 MAC地址和PCI地址将对应一个NIC,但本地IP和网关地址将对应另一个。如果SAN不在第一个NIC上,则最有可能发生这种情况。

如果gPXE自动启动,则会写入错误的iBFT信息,但是当从gPXE的命令提示符启动时,根据输入的命令的确切顺序,可能会写入正确的信息。如果它的NIC已被更改(即使给出了正确的iBFT),Windows会出现与此错误导致的症状相同的事实,并且您可以看到我撕裂头发的原因。

顺便说一下,在我最初的问题中,我曾认为它适用于Server 2008 R2但不适用于Server 2012.(我正在编辑它,因为它具有误导性。)我怀疑它们的基本行为实际上没有区别不同的结果归因于上述问题的微妙之处以及我测试中的微小变化。

作者:Community,Kevin

相关问答

添加新评论