我正在研究如何将各种操作系统安装到无盘服务器上以通过 iSCSI 运行。服务器对此没有特殊硬件(没有 iSCSI HBA 等)
我简单地玩过 Windows 部署服务,但它似乎与我想要的相反:我可能是错的,但它似乎旨在将 Windows 基于网络安装到系统上,然后从本地磁盘启动,而我想安装 Windows,使其从 iSCSI 磁盘运行,我不关心是否必须在本地插入安装介质。因此,我目前的方法不使用 WDS。
此测试针对的是 Windows Server 2012,但可能也适用于之前的版本。
简而言之,我正在设置一个空白的 iSCSI 目标(我已经尝试了几个 s/w 供应商,虽然目前我正在使用 StarWind,但它似乎没有太大区别),并使用 PXE 链接到 gPXE 或 iPXE 来做iSCSI 引导(我都尝试过,结果相似,但我发现 gPXE 更容易使用。)
当然,如果没有操作系统,引导会失败,但它会让 LU 通过 BIOS 磁盘接口连接,这样当本地 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,如果可以,我可能做错了什么?
(我最初的回答还为时过早。正如承诺的那样,我在一切正常后重写了它。)
首先,我发现一般的支持 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-san
gPXE/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 地址将对应一个 NIC,但本地 IP 和网关地址将对应另一个。如果 SAN 不在第一个 NIC 上,则最有可能发生这种情况。
更令人困惑的是,如果 gPXE 自动启动,则会写入此错误的 iBFT 信息,但当从 gPXE 的命令提示符启动时,根据输入的命令的确切顺序,可能会写入正确的信息。如果 Windows 的 NIC 已更改(即使提供了正确的 iBFT),Windows 将表现出与此错误引起的症状相同的事实,您可以明白为什么我撕破了头发。
顺便说一句,在我最初的问题中,我认为它适用于 Server 2008 R2 但不适用于 Server 2012。(我正在编辑它,因为它具有误导性。)我怀疑它们的基本行为实际上没有区别,而且不同的结果归因于上述问题的微妙之处和我测试中的微小变化。