Linux查询硬件序列号指南:从dmidecode到sysfs的完整方法
机器快过保那天售后客服问我要序列号我打开Linux终端愣了半天。Windows下右键“此电脑”还能看到个大概到了Linux里明明系统好好跑着却硬是想不起来该用哪条命令。后来做服务器资产盘点几十台机器一台台开箱看贴纸显然不现实我才认认真真把“Linux查询序列号”这件事研究了一遍。这篇文章就是把我的完整思路和踩过的坑写出来覆盖主板/整机、硬盘、网卡、内存这几类最常见的硬件以及工具缺失、权限不足时的兜底方案。不管你是刚接触Linux的桌面用户还是要管理成百上千台服务器的运维看完都能直接上手。1. 报修、过保和资产盘点序列号到底是个什么存在先理清一个概念。序列号Serial Number简称SN是硬件厂商在产品出厂时写入固件的一段唯一编码。它和UUID不一样也和MAC地址不一样。UUID是文件系统、虚拟机实例这类软件层面生成的标识跟物理硬件没有必然对应关系MAC是网卡的二层通信地址只解决“如何在网络中定位设备”的问题。序列号的特殊性在于一台机器上主板、硬盘、内存、网卡各自有独立序列号而整机还有一个整机序列号彼此之间没有关联规则不能互相推算。序列号在实践里主要有三个用途。第一是保修查询。厂商售后系统靠序列号关联出厂日期、销售渠道、质保期限。没有序列号客服那边基本查不到任何信息报修流程第一步就卡住了。第二是资产台账。固定资产表里序列号是天然的“主键”设备位置可以变、IP可以变、使用人可以换但序列号全程不变这是唯一可靠的物理标识。第三是硬件更换记录。服务器故障盘报修时如果序列号对不上槽位厂商寄来的备用盘很可能是错的这块我见过不止一次翻车现场。还有一类进阶场景虚拟化环境中的PCIe直通、SR-IOV透传在配置和排查时需要核对硬件序列号确认透传进去的设备确实是对应插槽上的那块。所以“查询序列号”不是一个单纯的技术炫技问题它直接关系到设备能不能保修、资产能不能对账。下面我按硬件类型逐一拆解。2. dmidecode主板和整机序列号的标准答案2.1 安装与sudo权限第一次跑多半会踩的雷在Linux里查主板和整机序列号绕不开dmidecode。它的原理是访问系统内存中的SMBIOSSystem Management BIOS数据表这份表由BIOS/UEFI在开机早期写入记录着硬件厂商、型号、序列号等信息。第一次跑dmidecode绝大多数人会遇到权限问题。因为它要读取/dev/mem普通用户没有访问权限直接执行会得到类似这样的报错/dev/mem: Permission denied或者在某些发行版上表现为“Cant read from /dev/mem”。这不是命令跑错就是权限不够加sudo就行。安装也很简单sudo apt install dmidecode # Debian系 sudo yum install dmidecode # RedHat系实际包名以你的发行版为准有的默认已装好。跑一下sudo dmidecode能直接看到全部信息但输出非常多我一般指定消息类型看。2.2 主板、整机、BIOS三个字段分别怎么看最常用的是system、baseboard、chassis这三个类型分别对应整机、主板、机箱。sudo dmidecode -t system | grep -i Serial Number sudo dmidecode -t baseboard | grep -i Serial Number sudo dmidecode -t chassis | grep -i Serial Number系统信息System Information里的序列号就是整机序列号相当于品牌机机身贴纸上的那个号码报修时认它。主板信息Baseboard Information里的序列号是主板厂商自己刻的编号整机序列号换了主板不一定同步变常见于售后更换主板后机器序列号“对不上”。机箱信息Chassis Information的序列号在刀片服务器、模块化设备上比较有意义普通台式机经常是空值。BIOS本身也有序列号但实践里几乎不用BIOS重要的是固件版本。要看的话sudo dmidecode -t bios有个小技巧用-s参数直接取值输出只有一个值非常适合写脚本。sudo dmidecode -s system-serial-number sudo dmidecode -s baseboard-serial-number sudo dmidecode -s chassis-serial-number2.3 消息类型不止三个CPU和内存的序列号也藏在里面dmidecode的-t参数背后是SMBIOS规范定义的消息类型system是Type 1baseboard是Type 2chassis是Type 3processor是Type 4memory device是Type 17。类型很多回忆数字不如记字符串。CPU序列号在Processor Information块里理论上有Serial Number字段但实际绝大部分CPU都不会填看到“Not Specified”是常态。内存条序列号在Memory Device块里有真实值后面单独讲。扩展卡、网卡在Type 41里偶尔能读到序列号但标准性差不同厂商差异很大。这里必须接受一个事实序列号不是每个硬件都有厂商出厂时没写就是没有命令再强也读不出来。2.4 显示Not Specified或To Be Filled By O.E.M.时怎么办这两个字符串本质上就是厂商固件里预置的占位符表示“出厂时没烧录序列号”。组装主板、白牌整机上非常常见。遇到这种情况别继续跟命令较劲三个办法看硬件本身。主板PCB上一般会有SN贴纸内存条、硬盘标签上也有。看DMI里别的字段。product_name、board_vendor、asset_tag这些即使序列号缺失也可能有价值。如果整机DMI信息全部异常排除一下是否有BIOS安全设置或终端防护软件在固件层做了篡改保护这类工具会清空SMBIOS里的敏感字段。遇到Not Specified最好的姿势是在资产表里如实标记“N/A”而不是编一个。3. 硬盘序列号SATA、NVMe、USB三种场景要分开处理3.1 smartctl是传统硬盘的首选传统SATA/SAS硬盘我第一反应是smartctl。它是smartmontools工具包里的命令专门读取硬盘SMART状态和识别信息。sudo smartctl -i /dev/sda输出里的Serial Number字段就是硬盘序列号。加-i是info模式只读识别信息不会触发自检。虽然不加也能用但我建议养成加参数的习惯明确操作意图。smartctl的优势是信息全还包括型号、固件版本、容量、转速等字段。硬盘报修时厂商经常要“型号序列号固件版本”三件套这一个命令全都给了。如果系统里没有smartctl直接从内核暴露的属性读也可以cat /sys/block/sda/device/serial3.2 NVMe固态不能用smartctl那套路径NVMe固态硬盘虽然smartctl也能认但输出结构跟SATA不太一样而且很多NVMe设备在smartctl下的序列号字段位置不统一。我更推荐用nvme-clisudo apt install nvme-cli sudo nvme list输出有Node、SN、Model几个关键列SN就是序列号。如果你的系统不允许装新包sysfs同样有答案cat /sys/class/nvme/nvme0/serial机器上有多块NVMe盘时nvme0、nvme1按PCIe枚举顺序编号注意对照一下再取。这个路径不需要root普通用户大多能直接读。3.3 USB移动硬盘和读卡器lsblk与udevadm的配合移动硬盘、U盘的序列号查询要简单很多lsblk -do NAME,SERIAL,MODEL,TRAN /dev/sdb-d表示只看设备本身不看分区-o指定输出列。TRAN列会显示USBSERIAL列是桥接芯片透传出来的序列号。问题在于很多USB桥接芯片根本不做序列号透传SERIAL列会是空的。这时再用udevadm确认udevadm info --queryall --name/dev/sdb | grep ID_SERIAL两边都读不到基本就是桥接芯片没暴露序列号换条线换台设备都不一定解决硬件层面的限制。另外/dev/disk/by-id/目录里那些符号链接是另一个宝藏link文件名本身就是“设备类型型号序列号”的组合比如ata-WDC_WD10EZEX-00BN5A0_WD-WCC3F1XXXXXX。这个目录在配置fstab时特别有价值按by-id挂载比按/dev/sdX稳定得多重启不会因为盘符漂移挂错盘。3.4 序列号、UUID、WWN和设备路径别把四样东西搞混做运维时间长了会发现很多故障其实源于概念混淆。硬盘相关的标识至少有四层标识来源典型用途会不会变Serial Number厂商固件写入报修、资产不变WWNSCSI/SAS体系协议分配存储阵列映射、多路径不变UUID/PARTUUID格式化文件系统时生成fstab挂载重新格式化会变/dev/sdX内核按枚举顺序分配临时操作重启可能变报修要Serial挂载配置用UUID存储多路径识别要WWN临时读写随便用/dev/sdX。搞混了轻则报修信息错误重则fstab挂错盘。4. 网卡和内存容易被忽略的两个查询点4.1 网卡固件序列号怎么拿MAC地址不算最常被误解的硬件标识就是MAC地址。很多人指着网卡MAC说“这就是网卡序列号”真到厂商售后那儿对方不会认的。MAC是IEEE分配的EUI-48地址解决的是二层寻址问题不是产品身份编号。真正的网卡序列号存在EEPROM里PCIe独立网卡可以试试lspci -vv -s 02:00.0 | grep -i serial把02:00.0换成你网卡的PCI地址lspci | grep -i ethernet能先找到它。但必须说实话这个字段很多网卡根本不填写lspci读不到是常态。板载网卡就更简单了——它的序列号通常跟随整机序列号回到dmidecode -t system去查即可。我个人的处理原则是网卡报修优先提供型号、固件版本和驱动信息序列号有最好没有也别纠结。4.2 内存条的序列号藏在SPD信息里内存条的序列号非常规范几乎每根都能查到因为SPD芯片里除了频率、时序还固定烧录了厂商代码、颗粒配置和序列号。sudo dmidecode -t memory每根内存对应一个Memory Device块里面有Size、Speed、Part Number、Serial Number。服务器上插着十几根内存条时这个命令输出会很长我通常这样精简sudo dmidecode -t memory | grep -E Serial Number|Part Number|Size:但有个坑这样grep出来的Serial Number一行接一行你不知道它对应哪根插槽。按下文的awk处理才能对号入座或者直接看完整输出的Locator字段。4.3 lshw把整机序列号汇总到一个命令里想一览整机硬件的序列号不用一个个敲dmidecode和smartctl可以直接上lshwsudo lshw -short这个输出会列出system、主板、磁盘、内存、网卡等常用类别的序列号摘要一眼扫过去基本有数。要对接自动化资产系统还能输出XMLsudo lshw -xml hardware.xmllshw的serial字段在部分虚拟设备上是空的输出内容多时反而占终端所以我的定位是“快速预览工具”。要拿准确值还是交给dmidecode、smartctl、nvme这些专项命令。5. 工具缺失或权限不足时的兜底方案sysfs路径直接读取5.1 DMI信息/sys/class/dmi/id/下的现成字段生产环境里常有这种情况最小化安装的系统连dmidecode都没装包管理器又被网络策略卡住。好在Linux内核会把DMI信息原原本本地暴露在sysfs里不用装任何东西。cat /sys/class/dmi/id/product_serial cat /sys/class/dmi/id/board_serial cat /sys/class/dmi/id/chassis_serial cat /sys/class/dmi/id/product_name这些文件对应dmidecode的system、baseboard、chassis序列号。部分发行版出于安全考虑限制了普通用户的读取权限遇到Permission denied就加sudo。这种直接读文件的方案在编写脚本时优势极明显比解析dmidecode的文本输出稳得多。5.2 块设备序列号/sys/block/sda/device/serial块设备的序列号同样在sysfs里。内核在识别硬件时会从SCSI INQUIRY数据或NVMe Identify Controller数据里提取serial字段存成设备属性所以路径规律很清楚cat /sys/block/sda/device/serial # SATA/SAS/USB硬盘 cat /sys/class/nvme/nvme0/serial # NVMe固态顺带说一句内核模型的表达非常直白/sys/block/sda/device/是底层设备目录里面不光有serial还有model、vendor这些属性。平时手动查东西多逛逛这个目录比背命令快。5.3 批量收集资产序列号的一个随手脚本组合上面两个思路可以写一个不依赖任何额外工具的小脚本在机房巡检时直接跑#!/bin/bash # 通用序列号收集脚本无需额外安装包 echo hostname: $(hostname) echo product_name: $(cat /sys/class/dmi/id/product_name 2/dev/null || echo NA) echo product_serial: $(cat /sys/class/dmi/id/product_serial 2/dev/null || echo NA) echo board_serial: $(cat /sys/class/dmi/id/board_serial 2/dev/null || echo NA) for disk in /sys/block/sd*; do [ -e $disk ] || continue dev$(basename $disk) model$(cat $disk/device/model 2/dev/null || echo NA) serial$(cat $disk/device/serial 2/dev/null || echo NA) echo $dev model$model serial$serial done for nvme_dir in /sys/class/nvme/nvme[0-9]*; do [ -e $nvme_dir/serial ] || continue dev$(basename $nvme_dir) echo $dev serial$(cat $nvme_dir/serial 2/dev/null) done这段脚本没有任何红帽系、Debian系的包依赖纯read操作对只读挂载的救援系统同样适用。真到大规模资产管理我建议把它输出成CSV或JSON多带几列主机名和服务标签避免返工。6. 几个容易踩的坑和对应解法6.1 终端里grep序列号容易多出半行最典型的场景是dmidecode -t memory | grep -i serial。多根内存条会输出一串Serial Number没有人知道哪一行属于哪根插槽。按行grep在单条命令的简单输出里好使一旦遇到多设备块就废了。正确做法是保留上下文sudo dmidecode -t memory | grep -A 6 Memory Device$ | grep -E Locator:|Size:|Serial Number|Part Number更干净的方式是用awk按块分组给每个Memory Device块编号sudo dmidecode -t memory | awk /Memory Device/{n} /Serial Number/{print DIMM n : $0}这个教训不限于内存查多盘位服务器的硬盘序列号也一样smartctl -i /dev/sda逐块看虽然慢但最不容易出错。6.2 虚拟机、容器里查序列号参考意义有限在云主机或虚拟化环境里DMI数据是虚拟化平台注入的很多序列号字段显示的是实例ID或UUID而不是物理硬件信息。在容器里更典型容器共享自定义的mount namespace看到的/sys/class/dmi可能是宿主机的数据也可能是只读挂载的假数据无论哪种都别写进物理资产台账。判断自己是否在虚拟环境里sudo dmidecode -s system-product-name输出出现“虚拟机平台”相关字样就说明序列号数据不是物理机的。裸金属服务器上dmidecode、sysfs的结果才有实际资产意义。6.3 资产表里处理序列号的心得最后分享几个处理资产数据的实际细节。序列号的文本格式很不统一。有的全数字有的带短横线有的末尾留了空格dmidecode输出里还有行首缩进。进Excel前先统一清洗去掉两端空白、统一大写、过滤掉“Not Specified”“To Be Filled By O.E.M.”这类占位字符串。长序列号很容易被Excel当成科学计数法处理低六位直接变0这种错很隐蔽。导入前把对应列设为文本格式或者先在纯文本编辑器里替换分隔符能避免大批量数据静默损坏。还有一点资产台账序列号和Product Name、厂商、槽位信息要放在一起存。只存序列号时间一长你根本不知道它是哪台机器哪块盘的号。写到最后说点个人习惯。序列号这玩意儿平时藏在系统里不显眼真到关键时候往往很急——机器开不了机Linux命令行也进不去你只能拆机看贴纸。所以我现在的做法是每台新机器到手第一时间用sysfs里那几条cat命令把整机和主板序列号存进本地笔记顺便把硬盘序列号也记上。几行命令的事报修、对资产账的时候能省掉整整半天折腾时间。希望这篇文章能帮你把这件小事做顺。

