分析磁盘历史I/O性能需先确认sysstat启用并存在sarXX日志文件,再用sar -d读取;重点关注tps、rd_sec/s、wr_sec/s、avgrq-sz、avgqu-sz、await等指标,注意设备名识别、%util局限性及日志缺失原因。

要分析磁盘历史 I/O 性能,关键在于两步:确保 sysstat 已启用历史数据采集,再用 sar -d 读取保存的二进制日志。
确认历史数据已开启并存在
sysstat 默认每10分钟通过 /etc/cron.d/sysstat 触发 sadc 记录数据,但需满足三个条件:
- sysstat 服务已启用:
sudo systemctl enable --now sysstat -
/var/log/sysstat/目录下有类似sarXX的文件(XX 为日期,如sar08表示8号数据) -
/etc/default/sysstat中ENABLED="true"(Ubuntu/Debian)或/etc/sysconfig/sysstat中SYSSTAT_COLLECTOR="yes"(RHEL/CentOS)
用 sar -d 查看磁盘历史 I/O
指定日期和设备,可精准提取某天某盘的读写、响应、队列等指标:
Linux AI 服务器 — 将 Linux 服务器转换为本地 AI 推理集群。使用 systemd、NVIDIA CUDA 实现无头 Linux AI,零 GUI 开销。
- 查当天所有块设备 I/O(默认最近24小时):
sar -d - 查10月5日的数据:
sar -d -f /var/log/sysstat/sar05 - 只看特定设备(如 sda):
sar -d -f /var/log/sysstat/sar05 | grep sda - 加时间范围(需配合 -s 和 -e):
sar -d -s 10:00:00 -e 12:00:00 -f /var/log/sysstat/sar05
输出中重点关注:tps(每秒传输数)、rd_sec/s 和 wr_sec/s(每秒读/写字节数)、avgrq-sz(平均请求大小)、avgqu-sz(平均队列长度)、await(I/O 平均等待毫秒)——这些直接反映磁盘负载与响应效率。
导出与对比更长时间段的 I/O 趋势
单次查看不够?可批量提取多日数据做横向比对:
- 合并多日数据并排序:
for d in {01..08}; do sar -d -f /var/log/sysstat/sar$d 2>/dev/null | grep 'sda$'; done | sort -k1,2 - 提取关键字段生成简易报表:
sar -d -f /var/log/sysstat/sar05 | awk '/sda$/ {print $1,$2,$3,$7,$10}'(时间、tps、rd_sec/s、wr_sec/s、await) - 若需图形化,可先用
sar -d -f ... > io-20261005.csv导出,再导入 Excel 或 gnuplot 处理
注意几个常见陷阱
历史 I/O 分析容易误判,主要因为:
- 默认
sar -d显示的是“设备名”,但内核可能重命名(如 nvme0n1、dm-0),建议先用lsblk或cat /proc/partitions确认实际设备标识 -
sar -d输出中的 %util 是估算值(基于活跃时间占比),高 util 不一定代表瓶颈,需结合 await 和 avgqu-sz 判断是否排队严重 - 如果
/var/log/sysstat/下没有对应日期文件,说明当天未成功采集,检查systatcron 是否运行、磁盘空间是否充足(日志默认保留7天)


















