HOWTO: 解决 Windows Server 2022 的 WDS PXE-E16 问题
HOWTO: 解决 WDS PXE-E16 问题
一台基于 Windows Server 2022 的 WDS 服务器已加入到 AD,并使用 AD 集成模式进行了初始化的配置,跟随向导同时导入了 WinSvr 2022 的 Boot.wim 和 Install.wim,但是在使用 Hyper-V Gen2 VM 执行首次网络引导时是正常的,但是在通过实体机进行 PXE 网络引导时,发生了 PXE-E16 故障;之后再用 VM 测试同样报错。
从报错信息可见 PXE-E16: No valid offer received. 在 Configuration Manager 中 PXE 启动问题的高级故障排除 | Microsoft Learn 文档中提供了一些排查的思路。尝试创建一个 Gen1 VM 引导发现是可以正常工作的,说明 WDS 服务和发现均没有问题,看来是有其他原因。
网上曾有文章介绍使用 WDS 的独立模式进行配置,但在本案中并不适合,回过头来分析客户端的特征,并结合 WDS 事件日志做了分析,才恍然大悟。
- 客户端使用 UEFI 模式启动
- 查阅 WDS 事件日志,可看到设备已从 PXE 启动,但并未执行后续启动步骤。在日志中可以看到一个重要的提示“客户端体系结构: 4”
- 如果使用 Gen1 VM 执行 PXE 启动,日志中记录其客户端体系结构为1,之后会创建 Non-Shared 缓冲区来读取文件“\boot\x86\wdsnbp.com”,之后当 gOxiA 按下 F12 确认从网络引导后,WDS 又为其过程创建了“\bootx64\pxeboot.n12”,随后 TFTP 获取到 x64 的 Boot.wim 成功引导加载 PE 环境。在 Configuration Manager 中的 PXE 启动 | Microsoft Learn 这篇文档中我们可以获取到很多有用的信息。
由于 WDS 初始提供 wdsnbp.com 来引导客户端启动,而其特性仅支持 x86 和 x64 BIOS,所以最终导致 Gen2 VM 和实体设备发生引导故障,因为两者均为 UEFI。
为了确保 UEFI 这类的 Modern PC 能够通过 WDS 提供的 PXE 进行网络引导,我们需要强制 WDS 为客户端提供 UEFI 支持,即使用 Bootmgfw.efi 或 Wdsmgfw.efi,为此我们需要配置 DHCP,添加 067 选项,强制默认使用 UEFI 引导。
最后再次执行启动验证,Gen2 VM 和 实体机均能够正常通过 PXE 引导。在 WDS 事件日志中,可跟踪到设备初始便会使用 067 指定的 efi 文件加载引导,之后会成功加载 x64uefi 下的 bcd 并顺利完成后续的 Boot.wim 加载任务。
需要注意,当通过 DHCP 强制支持 UEFI 后,在使用 Gen1 VM 执行 PXE 网络引导,则会发生 PXE-E79 故障。
如果在企业环境中同时存在 BIOS 和 UEFI 固件类型的设备,IT 管理员可以考虑配置 DHCP 服务器,定义供应商类别(DHCP Vendor Classes),添加 UEFI x86/x64 以及 BIOS x86&x64 的支持。
微软发布边缘计算设备映像生成器的公共预览版
微软发布边缘计算设备映像生成器的公共预览版
微软今天在其技术社区发布了一款面向边缘计算设备的映像生成器,以下简称:EDIB,目前是公共预览版。利用该工具设备生成商或OEM,甚至是 IT 人员都可以构建安全和自定义的 Windows IoT Enterprise LTSC 2021 设备映像。
如果您之前也做过系统定制方面的工作一定深有体会,很多繁琐的配置步骤和测试验证过程会让人感到沮丧。EDIB 提供了引导式的用户体验来定义系统映像,可以轻松的配置 Windows 系统的可选功能、策略、语言和区域设置以及质量更新;针对制造商或OEM还可方便的集成驱动程序、应用程序和OEM支持信息;在设备锁定配置方面,可以与配置用户账户、Shell自定义、全新体验、无品牌启动、键盘筛选器、统一写入筛选器和自定义登录配置。
下面是 Edge Device Image Builder 的初始界面,我们可以从新建一个项目开始。
虽然界面和操作流程都很简单,但也有一些先决条件:
- 如果要在虚拟机上运行 Edge Device Image Builder,那主机 PC 必须满足 Hyper-V 嵌套虚拟化的先决条件,有关配置嵌套虚拟化可以参考:https://docs.microsoft.com/en-us/virtualization/hyper-v-on-windows/user-guide/nested-virtualization#configure-nested-virtualization
- 仅支持 Windows 10 IoT Enterprise LTSC,版本21H2
- Windows ADK 2004
- Windows ADK 2004 PE Add-on
- 按需自定义语言和功能包
- Packer
看到这里如果您已经心动,打算用它来生成一个单应用的 Kiosk 设备映像,那恐怕要失望了,因为目前还无法通过此工具生成,且没有解决方案。
更多细节和使用指导建议浏览下面的官方文档,如果已经迫不及待想要一试也可以从下面的链接下载。
HOWTO: 解决 WDS 自动化部署 Windows 时 PE 应答文件无法自动应用系统映像
HOWTO: 解决 WDS 自动化部署 Windows 时 PE 应答文件无法自动应用系统映像
在企业 IT 服务台,通常会部署一台 WDS 服务器用于桌面端的系统交付任务。WDS 的优势和特点相信了解的朋友都有了解,内置在 Windows Server 中的一个服务,提供了友好的 UI 管理界面,配置简单除了支持 AD 也可以在工作组环境下运行,除了可用来通过网络安装 Windows 操作系统,还支持 PXE 引导,最为重要的是它还支持全自动化部署的应用场景,并提供了简单的设备驱动管理功能。
今天,要分享的是在自动化部署场景下,应答文件无法自动应用系统映像的问题。我们知道要实现 WDS 的自动化部署,首先要解决 PE 引导进入 WDS 环境后的登录验证问题,之后才会执行 Windows Setup 过程,在这个 Setup 向导中会允许 IT 人员选择要安装的系统映像,以及目标设备的磁盘准备工作。为此我们需要创建一个应答文件,在“1 windowsPE”阶段添加“amd64_Microsoft-Windows-Setup_neutral”以配置相关的应答设置。
其中,使用“WindowsDeploymentServices”来指定验证登录到 WDS 的账户信息(Login),并通过“ImageSeclection”指定要安装哪个系统映像(InstallImage),以及要安装到哪个磁盘的分区(InstallTo)。
考虑到设备要重建系统分区和格式化,所以我们还应该添加“DiskConfiguration”对硬盘进行自动化配置,本例为 UEFI 设备创建了三个必要分区:EFI、MSR、Primary
到这里我们可以在 WDS 中加载这个应答文件,并做一下测试。WDS 为 PE Boot 加载 Unattend 的过程很简单,打开 WDS 控制台,进入其属性,找到客户端选项卡,勾选“启用无人参与安装”,为“x64 UEFI 体系结构”指定我们刚才创建的应答文件即可。
在实际测试中注意到部署过程并未自动化去安装预先配置的系统映像,我们复查一下应答文件,重点检查“ImageSelection”下的“InstallImage”,如下图所示:
我们可以很轻松的确认 ImageGroup和 ImageName,并没有什么不妥,那么 Filename 是应该填写完整的 UNC 路径还是仅填写 WIM 文件名呢?!其实这里只需要填写 WIM 文件名即可,但需要注意的是导入的 Install.wim 通常包含多个 SKU,在添加到 WDS 后会为每个 SKU 生成一个 WIM 文件,我们需要在映像属性中确认这个文件名。
可是确认了 Filename 后为什么还是不能自动应用系统映像?!且没有任何报错呢?!我们再来回顾一下 WDS 部署系统时的过程,引导进入 WDS Client Setup 环境后首先会要求我们配置语言,OK!这就是重点,还记得我们前面编制的应答文件并没有包含语言设置部分,但测试时也确实略过的语言选项,但由于缺失这部分就会导致应答文件无法完全匹配。现在,我们重新编辑应答文件,在 PE 阶段添加“amd64_Microsoft-Windows-International-Core-WinPE_neutral”,如果当前导入到 WDS 里的 PE Boot image 是中文版的,则将相关的语言配置为 zh-cn 即可,其中 InputLocale 的中文对应的是 0804:00000804。
现在,重新执行 WDS 部署,可以看到问题得到解决。