我简单地使用了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,如果是这样,我可能做错了什么?
首先,我发现一般来说,iSCSI启动软件是半生不熟的,而且涉及的不同系统的互操作性非常差.出于这个原因,我建议尽可能使用基于硬件的解决方案,例如iSCSI HBA.有了这个说我会在这里讲述我的经历,以防它帮助任何人.
总结一下我发现的内容(我假设您已经为PXE和iSCSI目标设置了DHCP和TFTP,并且已经链接到gPXE或iPXE):
> gPXE和iPXE从不将多个NIC写入iBFT(iSCSI Boot Firmware Table),这可能会影响Windows Server.我在一个单独的问题here中详细讨论了这个问题.
>除了上述设计限制外,gPXE还存在一个实际错误,同样会影响具有多个网络端口的系统.我将在下面解释.为了避免这个错误,我使用了gPXE的“UNDI only”构建.这可以防止gPXE直接访问NIC,并使其使用NIC的PXE加载程序提供的API.这使得gPXE认为只有一个网络端口(它被加载的那个),这就避免了这个错误.我不确定这个bug是否存在于较新的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目标的信息.一旦切换到保护模式,操作系统就会使用此信息继续启动.格式指定为here.
怀疑信息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.(我正在编辑它,因为它具有误导性.)我怀疑它们的基本行为实际上没有区别,并且不同结果归咎于上述问题的微妙之处以及我测试中的微小变化.