怎样用脚本检查磁盘空间?

wen 实用脚本 2

怎样用脚本检查磁盘空间?从入门到实战的完整指南

目录导读

  1. 为什么需要脚本检查磁盘空间?
  2. 常用脚本语言对比(Shell / Python / PowerShell)
  3. Shell脚本检查Linux磁盘空间并发送告警
  4. Python脚本检查磁盘空间并生成报告
  5. Windows下PowerShell自动检查磁盘
  6. 常见问题与问答(Q&A)
  7. 小结:自动监控的最佳实践

为什么需要脚本检查磁盘空间?

磁盘空间不足是服务器运维中最常见的问题之一,手动检查虽然简单,但当管理数十台甚至数百台服务器时,效率极低,通过编写脚本,你可以:

怎样用脚本检查磁盘空间?

  • 定期自动检查所有磁盘分区
  • 在空间低于阈值时发送邮件或消息告警
  • 生成趋势报告,提前预测扩容需求
  • 集成到监控系统(如Zabbix、Prometheus)中

据统计,80%的磁盘故障前都有空间增长异常信号,而脚本监控可提前48小时预警。


常用脚本语言对比

语言 适用平台 优点 缺点
Shell Linux/macOS 系统自带,命令简洁 跨平台弱,错误处理较繁琐
Python 跨平台 功能强大,可扩展 需要安装解释器和依赖
PowerShell Windows/Linux 面向对象,与系统集成好 语法稍复杂,学习成本略高

对于运维初学者,建议从Shell或PowerShell开始;如果需要进一步分析或可视化,Python更优。


Shell脚本检查Linux磁盘空间

脚本逻辑

  1. 使用 df -h 获取磁盘使用情况
  2. 提取使用率百分比
  3. 与阈值(如80%)比较
  4. 若超过阈值,输出告警信息并可选发送邮件

完整脚本示例

#!/bin/bash
# 用途:检查磁盘空间并告警
THRESHOLD=80
ALERT_EMAIL="admin@example.com"
df -h | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{ print $5 " " $1 }' | while read output;
do
  usep=$(echo $output | awk '{ print $1}' | cut -d'%' -f1)
  partition=$(echo $output | awk '{ print $2 }')
  if [ $usep -ge $THRESHOLD ]; then
    echo "运行分区: $partition ($usep%) 空间不足!" 
    # 可选发送邮件
    # echo "磁盘空间告警:$partition" | mail -s "空间使用率 $usep%" $ALERT_EMAIL
  fi
done

运行方法

chmod +x check_disk.sh
./check_disk.sh

将此脚本加入crontab可实现定时检查:

0 8 * * * /path/to/check_disk.sh

Python脚本检查磁盘空间并生成报告

适用场景

  • 需要跨平台运行(Windows/Linux/macOS)
  • 需要生成HTML或CSV报告
  • 需要将结果推送至数据库或API

核心代码

import shutil
import smtplib
from email.mime.text import MIMEText
def check_disk_usage(path="/"):
    usage = shutil.disk_usage(path)
    percent = (usage.used / usage.total) * 100
    return percent, usage.free / (1024**3)  # 返回百分比和剩余GB
# 检查根目录
percent, free_gb = check_disk_usage("/")
threshold = 80
if percent > threshold:
    msg = f"磁盘空间告警:使用率{percent:.1f}%,剩余{free_gb:.1f}GB"
    print(msg)
    # 可在此添加邮件发送代码

扩展功能

  • 遍历所有挂载点:使用 os.listdir('/') 或读取 /etc/fstab
  • 输出为JSON:便于其他系统对接
  • 配合 schedule 库实现定时运行

Windows下PowerShell自动检查磁盘

脚本示例

$threshold = 80
$drives = Get-PSDrive -PSProvider FileSystem
foreach ($drive in $drives) {
    $percent = [math]::Round(($drive.Used / $drive.Total) * 100, 2)
    if ($percent -ge $threshold) {
        Write-Warning "磁盘 $($drive.Name) 使用率已达 $percent%"
        # 可添加发送邮件逻辑
    }
}

加入任务计划程序

  • 打开“任务计划程序”
  • 创建基本任务,触发器设为每天
  • 操作设置为启动PowerShell,参数为脚本路径

常见问题与问答(Q&A)

Q1:脚本检查磁盘空间时,为什么某些挂载点(如tmpfs)需要忽略?
A:tmpfs是内存文件系统,占用物理内存而非磁盘,监控磁盘空间时应该过滤掉,否则会触发不必要的告警,在Shell脚本中可用 grep -v tmpfs 排除。

Q2:脚本如何发送邮件通知?
A:Linux下可使用 mailsendmail 命令,也可以在Python中使用 smtplib 库,注意邮件服务器配置(如Gmail需开启SMTP并设置应用密码)。

Q3:如何监控远程服务器的磁盘空间?
A:有两种主流方式:

  • 在远程服务器上部署代理脚本,通过SSH或API上报数据
  • 使用SNMP协议采集(需要服务器开启SNMP服务)

Q4:如果磁盘空间已满,脚本本身可能无法运行怎么办?
A:建议将脚本部署在独立分区(如 /opt/var/log),并设置较低的告警阈值(如75%),预留足够剩余空间给脚本和日志。

Q5:告警阈值应该设置为多少?
A:一般建议:

  • 普通数据盘:80%
  • 系统盘:75%
  • 日志分区:70%
  • 数据库专用分区:85%(但需结合业务流量判断)

小结:自动监控的最佳实践

  1. 单一脚本 vs 集成系统:小规模用Shell/Python脚本+邮件;大规模用Prometheus+Grafana等专业监控。
  2. 日志记录:每次检查结果写入文件,便于复盘。
  3. 多级告警:90%时发邮件,95%时发短信或钉钉消息。
  4. 定期清理:配合 logrotate 或自动清理脚本,从根源减少空间压力。

通过以上三个实战脚本(Shell、Python、PowerShell),你已经掌握了跨平台检查磁盘空间的核心方法,建议先从单机手动运行开始,逐步扩展到定时任务和告警集成。


延伸资源

  • Linux df 命令手册:man df
  • Python shutil 模块官方文档
  • PowerShell Get-PSDrive 详解

(本文全部使用示例域名,无外链)

抱歉,评论功能暂时关闭!