一句话结论

在 物理机 上,/sys/block/<dev>/queue/rotational 是最权威判断标准:0=SSD,1=HDD。
在 虚拟机 上,1 往往只是虚拟化默认模拟结果,不等于真实宿主盘类型。

为什么会误判

很多盘会给出非常泛化的型号,例如:

ATTRS{wwid}=="t10.ATA     SATA SSD                                5182075619E300153486"
ATTRS{model}=="SATA SSD        "
  • vendor=ATA 只是接口标准,不是品牌
  • model=SATA SSD 是通用描述,不是具体型号

这类“白牌/通用固件”信息可作为线索,但不是唯一依据。

判断方法(按可靠性排序)

1. 看 rotational(最高优先级)

cat /sys/block/sda/queue/rotational
  • 0:非旋转介质(SSD/NVMe)
  • 1:旋转介质(HDD)

> 把 sda 替换成真实设备名,例如 nvme0n1、vda。

2. 看设备型号(高可靠)

udevadm info -a -n /dev/sda | grep -i model
  • 包含 SSD、Solid State、NVMe:通常是 SSD
  • 传统机械盘系列名(如 Barracuda/Caviar):通常是 HDD

3. 看 TRIM 功能(高可靠)

udevadm info --query=property --name=/dev/sda | grep ID_ATA_FEATURE_SET_TRIM
  • ID_ATA_FEATURE_SET_TRIM=1:支持 TRIM,基本可判定为 SSD
  • 不存在或 0:倾向 HDD(或虚拟化未透出)

虚拟机场景的“陷阱”

你在虚拟机中看到:

cat /sys/block/sda/queue/rotational
# 1

这通常是虚拟化平台为了兼容性默认模拟为 HDD(而不是宿主机真实硬盘类型)。

  • VMware / VirtualBox / KVM 默认都可能这样做
  • 这不等于 I/O 一定慢
  • 实际性能主要受宿主机物理盘和虚拟化驱动影响(如 VirtIO)

让虚拟机识别为 SSD

  • VMware:在 .vmx 中设置 scsi0:0.virtualSSD = "TRUE"
  • VirtualBox:存储设置里勾选“使用固态硬盘”
  • KVM/QEMU:磁盘参数加 ssd=on

修改后重启虚拟机,再查 rotational。

不重启的临时优化(仅调优)

cat /sys/block/sda/queue/scheduler
echo none | sudo tee /sys/block/sda/queue/scheduler
  • 对 SSD 场景推荐 none(或按内核版本选 mq-deadline)
  • 重启后通常失效,需持久化配置时再写入系统规则

推荐排查流程(可直接照做)

  1. 先查 rotational
  2. 再查 model
  3. 最后查 TRIM
  4. 若在虚拟机中结果矛盾,先确认虚拟磁盘是否启用 SSD 标识
  5. 仅关心性能时,直接评估调度器与实际 I/O 测试结果

速查命令

# 1) 核心判断
cat /sys/block/sda/queue/rotational

# 2) 型号线索
udevadm info -a -n /dev/sda | grep -i model

# 3) TRIM 支持
udevadm info --query=property --name=/dev/sda | grep ID_ATA_FEATURE_SET_TRIM

# 4) 调度器查看/临时调整
cat /sys/block/sda/queue/scheduler
echo none | sudo tee /sys/block/sda/queue/scheduler