当前位置: 首页 > news >正文

FIO 实战详解:安全测试 Linux 磁盘 IOPS 的正确方法

在性能测试中,磁盘 IOPS(Input/Output Operations Per Second)是衡量存储系统性能的重要指标。 但很多人拿到 fio 命令后就直接对 /dev/sdX 开始“无脑测试”,结果数据全毁、分区损坏、系统宕机。

本文将系统讲解fio 的正确使用方式,以及如何安全地测试磁盘性能

一、fio 简介

fio(Flexible I/O Tester) 是 Linux 下最常用的磁盘性能测试工具,支持多线程、多种 I/O 模式(顺序、随机、混合)和多种 I/O 引擎。 它既能测试裸盘性能,也能测试挂载后的文件系统性能。

但这两种模式的风险完全不同:

结论:除非你明确知道自己在做什么,否则不要用 fio 测试裸盘或带文件的分区

二、fio 为什么会“毁盘”?

例如以下命令:

fio -filename=/dev/sdb1 -rw=randwrite -bs=4k -size=10G -ioengine=libaio -direct=1 -name=test

这条命令会从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.gz
tar -zxvf fio-2.2.10.tar.gz
cd fio-2.2.10
make && make install

2、编写测试配置文件

新建一个配置文件 fio.conf(示例):

[global]
ioengine=libaio
direct=1
thread=1
norandommap=1
randrepeat=0
runtime=60
ramp_time=6
size=1g
directory=/data2# 修改为测试硬盘挂载目录

[read4k-rand]
stonewall
group_reporting
bs=4k
rw=randread
numjobs=8
iodepth=32

[read64k-seq]
stonewall
group_reporting
bs=64k
rw=read
numjobs=4
iodepth=8

[write4k-rand]
stonewall
group_reporting
bs=4k
rw=randwrite
numjobs=2
iodepth=4

[write64k-seq]
stonewall
group_reporting
bs=64k
rw=write
numjobs=2
iodepth=4

执行测试:

fio fio.conf

这样 fio 会在 /data2 下自动生成测试文件,测试结束后可删除,不会破坏现有系统。

四、常见手动测试命令

若需快速压测,可使用以下示例命令:

# 顺序读
fio -filename=/mnt/data/testfile -direct=1 -iodepth=1 -thread -rw=read \
-ioengine=psync -bs=16k -size=10G -numjobs=4 -runtime=60 -group_reporting -name=seq-read

# 顺序写
fio -filename=/mnt/data/testfile -direct=1 -iodepth=1 -thread -rw=write \
-ioengine=psync -bs=16k -size=10G -numjobs=4 -runtime=60 -group_reporting -name=seq-write

# 随机读
fio -filename=/mnt/data/testfile -direct=1 -iodepth=1 -thread -rw=randread \
-ioengine=psync -bs=4k -size=10G -numjobs=4 -runtime=60 -group_reporting -name=rand-read

# 随机写
fio -filename=/mnt/data/testfile -direct=1 -iodepth=1 -thread -rw=randwrite \
-ioengine=psync -bs=4k -size=10G -numjobs=4 -runtime=60 -group_reporting -name=rand-write

# 混合随机读写(70%读 / 30%写)
fio -filename=/mnt/data/testfile -direct=1 -iodepth=1 -thread -rw=randrw -rwmixread=70 \
-ioengine=psync -bs=4k -size=10G -numjobs=4 -runtime=60 -group_reporting -name=randrw

✅ 注意:filename 必须指向挂载点内的测试文件或目录,不要直接写 /dev/sdX。

五、结果解读

测试结束后,fio 会输出如下信息:

IOPS=54123, BW=211MiB/s, Latency=1.23ms

关键指标说明:

六、总结

  • 不要直接对 /dev/sdX 执行 fio 测试,那是“物理毁灭”级操作;
  • 推荐在挂载目录内测试,fio 会自动生成并删除测试文件;
  • 对比不同存储介质(SATA SSD、NVMe、RAID、云盘)性能时,务必保持同样的配置参数;
  • 最后测试完记得 rm -f testfile 清理文件。

📘小结一句话:

用 fio 测试磁盘性能没问题,问题是你要知道“写到哪儿”。 写到分区头就是毁盘,写到文件里才是压测。

http://www.jsqmd.com/news/1370506/

相关文章:

  • Linux服务器安全防护:从kdevtmpfsi挖矿病毒清除到系统加固实战
  • Ubuntu 22.04部署Nacos:从环境配置到生产级安全加固实战指南
  • Spring Boot Maven插件:mvn spring-boot:run命令原理与实战指南
  • MVC架构在前端复杂系统中的应用与实践
  • Kubernetes 服务治理开发短记:本地验证怎么做
  • Win11语音输入失效?从权限到驱动的完整排查修复指南
  • 为命令行工具打造Web面板:从终端到服务的工程实践
  • Windows环境下Kafka单机部署与实战排坑指南
  • Linux rm -r 不询问删除
  • 基于MCP协议的Unity智能开发:从自然语言到自动化工作流
  • 解决Harvester部署RKE2集群时的私有CA证书信任问题
  • Docker 容器化与安全加固:容器响应延迟分析与性能调优
  • 一小时搭建SpringBoot+Vue在线考试系统:从零到部署的完整实战
  • OpenClaw-RL异步并行训练架构解析:从A3C思想到工程实现
  • 实战SSH安全:从日志分析到主动防御与监控体系构建
  • 基于Godot开源RPG项目学习游戏开发:架构、战斗与数据驱动设计
  • 微信视频号数据采集实战:抓包分析与Python爬虫实现
  • 方便简洁的CRM管理系统选哪家?2026年小微企业橙子云 - 品牌优推
  • 2026年北京优秀的工业触控一体机生产厂家哪家强认准北京万幕康科技 - 品牌优推
  • 写技术文章时,怎样把知识体系做成可维护的索引
  • OpenMemory:为AI Agent构建认知记忆引擎的架构设计与实战
  • 万源市瓷砖空鼓维修上门服务推荐_2026四川盆地避坑指南与价格表_客厅卫生间厨房阳台墙砖地砖 - 雨婺虹修缮
  • Python抓包实战:逆向拼多多App接口与反爬策略解析
  • Ubuntu 20.04与Windows双系统安装:从分区原理到引导配置完整指南
  • D8(YT88)加密狗开发实战:从驱动安装到高级防护策略
  • veeam备份失败,查看日志提示快照溢出
  • Spring Boot中HttpServletRequestWrapper原理与应用实战
  • Matlab微电网博弈建模与主从博弈实战
  • 免费视频去水印工具推荐,在线去水印网站风险、开源免费软件怎么选 - 免费软件工具方法教程
  • 河南hdpe同层排水管厂商推荐几家?2026甄选指南河南中泽(河南联络处) - 品牌优推