一点背景知识:
我计划对无盘计算机和网络启动做一些实验。
我发现的问题是,如果我有四台机器从同一个映像启动,我需要一种方法来识别这台机器是应用程序-1, 不是应用程序-4。
因此,在思考了在无盘机器上我该如何存储此类信息后,我意识到 Windows 将其 CD-KEY 存储在 BIOS 中,并且 OEM 也在那里存储了一些自定义数据。
因此,我的目标是将一个简单的字符串存储在 BIOS 内存中。我知道我可以在 Linux 上使用以下方法检索它:dmidecode
,但我没有找到任何dmiencode
命令。
我如何在 BIOS 中存储自定义字符串,以便以后可以使用 dmidecode 或其他工具检索它?
此外,专业人员如何在无盘服务器环境中处理特定于机器的数据存储?
答案1
如果您的计算机正在使用 统一可扩展固件接口 (UEFI),那么您可以使用所谓的“UEFI 变量”。
来自 Arch Linux 统一可扩展固件接口 - UEFI 变量:
UEFI 定义了操作系统与固件交互的变量。UEFI 引导变量由引导加载程序使用,操作系统仅用于早期系统启动。UEFI 运行时变量允许操作系统管理固件的某些设置,如 UEFI 引导管理器或管理 UEFI 安全引导协议的密钥等。您可以使用以下方式获取列表:
$ efivar --list
更多信息很少,例如 Ubunti 手册页 埃菲瓦尔。
您可能还会对这篇文章感兴趣 通过 UEFI 变量将数据从 UEFI 发送到操作系统。
答案2
我知道这不是对你问题的直接回答,但这具有XY问题。
通常的做法是不是在机器本地存储任何内容。
如果需要唯一地标识计算机,请为每台计算机设置 DHCP 预留,并为其指定关联的 DNS 名称和 IP 地址。如果需要,您可以在计算机上使用启动/初始化脚本查询 DNS 以获取其自己的名称,并相应地设置内部主机名。
更换机器就像更新 DHCP 预留一样简单。根本不需要弄乱 BIOS/UEFI。(当然,除了将其设置为从 LAN 启动。)
答案3
预 UEFI 系统可能能够通过 DMI/SMBIOS 资产标签和属性标签将持久标识符存储在其固件 NVRAM 中(而不是任何硬盘上)。您可以尝试使用smbios-sys-info
程序设置它们:smbios 实用程序包裹。
smbios-sys-info --asset-tag --set=12345
smbios-sys-info --property-tag --set=12345
然而,当我在两台笔记本电脑(一台 2005 年的东芝和一台 2010 年的联想)上亲自尝试时,后者都出现了异常回溯,而前者则因分段错误而崩溃。我记得唯一一次成功设置这些标签是在一台更老的戴尔笔记本电脑上(2002 年的,我不再拥有它);这可能并不奇怪,因为 libsmbios 库带有戴尔版权。随你怎么想吧。