sadf 分析长期磁盘性能的核心是将 sysstat 采集的二进制历史数据(/var/log/sa/saXX)转换为结构化格式,再按时间维度筛选、聚合或可视化;它不直接采集,而是“翻译”已有数据,前提是系统已启用 sysstat 并持续记录磁盘指标。

用 sadf 分析长期磁盘性能,核心是把 sysstat 采集的二进制历史数据(/var/log/sa/saXX)转换成结构化格式,再结合时间维度做筛选、聚合或可视化。它不直接采集,而是“翻译”已有数据,所以前提是系统已启用 sysstat 并持续记录。
确认数据源是否就绪
先检查磁盘性能数据是否已在日志中积累:
-
ls -l /var/log/sa/sa[0-9][0-9]—— 看是否有近几日的 sa 文件(如 sa20、sa21) -
sar -d -f /var/log/sa/sa20 | head -5—— 尝试读取某天的磁盘统计,确认-d(设备 I/O)数据存在 - 若无输出或报错 “No data”,说明
sysstat未启用或未配置采集磁盘指标。需确保/etc/cron.d/sysstat中的sa1调用含-d参数(如*/10 * * * * root /usr/lib64/sa/sa1 -d -S -F 1 1)
用 sadf 提取关键磁盘指标
sadf 默认输出 CSV 格式,适合后续用 awk、gnuplot 或 Excel 处理。常用磁盘字段包括:r/s(读请求数)、w/s(写请求数)、rkB/s、wkB/s(吞吐)、await(平均响应时间)、%util(设备利用率):
- 导出某天所有磁盘的详细 I/O 数据(CSV):
sadf -d -f /var/log/sa/sa20 -- -d - 只提取特定设备(如 sda)的 await 和 %util,并转为带时间戳的简洁列表:
sadf -d -f /var/log/sa/sa20 -- -d | awk -F';' '$8=="sda"{print $1","$13","$17}'
(注:字段序号依输出而定,可用sadf -d -f /var/log/sa/sa20 -- -d | head -1查看表头) - 合并多日数据,按日期汇总每日最大 %util:
for d in $(seq -w 20 26); do echo "sa$d:"; sadf -d -f /var/log/sa/sa$d -- -d | awk -F';' '$8=="sda"{print $17}' | sort -n | tail -1; done
生成图表辅助趋势判断
sadf 内置绘图支持(需搭配 gnuplot),可快速生成时间序列图:
- 画出 sda 的 %util 随时间变化曲线:
sadf -g -f /var/log/sa/sa20 -- -d | grep sda | gnuplot -e "set terminal png; set output 'sda_util.png'; plot '-' using 1:15 with lines title '%util'"
(其中第15列通常是 %util,需根据实际字段调整) - 导出为 JSON,便于导入 Grafana 或 Python 分析:
sadf -j -f /var/log/sa/sa20 -- -d
结合其他工具交叉验证
sadf 输出的是设备级汇总数据,若发现异常(如 %util 持续 100% 或 await 突增),需进一步定位原因:
- 查是否为 I/O 密集型进程:
pidstat -d -f /var/log/sa/sa20 -s 14:00:00 3600(提取下午时段每秒进程级 I/O) - 确认磁盘类型与调度器是否匹配:
cat /sys/block/sda/queue/rotational(0=SSD,应配none或mq-deadline) - 排除硬件隐患:
sudo smartctl -a /dev/sda | grep -E "(Reallocated|Pending|UDMA_CRC)"



















