无法从 iSCSI 启动 Windows Server 2012

Kev*_*vin 7 windows iscsi pxe-boot

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

我短暂地使用了 Windows 部署服务,但它似乎与我想要的相反:我可能错了,但它似乎旨在将基于网络的 Windows 安装到系统上,然后从本地磁盘启动,而我想安装 Windows 以便它可以从 iSCSI 磁盘运行,而且我不在乎是否必须在本地插入安装介质。因此,我目前的方法不使用 WDS。

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

简而言之,我正在设置一个空白的 iSCSI 目标(我已经尝试了几个软件供应商,虽然目前我使用的是 StarWind,但它似乎没有太大区别),并使用 PXE 链接到 gPXE 或 iPXE 来做iSCSI 引导(我都试过,结果相似,但我发现 gPXE 更容易使用。)

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

我通过进入 gPXE 提示符并键入以下命令来完成引导(在 iPXE 中除了接口 # 外相同):

dhcp net1
set keep-san 1
sanboot iscsi:#.#.#.#::::iqn.xxxxxxxxxxxxxxxxxxx
exit
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

Kev*_*vin 6

(我最初的回答为时过早。正如所承诺的,我在一切正常后重写了它。)

首先,我发现一般而言,启用 iSCSI 引导的软件是半生不熟的,并且所涉及的不同系统的互操作性非常差。出于这个原因,我建议尽可能使用基于硬件的解决方案,例如 iSCSI HBA。 话虽如此,我会在这里讲述我的经历,以防它对任何人有所帮助。

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

  • gPXE 和 iPXE永远不会将多个 NIC 写入 iBFT(iSCSI 引导固件表),这可能会影响 Windows Server。我曾经在一个单独的问题详细讨论这个问题在这里

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

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

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

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

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

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

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

更令人困惑的是,如果 gPXE 自动启动,则会写入不正确的 iBFT 信息,但从 gPXE 的命令提示符启动时,根据输入的命令的确切顺序,可能会写入正确的信息。如果 Windows 的 NIC 已更改(即使提供了正确的 iBFT),Windows 将表现出与此错误引起的症状相同的症状,您就会明白我为什么要撕掉我的头发。

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