最可靠方式是用 root 权限运行 sudo dmidecode -t baseboard 并 grep 序列号关键词;若失败,可尝试 /sys/class/dmi/id/board_serial(需注意权限);虚拟机中序列号多为模拟值,不可用于物理资产追踪。

直接读取 dmidecode 的主板序列号字段
Linux 下最可靠的方式是用 dmidecode 解析 SMBIOS 表,它能直接拿到 BIOS/主板厂商写入固件的原始信息。但注意:必须用 root 权限运行,普通用户会看到空输出或权限错误 Permission denied。
实操建议:
- 执行
sudo dmidecode -t baseboard | grep -i "serial\|sn:"——-t baseboard限定只查主板类型,grep过滤常见关键词(不同厂商可能用Serial Number、SN:、Asset Tag等) - 如果返回为空,不代表没有序列号,可能是字段名不标准,改用
sudo dmidecode -t baseboard全量看,手动找含数字+字母组合的长字符串行 - 部分超薄本或 ARM 设备(如树莓派、Chromebook)不支持 SMBIOS,
dmidecode会报错No SMBIOS nor DMI entry point found,这时得换方法
从 /sys/class/dmi/id/ 里快速提取(无需 root)
内核 2.6 以后把部分 DMI 信息映射到 sysfs,/sys/class/dmi/id/board_serial 就是主板序列号的快捷路径。优势是不用 sudo,适合脚本批量采集。
实操建议:
- 直接读取:
cat /sys/class/dmi/id/board_serial,成功则输出一串字符;失败则显示cat: /sys/class/dmi/id/board_serial: Permission denied或No such file or directory - 权限问题常见于某些发行版(如 Ubuntu 22.04 默认限制非 root 访问 dmi/id),此时需临时加权限:
sudo chmod o+r /sys/class/dmi/id/board_serial,但重启后失效 - 这个路径下还有
product_name(主板型号)、board_vendor(厂商),可一并检查,交叉验证是否读对了设备
遇到 dmidecode: command not found 怎么办
不是所有系统默认装 dmidecode,尤其是最小化安装的 CentOS Stream、AlmaLinux 或 Docker 容器镜像。
实操建议:
- Debian/Ubuntu 系:运行
sudo apt install -y dmidecode - RHEL/CentOS/AlmaLinux 系:运行
sudo dnf install -y dmidecode(或yum,取决于版本) - 容器环境慎用:
dmidecode在容器里常因缺少 /dev/mem 访问权限而失败,即使装上了也报Cannot access the DMI table,这时只能依赖宿主机提供或换用其他硬件识别方式
虚拟机里查到的序列号有意义吗
绝大多数虚拟机(VMware、KVM、VirtualBox)会模拟一个假的主板序列号,比如 VMware 是 VMware-xx xx xx xx xx xx xx xx 格式,KVM 可能是全 0 或随机字符串。它和物理服务器的出厂编号完全无关。
实操建议:
- 先确认是否虚拟环境:
systemd-detect-virt或hostnamectl | grep Virtualization - 如果是虚拟机,别纠结
board_serial,真正要追踪资产时,应使用云平台 API(如 AWS 的instance-id、阿里云的InstanceId)或自定义元数据 - 有些私有云会把物理机 SN 注入到虚拟机的 DMI 中(需宿主机配置),但这属于特例,不能默认指望
主板序列号不是总能稳定读出——BIOS 设置里可能禁用 DMI、厂商留空字段、UEFI 固件版本太老,或者机器压根没写。真要用于资产审计,最好在采购阶段就要求供应商提供带 SN 的交付清单,并在首次装机时立刻存档,别等出问题了再翻。


