相关新闻

JavaWeb项目war包打包与Tomcat部署完整流程:从IDEA到线上

JavaWeb项目war包打包与Tomcat部署完整流程:从IDEA到线上

做了这么多年JavaWeb项目,从早期用MyEclipse、Eclipse,到后来换到IDEA,最常被问到的问题就是:“项目在IDEA里跑得好好的,怎么打成war包部署到服务器上就不行?”其实这中间的步骤并不复杂,但每一…

2026/10/11 5:27:43 阅读更多 →
Java面试别死记硬背:用出题逻辑和答题框架吃透高频八股

Java面试别死记硬背:用出题逻辑和答题框架吃透高频八股

看到太多准备Java面试的同学,把网上的面试题库背得滚瓜烂熟,结果一进面试间,被问“HashMap的put操作流程”这种基础中的基础,反而支支吾吾说不清楚。问题出在哪?多数人把“刷题”当成了“背题”,只记住了答…

2026/10/11 5:27:43 阅读更多 →
PS5保姆级使用指南:开机设置、散热、存储扩容与手柄维护避坑

PS5保姆级使用指南:开机设置、散热、存储扩容与手柄维护避坑

手边的PS5用了快三年,先后也帮朋友调过好几台不同版本的机器,光驱版、数字版、轻薄版都经手过。拆过侧板、换过M.2 SSD、清过灰、处理过手柄漂移,还帮人做过旧机到新机的整体迁移。这些事单独看都不复杂,但经验攒多了之后&#xf…

