dmidecode -t memory 是唯一能查到真实内存型号的命令,因其直接解析BIOS写入SMBIOS表的SPD数据,而lshw等依赖内核sysfs导出、常缺失Part Number;需sudo权限,推荐用awk过滤Bank Locator、Manufacturer、Part Number等关键字段。

dmidecode -t memory 是唯一能查到真实内存型号(Part Number)的命令,其他工具如 lshw、/proc/meminfo 或 free 都不包含物理内存条的硬件型号信息。
为什么必须用 dmidecode -t memory
内存型号(如 M378A2K43CB1-CTD)存在 SPD 芯片中,由 BIOS/UEFI 固件读取并写入 SMBIOS 表。只有 dmidecode 直接解析该表,不依赖内核驱动或 sysfs 导出逻辑——这意味着它在大多数服务器、台式机甚至部分 ARM 服务器上都可靠;而 lshw 依赖内核是否把 part_number 字段从 sysfs 暴露出来,很多主板(尤其是消费级或 OEM 品牌机)会留空或填 NO DIMM。
常见误操作:
- 执行
cat /proc/meminfo | grep model→ 输出为空,因为该文件只含内存容量统计,不含硬件型号 - 用
lshw -class memory后发现description只有DIMM Synchronous→ 这是正常现象,说明 BIOS 没填或内核没导出,不能靠它定位型号 - 没加
sudo就运行dmidecode→ 提示Permission denied,因需访问/dev/mem,普通用户无法绕过
怎么过滤出有效的 Part Number 和对应插槽
dmidecode -t memory 默认输出冗长,含空插槽(Size: No Module Installed)和重复块。直接提取关键字段更高效:
推荐命令:
sudo dmidecode -t memory | awk '/Memory Device$/,/^$/ { if (/Size:/ && !/No Module/) print; if (/Bank Locator:|Manufacturer:|Part Number:|Serial Number:/) print }'
重点看这几行:
-
Bank Locator:对应主板插槽位置(如BANK 0或ChannelA-DIMM0),可用来和物理插槽对照 -
Manufacturer:常见值为Samsung、Micron、SK Hynix,注意大小写敏感 -
Part Number:真实型号编码,用于查 datasheet 或比对兼容性,例如MTA18ASF2G72AZ-2G6B1 -
Serial Number:大概率为空或Not Specified,不是命令问题,是硬件/BIOS 层面未写入
没有 root 权限时能不能查 Part Number
不能用普通用户权限查全量信息,但可尝试从 /sys/firmware/dmi/tables/DMI 手动提取(需内核 ≥5.10 且启用 DMI sysfs 导出):
sudo strings /sys/firmware/dmi/tables/DMI | grep -A 1 -B 1 "Part Number\|Manufacturer"
缺点明显:
- 仍需
sudo(普通用户无权读该路径) - 输出是原始字符串流,无结构,
grep容易误匹配(比如Manufacturer:后面紧跟着乱码或其它字段) - 部分国产 BIOS 或老旧主板禁用 DMI sysfs 导出,
/sys/firmware/dmi/tables/目录为空
如果连 sudo 都没有,基本无法获取型号——这不是技巧问题,是 Linux 权限模型和硬件固件设计决定的硬限制。
真正容易被忽略的一点:同一块主板上不同插槽输出的 Part Number 可能完全一样,但 Serial Number 却缺失;这时候别怀疑命令失效,先确认 BIOS 是否启用了 SPD 读取(某些服务器 BIOS 设置里有 “Memory SPD Info” 开关,默认可能关闭)。











