iotop不能直接监控挂载点I/O,需结合iostat查设备、findmnt映射挂载点;pidstat -d -F可直查指定路径(sysstat≥12.5),否则用lsof提取PID再筛选;iotop可间接观察进程文件路径,inotifywait适合短时写入感知。

Linux 系统中监控各挂载点的实时 I/O 读写性能,不能直接靠 iotop 或 pidstat -d 实现——因为它们按进程/线程统计,不区分文件系统或挂载点。要观察“哪个挂载点(如 /var/log、/data)正在被高频读写”,核心工具是 iostat,配合挂载信息映射设备,再辅以 findmnt 或 lsblk 定位关联关系。
用 iostat 查看底层设备的实时 I/O,并关联挂载点
iostat 是最直接的手段,它显示每个块设备(如 sda、nvme0n1p2)的读写速率、IOPS、等待时间等。关键在于:一个挂载点通常对应一个设备分区,所以先查清挂载关系,再对照 iostat 输出即可定位。
- 查当前挂载点与设备映射:
findmnt -D(显示设备名+挂载点)或df -hT(带文件系统类型) - 实时监控设备 I/O(每秒刷新,共 5 次):
iostat -d -x -k 1 5
重点关注字段:
• rkB/s / wkB/s:每秒读/写千字节数
• %util:设备忙时占比(>70% 值得警惕)
• await:平均 I/O 等待毫秒数(持续 >10ms 可能存在瓶颈) - 例如输出中
nvme0n1p3的wkB/s长期高于 50000,再用findmnt | grep nvme0n1p3就能知道它挂载在/home——问题就落在这个挂载点上。
用 pidstat -d + 挂载路径过滤(需新版 sysstat 支持)
较新版本的 sysstat(≥12.5.0)支持通过 -F 参数指定挂载点路径,直接筛选出访问该挂载点的进程:
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
- 监控访问
/var/lib/mysql的所有进程 I/O:pidstat -d -F "/var/lib/mysql" 1 - 若提示不支持
-F,说明 sysstat 版本偏低,此时可退而求其次:
① 先用lsof +D /var/lib/mysql 2>/dev/null | awk '{print $2}' | sort -u提取相关 PID;
② 再用pidstat -d -p "PID1,PID2,..." 1聚焦查看。
用 iotop 辅助验证(间接但直观)
iotop 本身不显示挂载点,但它能列出进程打开的文件路径(需 root 权限 + 内核支持)。启用后按 o 键只显示活跃 I/O 进程,再按 p 切换到进程视图,观察 COMMAND 列中是否包含典型路径(如 mysqld ... /var/lib/mysql/ibdata1 或 rsync ... /backup),就能快速判断哪个挂载点被密集访问。
- 启动方式:
sudo iotop -o -P(仅显示有 I/O 的进程,忽略线程) - 注意:部分容器环境或精简内核可能禁用
/proc/PID/fd符号链接,导致路径显示为deleted或空白,此时仍需回归iostat + findmnt组合。
补充技巧:用 inotifywait 快速感知挂载点活动
如果目标是确认“某个挂载点此刻是否有写入行为”(比如排查日志轮转、临时文件生成),可用轻量级监听工具:
- 安装:
sudo apt install inotify-tools(Debian/Ubuntu)或yum install inotify-tools(RHEL/CentOS) - 监听
/opt/app/logs下的写事件:inotifywait -m -e create,modify,attrib,move_written_to /opt/app/logs
输出类似/opt/app/logs/ CREATE error.log,立刻可知有进程在操作该挂载点。 - 适合短时诊断,不替代性能指标监控,但能补全“谁在写、写什么”的上下文。


















