一句话结论
在 物理机 上,/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) - 重启后通常失效,需持久化配置时再写入系统规则
推荐排查流程(可直接照做)
- 先查
rotational - 再查
model - 最后查
TRIM - 若在虚拟机中结果矛盾,先确认虚拟磁盘是否启用 SSD 标识
- 仅关心性能时,直接评估调度器与实际 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