最可靠方法是读取 /sys/block/*/queue/rotational:值为0表示SSD,1表示HDD;该方式轻量、无需额外工具且内核级权威,配合 smartctl -i /dev/sdX | grep "Rotation Rate" 可进一步验证具体转速或确认SSD标识。

直接看 /sys/block/*/queue/rotational 最快最可靠
不用装额外工具、不依赖 SMART 或 ATA 协议支持,Linux 内核在启动时就已通过底层驱动判断磁盘是否可旋转,并把结果写进 /sys/block/sda/queue/rotational。读这个文件是判断转速(本质是 HDD/SSD)最轻量、最通用的方式。
- 值为
1→ 机械硬盘(HDD),有物理旋转,后续才需查具体 RPM - 值为
0→ 固态硬盘(SSD),无旋转,Rotation Rate字段必然不存在或显示Solid State Device - 注意设备名:用
lsblk -d -o NAME,ROTA一次性列出所有块设备及其ROTA值,避免手动猜sda/nvme0n1
smartctl -a /dev/sdX 输出里的 Rotation Rate 是最准的 RPM 数值来源
对确认是 HDD 的盘,smartctl 从 SMART 属性中读取的 Rotation Rate 是厂商写入的标称转速,可信度高。但前提是:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 必须已安装
smartmontools(sudo apt install smartmontools或yum install smartmontools) - 设备需支持 SMART 且未被禁用(部分 NVMe 盘或某些 RAID 卡透传下会失效)
- 执行时加
sudo,否则权限不足读不到数据 - 命令示例:
sudo smartctl -a /dev/sda | grep "Rotation Rate",输出可能是Rotation Rate: 7200 rpm或Rotation Rate: Solid State Device
hdparm -I /dev/sdX 的 Nominal Media Rotation Rate 有时不可靠
这个字段理论上也反映转速,但实测中不少 SATA 硬盘(尤其老型号或 OEM 定制盘)返回空或 0,即使它是 5400rpm 或 7200rpm HDD。原因在于 ATA 标准对此字段非强制填写。
- 可用但别全信:
sudo hdparm -I /dev/sda | grep "Nominal Media Rotation Rate" - 如果没输出,不代表没转速,只是厂商没填;此时应回退到
smartctl或sginfo -
sginfo -g /dev/sdX对 SCSI/SAS 盘更稳,但需先yum install sg3_utils,且设备路径可能不是/dev/sda(如/dev/cciss/c0d0)
别用 lshw -class disk 查转速
lshw 能清楚列出 product(型号)、logical name、接口类型,但它**不解析或展示转速字段**。有人误以为 configuration: … rotational=yes 就等于有转速值,其实这只是重复内核 rotational 标志,和具体 RPM 无关。
- 查型号可以:
sudo lshw -class disk | grep -A2 "product:" - 查转速不行:它不调用 SMART 或 SCSI 命令,也不解析
Rotation Rate,纯属误导 - 真正需要 RPM 数值时,
smartctl是唯一推荐的命令级方案
/sys/block/*/queue/rotational + smartctl 组合,覆盖 95% 以上物理盘场景。

















