在Linux系统中,“ST号”通常指存储设备(如硬盘、固态硬盘)的序列号(Serial Number),是设备的唯一标识符,常用于设备管理、故障排查、资产盘点等场景,Linux提供了多种命令和方法来查看存储设备的序列号,不同方法适用于不同的接口类型(如SATA、NVMe、SCSI等)和系统环境,以下将详细介绍几种常用方法及其实际应用。

使用lsblk命令查看序列号
lsblk(list block devices)是Linux系统中常用的块设备列表工具,默认显示设备的名称、大小、类型等基本信息,通过指定--output参数可以额外输出序列号字段,该方法无需额外安装工具,操作简单,适合快速查看SATA和NVMe硬盘的序列号。
操作步骤:
- 打开终端,输入以下命令(
-d参数表示不显示子设备,如分区;-o NAME,SERIAL指定输出设备名和序列号):lsblk -d -o NAME,SERIAL
- 若需查看具体设备的序列号(如/dev/sda),可结合
grep过滤:lsblk -d -o NAME,SERIAL | grep sda
示例输出:
NAME SERIAL
sda WD-WCC4N0KTY0K
nvme0n1 1234567890ABCDEF
注意事项:
- 部分设备(尤其是虚拟设备或老旧硬盘)可能无序列号,输出中显示为空或。
- 对于NVMe设备,序列号字段可能为
SERIAL或WWN(世界 wide 名称),若SERIAL为空,可尝试lsblk -d -o NAME,WWN。
使用hdparm命令查看序列号
hdparm主要用于查看和配置硬盘参数,通过-I(或--info)选项可读取硬盘的IDENTIFY数据,其中包含序列号信息,该方法适用于SATA和IDE接口硬盘,需root权限执行。
操作步骤:
- 首先安装
hdparm(若未安装):- Ubuntu/Debian:
sudo apt install hdparm - CentOS/RHEL:
sudo yum install hdparm
- Ubuntu/Debian:
- 执行以下命令查看硬盘序列号(以/dev/sda为例):
sudo hdparm -I /dev/sda | grep "Serial Number"
示例输出:
Serial Number: WD-WCC4N0KTY0K
注意事项:
- 该命令仅适用于PATA/SATA/IDE硬盘,对NVMe硬盘无效(NVMe设备需使用
smartctl或nvme命令)。 - 若硬盘未正确识别或处于休眠状态,可能无法获取序列号,需先确保硬盘在线。
使用smartctl命令查看序列号
smartctl是smartmontools工具包的一部分,主要用于监控硬盘健康状态(SMART信息),同时支持读取序列号,该方法支持SATA、NVMe、SCSI等多种接口,输出信息详细,适合需要硬盘完整信息的场景。

操作步骤:
- 安装
smartmontools:- Ubuntu/Debian:
sudo apt install smartmontools - CentOS/RHEL:
sudo yum install smartmontools
- Ubuntu/Debian:
- 查看SATA硬盘序列号:
sudo smartctl -i /dev/sda | grep "Serial Number"
- 查看NVMe硬盘序列号(以/dev/nvme0n1为例):
sudo smartctl -i /dev/nvme0n1 | grep "Serial Number"
示例输出:
Serial Number: WD-WCC4N0KTY0K
注意事项:
- 部分NVMe硬盘的序列号可能在输出中显示为“Num Serial Number”或“Serial Number”,字段名可能因版本略有差异。
- 若硬盘未启用SMART功能,需先执行
sudo smartctl -s on /dev/sda启用。
使用udevadm命令查看序列号
udevadm是udev设备管理器的工具,可通过查询设备属性获取序列号,该方法适合需要动态获取设备信息的场景,尤其是USB设备或热插拔硬盘。
操作步骤:
- 执行以下命令查看设备属性(以/dev/sda为例):
udevadm info --query=all --name=/dev/sda | grep -i serial
- 也可结合
--attribute-walk参数查看完整属性链:udevadm info --attribute-walk --name=/dev/sda | grep -i serial
示例输出:
E: SERIAL=WD-WCC4N0KTY0K
E: SERIAL_SHORT=WCC4N0KTY
注意事项:
- 输出中可能包含多个序列号相关字段(如
SERIAL、SERIAL_SHORT),SERIAL通常为完整序列号。 - USB设备的序列号可能存储在父设备属性中,需通过
udevadm逐级查询。
使用lshw命令查看序列号
lshw(List Hardware)是一款功能强大的硬件信息查看工具,可显示详细的硬件配置,包括硬盘序列号,该方法输出信息全面,适合硬件资产盘点,但需root权限获取完整信息。
操作步骤:

