最可靠方式是执行 sudo dmidecode -t system 查看 Serial Number 和 UUID 字段,物理服务器通常真实有效,虚拟机则常为空或随机值;若不可用,可尝试 /sys/class/dmi/id/product_serial 和 /sys/class/dmi/id/product_uuid。

直接用 dmidecode -t system 看系统序列号和UUID
大多数物理服务器或品牌整机的主板固件会在 SMBIOS 的 system 类型中填入真实序列号和 UUID,这是最接近“出厂硬件唯一标识”的来源。执行命令后重点找这两行:
-
Serial Number:—— 通常对应主板或整机资产标签 -
UUID:—— 格式为xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx,由 BIOS/UEFI 固件生成
注意:虚拟机(如 VMware、KVM)常返回 None、00000000-0000-0000-0000-000000000000 或随机值,不能当作物理设备标识使用。
dmidecode -t baseboard 查主板型号与序列号是否一致
有些 OEM 厂商把整机序列号写在 system 表,但把主板独立序列号写在 baseboard 表里。两者可能不同,尤其在定制服务器或二手机器上:
- 运行
sudo dmidecode -t baseboard | grep -E "Manufacturer|Product Name|Serial Number" - 对比
system和baseboard的Serial Number字段是否相同 - 若不一致,需确认业务场景依赖的是“整机资产号”还是“主板防伪号”
部分国产主板或白牌服务器会留空 Serial Number,此时字段显示为空或 To Be Filled By O.E.M.,属于正常现象,不是命令失败。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
为什么 dmidecode -s 参数有时查不到 UUID?
dmidecode -s 是快捷子命令,但支持的 key 有限且依赖 SMBIOS 版本。常见失效情况:
-
sudo dmidecode -s system-uuid可能返回空 —— 因为实际字段名是UUID(含大写),而 -s 模式只认小写短名,且部分固件未注册该别名 -
sudo dmidecode -s bios-serial或baseboard-serial同样不可靠,优先用完整-t输出 +grep - 某些安全加固系统(如 RHEL with FIPS mode)会禁用 DMI 接口,
dmidecode报错Cannot access the DMI table,此时只能退到/sys/class/dmi/id/
替代方案:不用 root 权限也能读 /sys/class/dmi/id/
内核把部分 DMI 字段映射为普通文件,无需安装工具或 root 权限(只要没被 sysctl 禁用):
-
cat /sys/class/dmi/id/product_uuid—— 对应system表的 UUID -
cat /sys/class/dmi/id/product_serial—— 对应system表的 Serial Number -
cat /sys/class/dmi/id/board_serial—— 对应baseboard表的 Serial Number(部分内核版本支持)
这个路径下所有文件都是只读的,但内容是否有效完全取决于固件填充质量。遇到空输出时,不要反复重试,先检查 dmidecode -t system 是否有同样结果 —— 如果连 dmidecode 都读不到,说明硬件本身就没提供该信息。

















