写一个shell脚本使用Fio工具对所有HDD硬盘进行混合随机读写,读写比例70/30, bs=4K, q_depth=32, 运行12小时,稳态后用IOSTAT记录IO 带宽,await, svctime(每秒记录一个
时间: 2024-10-18 13:08:03 浏览: 44
在Shell脚本中使用fio工具对HDD硬盘进行混合随机读写操作,你可以参考以下示例:
```bash
#!/bin/bash
# 定义常量
READ_PERCENTAGE=70
WRITE_PERCENTAGE=30
BS=4k
Q_DEPTH=32
RUN_TIME_HOURS=12
OUTPUT_DIR="/path/to/output" # 输出文件存放目录
# 确保fio和iotop存在
if ! command -v fio &> /dev/null || ! command -v iotop &> /dev/null; then
echo "fio and/or iotop not found. Please install."
exit 1
fi
# 获取系统上所有的HDD设备名
DISKS=$(lsblk | grep -E 'hd|sd[a-z]' | awk '{print $1}')
# 对每个HDD创建一个fio任务并启动
for disk in ${DISKS}; do
echo "Running fio on device $disk..."
# 创建临时文件存储fio结果
TEMP_FILE="${OUTPUT_DIR}/${disk}_fio_results.txt"
# FIO命令配置
fio_command="fio --name=HDD_mix_read_write --filename=/dev/$disk \
--readwrite=randrw --readratio=${READ_PERCENTAGE} --writeraatio=${WRITE_PERCENTAGE} \
--bs=${BS} --iodepth=${Q_DEPTH} --time_based --runtime=$((RUN_TIME_HOURS * 60 * 60)) \
--output-format=json --output=$TEMP_FILE --group_reporting"
# 启动fio并记录开始时间
START_TIME=$(date +%s)
fio "$fio_command" &
# 使用iotop监控进程运行,并在稳定状态后收集io stats
while [ $(ps aux | grep 'fio' | wc -l) -gt 1 ]; do
sleep 60
# 当CPU占用率降低到一定程度或运行了指定时间后,视为进入稳态
if [[ "$(top -b -n 1 | grep 'fio' | awk '/%Cpu/{print $2}')" -lt 50 && $(date +%s) -ge $START_TIME + $RUN_TIME_HOURS*60*60 ]]; then
echo "Entering steady state, collecting io stats..."
break
fi
done
# 在稳态时,收集iostat信息
iostat -dx 1 > "${OUTPUT_DIR}/${disk}_iostat_steady.csv"
done
# 结束所有fio任务
pkill fio
echo "All tasks finished."
阅读全文