iostat -p 用于显示指定磁盘及其所有分区的I/O统计,但需搭配 -x 才能获取await、%util、avgqu-sz等关键负载指标;默认不预装,须先安装sysstat包。

直接用 iostat -p 可以查看指定磁盘及其所有分区的读写负载分布,但要注意它默认不显示详细指标,需搭配 -x 才能获得真正有用的负载分析数据。
确认 sysstat 已安装并启用
多数发行版默认不预装 iostat。需先安装 sysstat 包:
- Ubuntu/Debian:
sudo apt install sysstat - CentOS/RHEL/Alibaba Cloud Linux:
sudo yum install -y sysstat或sudo dnf install -y sysstat
安装后无需额外启用服务,命令即可立即使用。
用 -p 显示分区级 I/O 统计
-p 参数会列出主设备(如 sda)及其所有可见分区(如 sda1、sda2、sda3),便于定位具体分区是否异常:
- 基础用法:
iostat -p 2—— 每 2 秒刷新一次,显示所有设备及分区 - 只看某块盘的分区:
iostat -p /dev/sdb 2—— 仅输出sdb及其分区(如sdb1) - 带时间戳便于比对:
iostat -p -t 2
注意:-p 单独使用时,输出中只有基础指标(r/s、w/s、kB_read/s 等),无法判断响应延迟或队列积压。
必须加 -x 才能分析真实负载瓶颈
分区级负载是否“高”,不能只看吞吐量(kB/s)或 IOPS(r/s+w/s),关键要看以下三项:
- %util:若持续 ≥90%,说明该分区所在物理设备已饱和
-
await:平均每次 I/O 请求耗时(毫秒)。明显高于
svctm(实际服务时间),说明请求在队列中等待过久 - avgqu-sz:平均队列长度。长期 >1 表示请求持续积压,磁盘响应不过来
所以推荐组合命令:iostat -x -p /dev/sda 2。这样既能按分区拆解,又能看到完整负载画像。
快速识别问题分区的小技巧
当输出内容较多时,可配合 grep 快速聚焦:
- 筛选高 %util 分区:
iostat -x -p 2 | grep -E 'sda[0-9]+.*[9][0-9]?$' - 导出 10 次采样供排查:
iostat -x -p -m 2 10 > disk_part_report.txt(单位为 MB/s,更易读) - 对比多个分区的 await 差异:
iostat -x -p 1 | awk '$1 ~ /^sd[a-z][0-9]+$/ {print $1, $10}' | sort -k2 -nr | head -5
分区本身不产生 I/O,它的负载完全来自挂载其上的文件系统活动。若某个分区 %util 异常高,下一步应结合 iotop 查看哪些进程正在频繁读写该挂载点。











