Linux/Windows服务器:BAT/SH脚本监控磁盘空间异常排查


引言:磁盘空间告警,一场运维的”寻宝游戏”

磁盘空间不足是服务器运维过程中常见的问题,轻则影响应用运行,重则导致系统崩溃。高效的监控和快速的排查是解决此类问题的关键。在Linux和Windows服务器上,我们可以利用SHBAT脚本实现自动化监控和异常排查,从而及时发现并解决磁盘空间问题,保障服务的稳定运行。

磁盘空间监控脚本的核心原理

无论是Linux的SH脚本还是Windows的BAT脚本,其核心原理都是通过命令行工具获取磁盘空间信息,然后根据预设的阈值判断是否触发告警。这些信息通常包括磁盘总容量、已用空间、可用空间以及使用率等。脚本会定期执行,并将监控结果发送给运维人员或者记录到日志文件中。

Linux (SH) 脚本原理

在Linux中,我们通常使用df命令获取磁盘空间信息。df命令可以显示文件系统的磁盘空间使用情况。通过结合awkgrep等工具,可以提取出特定磁盘分区的空间使用率。

Windows (BAT) 脚本原理

在Windows中,可以使用wmic命令或者powershell命令获取磁盘空间信息。wmic命令是一个强大的命令行管理工具,可以查询系统的各种信息,包括磁盘空间。powershell提供了更灵活的方式来处理数据,但需要确保目标服务器上安装了powershell

Linux磁盘空间监控脚本实战

下面是一个简单的Linux磁盘空间监控脚本示例 (disk_space_monitor.sh):


#!/bin/bash

# 定义告警阈值 (百分比)
THRESHOLD=80

# 获取根目录磁盘使用率

# 判断是否超过阈值
if [ "$USAGE" -gt "$THRESHOLD" ]; then
  echo "Warning: Root partition usage is above $THRESHOLD% ($USAGE%)"
  # 可以发送邮件告警或者记录日志
  # 例如:echo "Warning: Root partition usage is above $THRESHOLD% ($USAGE%)" | mail -s "Disk Space Alert" your_email@example.com
fi

脚本详解:

  • #!/bin/bash:指定脚本解释器。
  • THRESHOLD=80:定义告警阈值为80%。
  • df -h /:显示根目录的磁盘空间使用情况,-h选项表示以人类可读的格式显示。
  • awk 'NR==2{print $5}':提取第二行(即磁盘信息行)的第五列(即使用率)。
  • tr -d '%':删除百分号,方便后续的数值比较。
  • if [ "$USAGE" -gt "$THRESHOLD" ]; then ... fi:判断使用率是否超过阈值,如果超过则输出告警信息。
  • 可以根据实际需求,将告警信息发送到邮件、短信或者其他监控系统。

实战案例:结合cron实现定时监控

可以将上述脚本添加到cron定时任务中,实现定时监控。例如,每天凌晨1点执行一次:


0 1 * * * /path/to/disk_space_monitor.sh

注意事项:

  • 确保脚本具有执行权限 (chmod +x disk_space_monitor.sh)。
  • 根据实际需求调整告警阈值和监控频率。
  • 可以监控多个磁盘分区,只需修改df -h /中的路径即可。

Windows磁盘空间监控脚本实战

下面是一个简单的Windows磁盘空间监控脚本示例 (disk_space_monitor.bat):


@echo off
rem 定义告警阈值 (百分比)
set THRESHOLD=80

rem 获取C盘磁盘使用率
for /f "tokens=2 delims==" %%a in ('wmic logicaldisk where "DeviceID='C:'" get FreeSpace /value') do set "FREESPACE=%%a"
for /f "tokens=2 delims==" %%a in ('wmic logicaldisk where "DeviceID='C:'" get Size /value') do set "TOTALSIZE=%%a"

set /a USAGE=100 - (100 * %FREESPACE% / %TOTALSIZE%)

rem 判断是否超过阈值
if %USAGE% GTR %THRESHOLD% (
  echo Warning: C drive usage is above %THRESHOLD% (%USAGE%)
  rem 可以将告警信息写入日志文件
  echo Warning: C drive usage is above %THRESHOLD% (%USAGE%) >> disk_space_alert.log
)

脚本详解:

  • @echo off:关闭命令回显。
  • set THRESHOLD=80:定义告警阈值为80%。
  • wmic logicaldisk where "DeviceID='C:'" get FreeSpace /value:使用wmic命令获取C盘的剩余空间。
  • wmic logicaldisk where "DeviceID='C:'" get Size /value:使用wmic命令获取C盘的总空间。
  • set /a USAGE=100 - (100 * %FREESPACE% / %TOTALSIZE%):计算C盘的使用率。
  • if %USAGE% GTR %THRESHOLD% ( ... ):判断使用率是否超过阈值,如果超过则输出告警信息。
  • 可以将告警信息写入日志文件,方便后续分析。

实战案例:使用计划任务实现定时监控

可以使用Windows的计划任务功能,定时执行上述脚本。例如,每隔1小时执行一次:

  1. 打开“任务计划程序”。
  2. 点击“创建基本任务”。
  3. 输入任务名称,例如“Disk Space Monitor”。
  4. 选择触发器,例如“每天”或“每周”。
  5. 设置开始时间和频率。
  6. 选择“启动程序”作为操作。
  7. 在“程序或脚本”中输入cmd.exe
  8. 在“添加参数”中输入/c C:\path\to\disk_space_monitor.bat
  9. 完成任务创建。

注意事项:

  • 根据实际需求调整告警阈值和监控频率。
  • 可以监控多个磁盘分区,只需修改wmic命令中的DeviceID即可。
  • 确保计划任务具有执行权限。

磁盘空间异常排查思路

当收到磁盘空间告警后,需要进行排查,找出占用大量磁盘空间的罪魁祸首。以下是一些常用的排查思路:

Linux磁盘空间排查

  • 使用du命令:du -sh /* 命令可以显示每个目录和文件的大小,-s 选项表示只显示