hdparm 是什么
hdparm 是面向 ATA/SATA 设备的硬盘参数工具:-t 测缓存命中时的读取速率,-T 测绕过缓存后的磁盘读取速率,-W 查询或设置写缓存开关,-I 输出设备能力与当前传输模式。它直接读裸设备,不经过文件系统,读数比 dd 更接近介质上限,但同样受页缓存与后台任务影响,只适合做相对比较。NVMe 不在适用范围,测速应改用 nvme-cli 或 fio。
基本信息
| 适用平台 | Linux(hdparm 包),面向 ATA/SATA 设备 |
|---|---|
| 测速用法 | sudo hdparm -tT /dev/sda:-T 缓存,-t 磁盘 |
| 写缓存 | hdparm -W 查询,-W0 关闭,-W1 开启 |
| 权限要求 | root 或具备 CAP_SYS_RAWIO |
| 不适用范围 | NVMe 用 nvme-cli 或 fio;硬件 RAID 虚拟盘读数偏差大 |
典型使用场景
- 快速验证单盘顺序读是否达到标称性能
- 换盘后对比新旧设备读数,判断是否存在明显差异
- 确认写缓存状态,评估掉电时的数据风险
- 存储上线前粗筛设备,但不能替代 fio 等压力测试
- 确认设备是否被 RAID 卡或虚拟化层以直通方式暴露
常用命令
常用命令
sudo hdparm -tT /dev/sda # 先看缓存速度再看磁盘速度
sudo hdparm -W /dev/sda # 查询写缓存:on 表示已开启
sudo hdparm -W0 /dev/sda # 关闭写缓存,性能换一致性
sudo hdparm -I /dev/sda | head -30 # 查看设备能力与传输模式
sudo fio --name=r --filename=/dev/sda --rw=read --direct=1 --runtime=30 # 严谨测速改用 fio输出判读
| 输出项 | 含义 | 判读 |
|---|---|---|
| Timing cached reads | 页缓存命中下的读取速率 | 反映内存带宽,通常远高于磁盘 |
| Timing buffered disk reads | 绕过缓存后的顺序读速率 | 反映介质与接口的真实上限 |
| write-caching | 写缓存开关状态 | on 表示启用,掉电存在丢失风险 |
| 设备行的容量数字 | 设备容量(GB) | -tT 输出开头即给出 |
| Advanced power management | APM 级别 | 取值越低越省电但延迟越高 |
-t 的结果受页缓存影响,紧接着执行的第二次往往虚高。要认真比较设备性能,应先释放缓存或改用 fio 的直读模式,并固定运行时长与队列深度。
写缓存是性能与一致性之间的取舍:单盘关闭写缓存会让写入速率明显下降;若已有 UPS 或上层多副本保障,通常保持开启,并由应用侧 fsync 控制落盘时机。