Linux磁盘性能评估需结合场景分维度分析,重点看IOPS、吞吐量、延迟和%util等指标,用iostat/iotop监控实时状态,以dd快速摸底、fio精准模拟负载,并用hdparm排查底层硬件问题。

Linux磁盘性能评估不能只看一个数字,关键要结合场景测、分维度看、用工具链查。重点不是“最快能跑多少”,而是“在你实际负载下是否够用、是否稳定、瓶颈在哪”。
一、基础指标必须懂:IOPS、吞吐量、延迟、利用率
这些不是术语堆砌,而是判断依据:
- IOPS:适合随机小文件场景(如数据库、邮件服务)。4K随机读写更反映真实压力,别只信1M顺序写的“漂亮数字”。
- 吞吐量(MB/s):适合大文件连续操作(如视频转码、备份)。注意单位是MB/s还是MiB/s,差约7%。
- 响应时间(ms):用户感知最直接的指标。普通SATA盘随机读写超过15ms就需警惕,NVMe盘持续超1ms也说明有争用或队列堆积。
- %util:iostat里这个值接近100%≠磁盘坏了,但持续高于80%且伴随高await,基本可判定是I/O瓶颈源头。
二、日常监控:用iostat和iotop快速定位
不装新工具也能掌握实时状态:
- 运行 iostat -dx 2:重点关注 r/s、w/s(IOPS)、rkB/s、wkB/s(吞吐量)、%util 和 await(平均等待毫秒)。若await远大于svctm,说明请求在队列里排队,不是磁盘慢,是压得太狠。
- 运行 sudo iotop -o:只显示正在做I/O的进程。看 IO> 列(I/O等待占比)和 DISK READ/WRITE 实时速率。某Java进程IO>占95%,基本就是它在刷日志或没配缓存。
三、精准测试:dd和fio分工明确
dd快但粗糙,fio细但需配置——两者互补:
-
dd适合快速摸底:
写测试:dd if=/dev/zero of=/tmp/testfile bs=1M count=2048 oflag=direct(绕过缓存,测真实写速)
读测试:dd if=/tmp/testfile of=/dev/null bs=1M iflag=direct(同样绕缓存)
注意:单次结果波动大,建议重复3次取中位数;测试完记得 rm /tmp/testfile。 -
fio适合模拟真实负载:比如测MySQL典型负载:
fio --name=randread --ioengine=libaio --iodepth=16 --rw=randread --bs=4k --size=2G --runtime=60 --time_based --group_reporting
这条命令模拟16个并发、4K随机读、持续60秒。输出里重点看 iops 和 lat (avg) 两列。
四、别漏掉hdparm:专测裸盘理论读速
它不走文件系统,直接跟磁盘控制器对话,适合排查底层硬件问题:
- sudo hdparm -Tt /dev/sda:-T测内存+CPU缓存速度(纯参考),-t测磁盘本身连续读能力。如果-t结果只有20MB/s,而厂商标称是550MB/s,大概率是线缆、模式(IDE vs AHCI)或固件问题。
- 注意:该命令对SSD/NVMe支持有限,主要适用于传统SATA/SAS硬盘。