2026/10/11 5:27:43 阅读更多 →

最新新闻

基于YOLO的焊缝缺陷检测毕设方案:数据集、训练与推理全流程拆解

基于YOLO的焊缝缺陷检测毕设方案:数据集、训练与推理全流程拆解

简介:这份资源面向深度学习与计算机视觉方向的毕业设计、课程设计及期末大作业需求者,聚焦工业焊缝缺陷的自动识别与定位问题。方案以YOLO算法为核心,将目标检测转化为回归任务,实现对裂纹、气孔、未熔合、未焊透等缺陷的快速预测…

2026/10/11 7:02:35 阅读更多 →
C#部署YOLOv8-OBB:旋转框解析与OpenVINO推理实战

C#部署YOLOv8-OBB:旋转框解析与OpenVINO推理实战

简介:这份C#源码工程基于Intel OpenVINO工具包实现Yolov8-OBB旋转目标检测,面向需要在文档识别、条码扫描或交通标志检测中定位倾斜目标的开发者,解决普通矩形边界框难以表达旋转物体方向的问题。整个压缩包共337个文件,大小约307…

2026/10/11 7:02:35 阅读更多 →
AnyPS5 技术拆解:输入设备泛化与协议桥接实战

AnyPS5 技术拆解:输入设备泛化与协议桥接实战

