登录
首页 >  文章 >  linux

Linux查看内存条厂家信息 dmidecode高级用法

时间:2026-05-05 21:42:40 439浏览 收藏

小伙伴们对文章编程感兴趣吗?是否正在学习相关知识点?如果是,那么本文《Linux查看内存条厂家信息 dmidecode高级用法》,就很适合你,本篇文章讲解的知识点主要包括。在之后的文章中也会多多分享相关知识点,希望对大家的知识积累有所帮助!

sudo dmidecode -t memory 中 Manufacturer 字段常为乱码或“NO DIMM”,因BIOS未规范填写;应优先依据 Part Number 查JEDEC前缀判品牌,或用 decode-dimms 直读SPD芯片获取真实厂家信息。

Linux查看内存条厂家信息 dmidecode高级用法

直接用 sudo dmidecode -t memory 看不到厂家?因为字段被截断或混在空插槽里

默认输出里 Manufacturer: 字段常被 BIOS 填成十六进制乱码(如 7F7F7F7F7F510000),或和 Part Number: 隔得太远,grep 一筛就丢。更麻烦的是,空插槽(Size: No Module Installed)也会带出一堆 Manufacturer: 行,干扰判断。

实操建议:

  • -q(quiet)参数跳过警告,避免干扰管道处理:sudo dmidecode -q -t memory
  • awk 按内存块聚合字段,只保留 Size: 后跟 MB/GB 的条目作为有效起点:sudo dmidecode -q -t memory | awk '/Size: [0-9]+ [MG]B$/ {in_block=1; next} in_block && /Manufacturer:/ {man=$0; next} in_block && /Part Number:/ {part=$0; next} in_block && /Speed:/ {speed=$0; print man, part, speed; in_block=0}'
  • Manufacturer: 是十六进制串,可尝试用 xxd -r -p 反向解码(但多数情况只是 BIOS 填错,无实际意义)

dmidecode 输出的 Manufacturer 字段为什么经常是乱码或 NO DIMM

这不是命令问题,是固件行为:很多主板厂商(尤其 OEM 或国产 BIOS)没按 SMBIOS 规范填制造商字符串,而是写入无效字节、全零、或直接留空再由内核补成 NO DIMM。这种情况下,Manufacturer: 字段已不可信,但 Part Number: 通常仍准确——它由内存颗粒厂烧录进 SPD,BIOS 很少篡改。

实操建议:

  • 别依赖 Manufacturer: 判定品牌,优先看 Part Number:,然后去 JEDEC 官网或厂商文档查前缀(如 M378A2K43CB1 → Samsung,F4-3200C14D-16GVKB → G.Skill)
  • 遇到 NO DIMM,检查是否对应空插槽;若出现在已安装条上,基本可断定 BIOS 没导出该字段,换 decode-dimms 工具读 SPD 更可靠
  • 部分 ARM 平台(如树莓派 CM4)或精简内核(Alpine)压根不提供 DMI 表,此时 dmidecode 会报错或返回空,不是权限问题

不用 root 权限也能拿到厂家线索?试试 /sys/firmware/dmi/tables/DMI

现代内核(≥5.10)默认把 DMI 表映射到 /sys/firmware/dmi/tables/DMI,虽然仍是二进制,但普通用户只要能读这个路径(通常需 sudo,因目录权限为 0400),就能绕过 dmidecode 的完整解析逻辑。

实操建议:

  • 先确认路径存在且可读:sudo ls -l /sys/firmware/dmi/tables/;若报 No such file,说明 BIOS 禁用了 DMI sysfs 导出,这条路走不通
  • strings 提取并过滤:sudo strings /sys/firmware/dmi/tables/DMI | grep -A2 -B2 "Part Number\|Manufacturer\|DIMM"
  • 注意误匹配:字符串无结构,“Samsung”可能出现在 Asset Tag 或其他字段里,务必结合上下文判断是否紧邻 Part NumberSpeed
  • 此法不依赖 dmidecode 安装,适合容器环境或最小化系统,但无法还原字段层级,对多插槽识别不如原生 dmidecode -t memory

想确认厂家是否真实?必须读 SPD 芯片,用 decode-dimms

dmidecode 读的是 BIOS 填写的“申报信息”,而 decode-dimms(来自 i2c-tools)通过 I²C 总线直读内存条上的 SPD EEPROM,内容由 JEDEC 标准定义,不可篡改。这才是厂家信息的唯一权威来源。

实操建议:

  • 先加载 I²C 模块:sudo modprobe i2c-dev;若报错,检查内核是否启用 I2C_CHARDEVI2C_I801(Intel 主板常见)
  • 扫描 I²C 总线找到 SPD 设备:sudo i2cdetect -l,再逐个试读:sudo decode-dimms -f i2c-3i2c-3 替换为实际总线号)
  • 输出中 Memory Type 下的 Module Manufacturer ID 是 JEDEC 注册码(如 0x0000 = Samsung,0x0101 = Micron),比字符串更防伪
  • 某些服务器(如 Dell R740)或笔记本因 SPD 访问被 BIOS 锁死,decode-dimms 会提示 Failed to open i2c bus,此时只能信 BIOS 填的 Part Number
真正难的不是执行哪条命令,而是当 Manufacturer: 显示 NO DIMMPart Number: 是空、decode-dimms 扫不到设备时,得意识到:这根内存条的 SPD 数据已被屏蔽,或者主板根本不支持标准 SPD 访问——这时候型号只能靠物理标签拍照,或者查整机配置单。

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于文章的相关知识,也可关注golang学习网公众号。

资料下载
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>