df命令只显示静态空间占用率,无法反映读写活跃度;需用iostat -x查看设备级r/s与w/s请求比或rmb/s与wmb/s吞吐比,再结合lsblk/findmnt映射挂载点,辅以pidstat -d和lsof定位具体进程及文件路径。

df 命令不能显示读写占比,它只反映静态空间占用
df 读的是文件系统超级块里的空闲块数,本质是快照式元数据统计,不采集 I/O 行为。它输出的 Use% 是容量占比,和“读写活跃度”完全无关。想看读写占比,必须切换到 I/O 监控维度,不是空间维度。
用 iostat -x 查看每个挂载点对应设备的读写占比
Linux 文件系统本身不直接暴露“读写占比”,但底层块设备(如 /dev/sda1)的 I/O 活动可以映射到挂载点。关键步骤是:先用 lsblk 或 findmnt 确认挂载点对应的设备名,再用 iostat -x 1 观察实时指标:
-
%util接近 100% 表示该设备持续忙于 I/O,但不区分读写 -
r/s和w/s分别是每秒读、写请求数,二者比值就是请求层面的读写占比 -
rMB/s和wMB/s是吞吐量层面的读写占比,更贴近实际带宽分配 - 注意:同一设备可能挂载多个目录(如
/和/home共享/dev/sda1),iostat只能按设备粒度统计,无法精确到单个挂载点的 I/O 占比
想区分挂载点级读写,得靠 pidstat + lsof 配合追踪
没有内核原生命令能直接输出“/var/log 占用了本设备 70% 的写入流量”,但可逼近定位:
- 用
pidstat -d 1查看哪些进程在持续写入(重点关注kB_wr/s列) - 对高写入进程运行
lsof -p <pid></pid>,筛选出路径在目标挂载点下的文件(如lsof -p 1234 | grep "/var/log") - 结合
iotop -o(需 root)可直观看到每个进程的实时读写速率,并按挂载点过滤(iotop显示的 PATH 列含挂载点前缀) - 注意:
iotop默认不显示已关闭但仍在缓冲区刷盘的脏页,echo 1 > /proc/sys/vm/block_dump(慎用)可抓底层块设备调用,但会产生大量日志
ext4/xfs 等主流文件系统不记录历史读写占比,别白费劲查日志
文件系统元数据(如 inode、superblock)里只有最后访问/修改时间戳(atime/mtime),没有累计读字节数或写字节数字段。试图用 stat -f 或 xfs_info 查读写占比,结果一定是空的或报错。监控必须依赖运行时工具链(iostat/pidstat/iotop),而不是静态元数据查询。
真正容易被忽略的点是:所谓“文件系统读写占比”其实是个伪命题——它既不是内核暴露的指标,也不是文件系统维护的状态。你真正要问的,通常是“哪个挂载点正在拖慢磁盘响应”,答案不在元数据里,而在 iostat 的 await 和 %util,以及 iotop 里排在最顶上的几个进程。











