这是一个Bash 磁盘监视脚本。使用(df)和实时 I/O 进程监控(iotop)。
脚本功能说明
- 磁盘空间概览:展示当前所有挂载分区的总大小、已用空间、可用空间及使用率。
- 高 I/O 进程排行:抓取当前读写磁盘最频繁的前 10 个程序,并显示其具体的读写速率。
- 自动环境检查:脚本会自动检测是否安装了
iotop工具(获取进程级 I/O 必须依赖),如果没有安装会给出提示并自动安装。
#!/bin/bash
# 脚本名称: disk_monitor.sh
# 功能描述: 监控磁盘空间占用及当前读写最频繁的前10个进程
# 设置颜色,让输出更美观
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
CYAN='\033[0;36m'
NC='\033[0m' # 无颜色
echo -e "${CYAN}==========================================${NC}"
echo -e "${CYAN} Linux 磁盘空间与 I/O 监控报告 ${NC}"
echo -e "${CYAN}==========================================${NC}"
echo "生成时间: $(date +"%Y-%m-%d %H:%M:%S")"
echo ""
# 1. 显示磁盘空间大小和占用量
echo -e "${YELLOW}【1. 磁盘空间使用情况】${NC}"
# 过滤掉 tmpfs、cdrom 等虚拟文件系统,只显示真实磁盘
df -hT | grep -vE '^Filesystem|tmpfs|cdrom|overlay'
echo ""
# 2. 显示当前读写磁盘频繁的程序前10名
echo -e "${YELLOW}【2. 磁盘 I/O 占用最高的前 10 个进程】${NC}"
# 检查是否安装了 iotop 工具
if ! command -v iotop &> /dev/null; then
echo -e "${GREEN}提示:未检测到 iotop 工具,正在尝试自动安装...${NC}"
# 自动识别系统并安装(需要 root 权限)
if [ -f /etc/debian_version ]; then
sudo apt update && sudo apt install -y iotop
elif [ -f /etc/redhat-release ]; then
sudo yum install -y iotop
else
echo -e "${GREEN}无法自动安装,请手动执行: sudo apt install iotop 或 sudo yum install iotop${NC}"
exit 1
fi
fi
if command -v iotop &> /dev/null; then
echo "正在抓取实时 I/O 数据(需 root 权限)..."
# -b: 批处理模式(非交互)
# -n 1: 只刷新 1 次就退出
# -o: 只显示实际有 I/O 操作的进程
# head -n 12: 截取前12行(包含2行表头+10个进程)
sudo iotop -b -n 1 -o | head -n 12
else
echo -e "${GREEN}iotop 安装失败或不可用,请检查系统权限。${NC}"
fi
echo ""
echo -e "${CYAN}==========================================${NC}"
echo "监控完成!"

- Total DISK READ / WRITE(总磁盘读/写速率):
表示所有进程在每秒内尝试读取或写入磁盘的数据总量。 - Actual DISK READ / WRITE(实际磁盘读/写速率):
表示物理硬盘每秒实际处理的数据量。
注意:为什么“总速率”和“实际速率”会不一样?
因为 Linux 系统有缓存(Cache)机制。有时候程序以为自己写入了很多数据(Total 很高),但实际上数据只是先被写进了内存缓存里,并没有立刻落到物理硬盘上,所以 Actual 可能会很低。
| 字段名 | 含义说明 |
|---|---|
| TID | 线程 ID(Thread ID)。如果是单线程程序,它通常等于进程 PID。 |
| PRIO | I/O 调度优先级。比如 be/4,表示该进程的 I/O 调度策略和优先级。 |
| USER | 运行该进程的系统用户(如 root, mysql, www 等)。 |
| DISK READ | 该进程当前的实时读取磁盘速度。 |
| DISK WRITE | 该进程当前的实时写入磁盘速度。 |
| SWAPIN | 进程从虚拟内存(Swap 分区)换入数据到物理内存的时间占比。如果这个数值很高,说明你的物理内存可能不够用了。 |
| IO | 进程等待 I/O 操作的时间占比。如果接近 100%,说明该进程被磁盘读写严重卡住了。 |
| COMMAND | 具体的进程命令或程序名称。 |
点击我直接下载脚本,密码:DxV8C
