直接测裸设备(如/dev/vdc)才能反映真实磁盘性能,须先用fdisk -lu和blkid确认其无分区无文件系统;安装fio及libaio依赖后,按场景选用对应参数组合,并配合iostat实时监控%util与await,SSD需预热。

直接测裸设备(如 /dev/vdb)才能反映真实磁盘性能,但必须避开系统盘(如 /dev/vda)和已有数据盘,否则会覆盖分区表、破坏文件系统、丢失数据。
确认测试目标设备是否“干净”
不能拿已挂载或有文件系统的设备开刀。分两步验证:
- 运行 sudo fdisk -lu 查看所有块设备,找出候选空盘(比如 /dev/vdc)
- 再执行 sudo blkid,如果输出里完全不出现该设备名,说明它既无分区也无文件系统,可安全用于压测;若返回类似 /dev/vdc1: TYPE="ext4" 的信息,立即放弃
安装 fio 并确保异步 I/O 生效
fio 默认用同步引擎,压不出真实性能上限。必须装对依赖并验证 libaio 是否可用:
- CentOS/RHEL:运行 sudo yum install -y fio libaio-devel
- Ubuntu/Debian:运行 sudo apt-get install -y fio libaio-dev
- 验证是否成功:fio --ioengine=libaio --help 不报错即生效
关键参数组合要按目标指标来配
测什么就配什么,混搭会导致结果失真:
- 测 4K 随机读 IOPS(如数据库读密集场景):
fio -name=randread -ioengine=libaio -iodepth=32 -rw=randread -bs=4k -direct=1 -size=1G -numjobs=4 -runtime=60 -group_reporting -filename=/dev/vdc - 测 1M 顺序写吞吐(如日志归档类场景):
fio -name=seqwrite -ioengine=sync -rw=write -bs=1M -iodepth=16 -direct=1 -size=5G -numjobs=1 -runtime=60 -group_reporting -filename=/dev/vdc(顺序写不用 libaio,避免队列干扰) - 测 混合读写(如 OLTP):
fio -name=mixed -ioengine=libaio -rw=randrw -rwmixread=70 -bs=4k -iodepth=32 -direct=1 -numjobs=4 -runtime=60 -group_reporting -filename=/dev/vdc
测试中必须控环境、看实时指标
光看 fio 最终输出容易误判。建议边跑边观察:
- 始终加 -direct=1,否则测的是缓存不是磁盘
- SSD 测试前先预热:跑一轮 randwrite 持续 5 分钟,让 FTL 和缓存稳定
- 测试时另起终端运行 iostat -x 1,重点关注 %util(是否接近 100%)和 await(延迟是否平稳)
- 别 Ctrl+C 中断 randwrite 类测试,中断后设备状态可能异常,重试前建议重启实例











