磁盘监视脚本
磁盘监视脚本

磁盘监视脚本

这是一个Bash 磁盘监视脚本。使用(df)和实时 I/O 进程监控(iotop)。

脚本功能说明

  1. 磁盘空间概览:展示当前所有挂载分区的总大小、已用空间、可用空间及使用率。
  2. 高 I/O 进程排行:抓取当前读写磁盘最频繁的前 10 个程序,并显示其具体的读写速率。
  3. 自动环境检查:脚本会自动检测是否安装了 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 "监控完成!"


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

点击我直接下载脚本,密码:DxV8C