1. 从“AnyPS5”这个名字说起:它到底想解决什么问题第一次看到“AnyPS5”这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕 PlayStation 5 生态做“泛化接入”或“跨端能力扩展”的项目。为什么这么判断?因为“Any”这个…

2026/10/11 7:02:35 阅读更多 →
DLSS5与多帧插值协同实现144Hz无闪帧生成

DLSS5与多帧插值协同实现144Hz无闪帧生成

1. 这个“6倍帧生成DLSS5”到底在解决什么真实痛点?先说结论:这不是营销噱头,而是针对《原神》这类高画质、高动态场景下,GPU瓶颈与显示器刷新率不匹配这一长期被忽视的底层矛盾,所给出的一套可落地的工程化解法。我最…

2026/10/11 7:02:35 阅读更多 →
《执行控制工程》作者手记 04|当所有条件都已成立,谁真正决定现实

《执行控制工程》作者手记 04|当所有条件都已成立,谁真正决定现实

本文是《执行控制工程》(Execution Control Engineering)的作者手记。 它不是书籍正文的摘要或重写,而是围绕本章问题、工程背景与写作之后的进一步思考。 在过去的软件工程实践中,我们已经建立了许多用于管理权力的机制。身份认证…

2026/10/11 7:02:35 阅读更多 →
GitHub 打不开怎么排查:先分清是 DNS 污染还是连接被重置,处理方式完全不同

GitHub 打不开怎么排查:先分清是 DNS 污染还是连接被重置,处理方式完全不同

本文首发于 CSDN,转载请注明出处。 先说结论:「GitHub 打不开」不是一个故障,而是至少四类完全不同的故障——DNS 解析不出地址、TCP 连接超时、连接被中间设备重置、TLS 握手被打断。四种故障的表象都是「转圈然后失败」,但报错原…

2026/10/11 7:01:35 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →