无法从iSCSI启动Windows Server 2012

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

我简单地使用了Windows部署服务,但是它似乎与我想要的大相径庭:我可能是错的,但它似乎devise用于在系统上执行基于networking的Windows安装,然后从本地磁盘启动,而我想安装Windows,使其从iSCSI磁盘运行,我不在乎是否必须在本地插入安装介质。 所以我现在的做法不使用WDS。

这个testing是Windows Server 2012的,但也可能适用于以前的版本。

总之,我设置了一个空白的iSCSI目标(我尝试了几个软件供应商,虽然目前我正在使用StarWind,但似乎并没有太大差别),并使用PXE链接到gPXE或iPXE一个iSCSI启动(我已经尝试了两个,有类似的结果,虽然我发现gPXE更容易使用)。

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

我通过删除gPXE提示符并input以下命令来完成启动(与iPXE中除了接口#相同):

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

Windows Server 2012似乎安装,并在某些时候重新启动。 iPXE开始从iSCSI启动,并出现“Metro”徽标 – 至less有一些东西被安装到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。

如果没有硬件HBA,Server 2012可能会运行iSCSI吗?如果是的话,我可能会做错什么?

(我最初的回答是不成熟的,正如所承诺的,我已经完成了所有工作后重写了它。)

首先,我发现通常iSCSI启动软件是不完善的,不同的系统互操作性很差。 出于这个原因, 如果可能的话,我推荐使用基于硬件的解决scheme,例如iSCSI HBA。 这样说,我会把我的经验,以防万一它帮助任何人。

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

  • gPXE和iPXE 从不将多个NIC写入iBFT(iSCSI引导固件表),这可能会影响Windows Server。 我在这里单独讨论了这个问题。

  • 除了上面的devise限制外,gPXE还有一个实际的bug,同样也会影响有多个networking端口的系统。 我会在下面解释。 为了避免这个bug,我使用了gPXE的“UNDI only”版本。 这可以防止gPXE直接访问NIC,而是使用NIC的PXE加载器提供的API。 这使得gPXE认为只有一个networking端口(它被加载的端口),这避开了错误。 我不确定这个bug是否出现在较新的iPXE版本中。

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

  • Windows Server(至less是2012年,也可能是其他)显然不允许将提供系统盘的iSCSI启动器从一个networking端口移动到另一个networking端口。 如果Windows从不同于安装它的networking端口上的启动程序启动,则在启动过程中,Windows将在MS启动程序切换时崩溃(蓝屏和/或重启)。

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

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

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

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

为了增加混淆,如果gPXE自动引导,则写入不正确的iBFT信息,但是从gPXE的命令提示符引导时,根据input的命令的确切顺序,可以写入正确的信息。 抛出这样一个事实,即如果它的NIC已经被更改(即使给出了正确的iBFT),Windows将显示与由这个错误引起的症状相同的症状,并且您可以看到为什么我撕裂了我的头发。

顺便说一句,在我原来的问题,我曾认为它是为Server 2008 R2而不是服务器2012年(我正在编辑它,因为它是误导。)我怀疑其实在底层行为没有什么区别,结果归功于上述问题的微妙之处,以及我的testing中的微小变化。