- 安装
lshw:- Ubuntu/Debian:
sudo apt install lshw - CentOS/RHEL:
sudo yum install lshw
- Ubuntu/Debian:
- 查看硬盘序列号(仅显示磁盘类信息):
sudo lshw -class disk -short | grep serial
- 查看完整硬件信息并过滤序列号:
sudo lshw -class disk | grep -i serial
示例输出:
serial: WD-WCC4N0KTY0K
注意事项:
lshw输出信息较多,需结合grep过滤关键内容,避免信息冗余。- 部分系统可能未预装
lshw,需手动安装。
不同方法对比
为方便选择,以下表格总结了各方法的适用场景及优缺点:
| 方法 | 适用接口 | 需要权限 | 需要安装工具 | 优点 | 缺点 |
|---|---|---|---|---|---|
| lsblk | SATA/NVMe | 普通 | 无 | 简单快捷,无需安装 | 部分设备无序列号显示 |
| hdparm | SATA/IDE | root | 需安装 | 支持旧设备,信息详细 | 不支持NVMe |
| smartctl | SATA/NVMe/SCSI | root | 需安装 | 支持多接口,SMART信息全 | 需启用SMART功能 |
| udevadm | 所有接口 | root | 无 | 动态获取,适合热插拔设备 | 需筛选字段,路径复杂 |
| lshw | 所有接口 | root | 需安装 | 硬件信息全面,适合盘点 | 输出冗余,需过滤 |
相关问答FAQs
问题1:为什么用不同命令查看同一块硬盘的序列号,结果可能不一致?
解答:可能原因包括:
- 字段来源不同:部分命令读取设备固件序列号(如
hdparm),部分读取物理序列号(如smartctl),两者可能存在差异(尤其是维修或翻新硬盘)。 - 接口差异:NVMe和SATA硬盘的序列号存储位置不同,不同命令对接口的适配性不同(如
hdparm不支持NVMe)。 - 设备状态:硬盘处于休眠、错误状态或未正确识别时,部分命令可能返回空值或默认值。
- 命令版本:不同版本的
smartctl或lsblk对序列号字段的命名或解析方式可能略有差异。
问题2:如何批量查看服务器中所有硬盘的序列号?
解答:可通过编写简单脚本结合循环命令实现,以下以lsblk和smartctl为例:
- 使用lsblk批量查看(适用于SATA/NVMe):
for disk in $(lsblk -d -n -o NAME | grep -E 'sd|nvme'); do echo "/dev/$disk: $(lsblk -d -o SERIAL /dev/$disk | tail -n1)" done
- 使用smartctl批量查看(支持多接口,需确保硬盘在线):
for disk in $(lsblk -d -n -o NAME | grep -E 'sd|nvme'); do serial=$(sudo smartctl -i /dev/$disk | grep "Serial Number" | awk '{print $3}') echo "/dev/$disk: $serial" done - 过滤无效序列号(若需排除空值):
for disk in $(lsblk -d -n -o NAME | grep -E 'sd|nvme'); do serial=$(lsblk -d -o SERIAL /dev/$disk | tail -n1) if [[ -n "$serial" && "$serial" != "-" ]]; then echo "/dev/$disk: $serial" fi done执行脚本后,将输出所有硬盘的设备名及对应序列号,适合批量管理服务器存储设备。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/33941.html