一点背景:
我打算用无盘计算机和网络引导做一些实验。
我发现的问题是,如果我有四台机器从同一个映像启动,我需要一种方法来识别这台机器是app-1,而不是app-4。
因此,在考虑了我可以在无盘机器上将此类信息存储在何处之后,我意识到 Windows 将其 CD-KEY 存储在 BIOS 中,而 OEM 也将一些自定义数据存储在那里。
所以我的目标是在 BIOS 内存中存储一个简单的字符串。我知道我可以在 Linux 上使用 检索它dmidecode
,但我没有找到任何dmiencode
命令。
如何在 BIOS 中存储自定义字符串,以便以后使用 dmidecode 或其他工具检索它?
此外,专业人员如何处理在无盘服务器环境中存储特定于机器的数据?
我知道这不是您问题的直接答案,但这具有XY 问题的所有特征。
通常的方法是根本不在机器上本地存储任何东西。
如果您需要唯一标识计算机,您可以为每台计算机设置 DHCP 保留,并使用关联的 DNS 名称和 IP 地址。如果需要,您可以在机器上使用启动/初始化脚本查询 DNS 以获取其自己的名称并相应地设置内部主机名。
更换机器就像更新 DHCP 保留一样简单。根本不需要弄乱 BIOS/UEFI。(显然,将其设置为从 LAN 启动除外。)
如果您的计算机使用 统一可扩展固件接口 (UEFI),那么您可以使用所谓的“UEFI 变量”。
来自 Arch Linux 统一可扩展固件接口 - UEFI 变量:
更多信息很少,例如 Ubunti 联机帮助页 efivar。
您可能还会发现 通过 UEFI 变量将数据从 UEFI 发送到操作系统的文章很有趣。
UEFI 之前的系统可能能够通过 DMI/SMBIOS 资产标签和属性标签将持久标识符存储在其固件 NVRAM(而不是任何硬盘上)中。您可以尝试使用smbios-utils软件包中的
smbios-sys-info
程序设置它们。然而,当我自己在我的两台笔记本电脑(2005 年的东芝和 2010 年的联想)上尝试此操作时,后者都显示异常回溯,而前者因分段错误而崩溃。我记得唯一一次成功设置这些标签是使用更旧的戴尔笔记本电脑(从 2002 年开始,我不再拥有);可能并不奇怪,因为 libsmbios 库拥有戴尔版权。随心所欲。
BIOS 软件通常是专有的,取决于您使用的硬件制造商以及他们是否发布了工具。
您不太可能创建新属性,但是,您可能能够重用现有属性并设置自己的值。
例如,Lenovo有一个工具可以让您为机器类型、序列号和系统品牌 ID 设置新值。