FIO 实战详解:安全测试 Linux 磁盘 IOPS 的正确方法 在性能测试中磁盘 IOPSInput/Output Operations Per Second是衡量存储系统性能的重要指标。 但很多人拿到 fio 命令后就直接对 /dev/sdX 开始“无脑测试”结果数据全毁、分区损坏、系统宕机。本文将系统讲解fio 的正确使用方式以及如何安全地测试磁盘性能。一、fio 简介fioFlexible I/O Tester 是 Linux 下最常用的磁盘性能测试工具支持多线程、多种 I/O 模式顺序、随机、混合和多种 I/O 引擎。 它既能测试裸盘性能也能测试挂载后的文件系统性能。但这两种模式的风险完全不同结论除非你明确知道自己在做什么否则不要用 fio 测试裸盘或带文件的分区。二、fio 为什么会“毁盘”例如以下命令fio -filename/dev/sdb1 -rwrandwrite -bs4k -size10G -ioenginelibaio -direct1 -nametest这条命令会从sdb1 的第一个扇区开始随机写入数据直接覆盖原有内容。执行后的文件系统展示如下df -h,如果存有重要数据我想你应该是崩溃的如果该分区已有文件系统ext4、xfs 等文件系统的元数据会被破坏结果就是分区无法挂载文件系统损坏实例宕机或进入紧急修复模式容量显示异常例如“64Z”。因此一定要使用文件系统路径测试。三、安全的 fio 测试方式1、安装 fio# 推荐直接使用 yum 安装yum install -y fio libaio-devel或手动安装wget http://brick.kernel.dk/snaps/fio-2.2.10.tar.gztar -zxvf fio-2.2.10.tar.gzcd fio-2.2.10make make install2、编写测试配置文件新建一个配置文件 fio.conf示例[global]ioenginelibaiodirect1thread1norandommap1randrepeat0runtime60ramp_time6size1gdirectory/data2# 修改为测试硬盘挂载目录[read4k-rand]stonewallgroup_reportingbs4krwrandreadnumjobs8iodepth32[read64k-seq]stonewallgroup_reportingbs64krwreadnumjobs4iodepth8[write4k-rand]stonewallgroup_reportingbs4krwrandwritenumjobs2iodepth4[write64k-seq]stonewallgroup_reportingbs64krwwritenumjobs2iodepth4执行测试fio fio.conf这样 fio 会在 /data2 下自动生成测试文件测试结束后可删除不会破坏现有系统。四、常见手动测试命令若需快速压测可使用以下示例命令# 顺序读fio -filename/mnt/data/testfile -direct1 -iodepth1 -thread -rwread \-ioenginepsync -bs16k -size10G -numjobs4 -runtime60 -group_reporting -nameseq-read# 顺序写fio -filename/mnt/data/testfile -direct1 -iodepth1 -thread -rwwrite \-ioenginepsync -bs16k -size10G -numjobs4 -runtime60 -group_reporting -nameseq-write# 随机读fio -filename/mnt/data/testfile -direct1 -iodepth1 -thread -rwrandread \-ioenginepsync -bs4k -size10G -numjobs4 -runtime60 -group_reporting -namerand-read# 随机写fio -filename/mnt/data/testfile -direct1 -iodepth1 -thread -rwrandwrite \-ioenginepsync -bs4k -size10G -numjobs4 -runtime60 -group_reporting -namerand-write# 混合随机读写70%读 / 30%写fio -filename/mnt/data/testfile -direct1 -iodepth1 -thread -rwrandrw -rwmixread70 \-ioenginepsync -bs4k -size10G -numjobs4 -runtime60 -group_reporting -namerandrw✅ 注意filename 必须指向挂载点内的测试文件或目录不要直接写 /dev/sdX。五、结果解读测试结束后fio 会输出如下信息IOPS54123, BW211MiB/s, Latency1.23ms关键指标说明六、总结不要直接对 /dev/sdX 执行 fio 测试那是“物理毁灭”级操作推荐在挂载目录内测试fio 会自动生成并删除测试文件对比不同存储介质SATA SSD、NVMe、RAID、云盘性能时务必保持同样的配置参数最后测试完记得 rm -f testfile 清理文件。小结一句话用 fio 测试磁盘性能没问题问题是你要知道“写到哪儿”。 写到分区头就是毁盘写到文件里才是压测。