首页/系统/Linux 内核与性能调优速查/hdparm 盘测速与写缓存状态

hdparm 盘测速与写缓存状态

hdparm -tT 分别测缓存与磁盘读取速度、-W 查看写缓存开关;主要面向 ATA/SATA 设备。

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 managementAPM 级别取值越低越省电但延迟越高
-t 的结果受页缓存影响,紧接着执行的第二次往往虚高。要认真比较设备性能,应先释放缓存或改用 fio 的直读模式,并固定运行时长与队列深度。
写缓存是性能与一致性之间的取舍:单盘关闭写缓存会让写入速率明显下降;若已有 UPS 或上层多副本保障,通常保持开启,并由应用侧 fsync 控制落盘时机。

易错点

  • 用 -tT 的单次结果给设备下定论:页缓存与后台任务都会干扰,应多次采样后取稳定区间
  • 对硬件 RAID 虚拟盘执行参数类操作,可能绕过阵列自身的保护机制或直接失败
  • 为了消除数据丢失风险就随手关写缓存,而真正原因是上层没做 fsync,问题会被掩盖
  • 对 NVMe 执行 hdparm 测速,工具不支持该接口,得到的结果没有参考价值

数据来源与参考

  • hdparm 官方文档(hdparm(8))
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