如何在 BIOS 中存储自定义字符串

Hub*_*NNN 16 bios linux

一点背景:

我计划对无盘计算机和网络启动进行一些实验。

我发现的问题是,如果我有四台机器从同一个映像启动,我需要一种方法来识别这台机器是app-1,而不是app-4

因此,在考虑可以将此类信息存储在无盘计算机上的何处之后,我意识到 Windows 将其 CD-KEY 存储在 BIOS 中,并且 OEM 也在那里存储了一些自定义数据。

所以我的目标是在 BIOS 内存中存储一​​个简单的字符串。我知道我可以在 Linux 上使用 检索它dmidecode,但我还没有找到任何dmiencode命令。

如何在 BIOS 中存储自定义字符串,以便稍后使用 dmidecode 或其他工具检索它?

此外,专业人员如何在无盘服务器环境中处理存储特定于机器的数据?

Ton*_*nny 33

我知道这不是\xe2\x80\x99t 对你的问题的直接答案,但这具有XY 问题的所有特征。

\n

通常的方法是根本不在机器本地存储任何内容。

\n

如果您需要唯一地标识计算机,则可以为每台计算机设置 DHCP 保留,并使用关联的 DNS 名称和 IP 地址。\n如果需要,您可以让计算机上的启动/初始化脚本查询其自己的 DNS name 并相应地设置内部主机名。

\n

更换机器就像更新 DHCP 预留一样简单。\n\xe2\x80\x99 根本不需要弄乱 BIOS/UEFI。(显然,除了将其设置为从 LAN 启动之外。)

\n

  • 我认为你是对的,最初我想将主机名放入 BIOS 中,然后根据主机名获取其他所有内容,从技术上讲,@harrymc 的答案是我的问题最正确的答案,因为它完全允许这样做,但在阅读了所有答案之后我确实认为最好使用 MAC 作为标识符,并且确实使用 DHCP 来提供基于 MAC 的配置,而不是在机器本身上存储任何内容。 (3认同)
  • @HubertNNN - 既然你想_用无盘计算机和网络启动进行一些实验_我强烈推荐[iPXE](https://ipxe.org/)。它比普通 PXE 堆栈(例如 NetBoot 级别的 Syslinux 菜单)更加灵活,具有更多功能,并且可以简单地从现有 PXE 堆栈进行链式加载。- 十年前,我能够在无盘客户端上安装 Win7,并使用 FreeNAS 作为 iSCSI 服务器 ** 并** 从我的 TFTP 服务器启动大量其他内容(GRML live Linux、Gparted、低级 BIOS 刷新器等)。 (2认同)

har*_*ymc 20

如果您的计算机使用 统一可扩展固件接口 (UEFI),那么您可以使用所谓的“UEFI 变量”。

来自 Arch Linux 统一可扩展固件接口 - UEFI 变量

UEFI 定义了操作系统可以与固件交互的变量。UEFI 引导变量由引导加载程序使用,并且操作系统仅在早期系统启动时使用。UEFI 运行时变量允许操作系统管理固件的某些设置,例如 UEFI 启动管理器或管理 UEFI 安全启动协议的密钥等。您可以使用以下方式获取列表:

$ efivar --list
Run Code Online (Sandbox Code Playgroud)

更多信息很少,例如 Ubunti 联机帮助页 efivar

您可能还会对通过 UEFI 变量将数据从 UEFI 发送到操作系统一文感兴趣 。

  • UEFI 变量本身并不存储在固件中,而是存储在称为 NVRAM 的非易失性存储器中(尽管现在它通常是闪存,而不是 CMOS RAM)。 (5认同)