如何避免反复搜索启动设备后出现“NBP 太大,无法放入可用基本内存”的情况?

如何避免反复搜索启动设备后出现“NBP 太大,无法放入可用基本内存”的情况?

我有一些服务器,可以在启动时反复重试搜索启动设备(本地 SATA 磁盘、USB 驱动器、网络启动),直到有一个可用的设备。

我也有一个使用 iPXE 的网络启动设置。默认情况下,它会检查机器 mac 地址的自定义启动脚本并执行该脚本。如果没有,它会退出。

一段时间内,这个方法运行良好。但大约 5 分钟后,我开始收到“NBP 太大,无法放入可用基本内存”,并且它不执行自定义脚本。相反,我认为它无法启动 iPXE“网络引导程序”。

这些系统有 64GB 以上的内存。因此系统内存不会用完。但可能卡上或卡本身的内存可用空间非常小,每次尝试启动时都必须使用新内存。

我觉得这像是 NIC 固件中的内存泄漏。

我希望在启动过程中,当 NIC 的 OPROM 屏幕上显示“正在初始化”时,NIC 完全初始化。我希望当无法通过 NIC 启动时,该 NIC 使用的所有内存都会被释放。

如何阻止此 NBP 错误发生?ipxe 中是否有命令可以释放此内存或强制完全重新初始化 nic?

答案1

内存不足。我假设您在这里使用的是旧版 pcbios,因为一切都指向这一点。在这个旧时代,我们实际上只有 640KB 的基本内存可用于初始程序。

现在用完的原因是在旧的 pcbios UNDI 堆栈中,实际上没有干净的方法来退出和清理所有内容。

解决此问题最简单的方法是重新启动机器。也许有些事情可以改进,但为了提供进一步的帮助,最好提供更详细的输出日志,以及您正在使用的 iPXE 二进制文件,以及您从 iPXE 获得的完整错误消息(如果有)(它将包含 ipxe.org 网址 - 也请阅读该页面)

我记得曾经讨论过类似的问题(可能是在 iPXE 论坛中),但那是很多年前的事了,记不太清楚了。(错误消息可能会有所帮助)

编辑:以下是一些有助于您延年益寿的想法:

  1. 如果您打算使用 iPXE,请尝试使用较小版本的 iPXE(可以禁用许多功能),这样当实际需要时,它可以在较少内存的情况下成功运行。(这并不能解决问题,但确实会使它在失败前尝试更长时间)
  2. 始终链接到 iPXE,然后有一个循环的嵌入式脚本,类似于:
#!ipxe
:retry
autoboot || goto :retry

这将在 iPXE 内部永远重试,而无需在每次尝试时进行初始化(和占用内存)。

答案2

将 BIOS 中的启动模式更改为 UEFI 即可解决此问题。旧版可能没有足够的资源。

相关内容