怎样用脚本检查磁盘空间?从入门到实战的完整指南
目录导读
- 为什么需要脚本检查磁盘空间?
- 常用脚本语言对比(Shell / Python / PowerShell)
- Shell脚本检查Linux磁盘空间并发送告警
- Python脚本检查磁盘空间并生成报告
- Windows下PowerShell自动检查磁盘
- 常见问题与问答(Q&A)
- 小结:自动监控的最佳实践
为什么需要脚本检查磁盘空间?
磁盘空间不足是服务器运维中最常见的问题之一,手动检查虽然简单,但当管理数十台甚至数百台服务器时,效率极低,通过编写脚本,你可以:

- 定期自动检查所有磁盘分区
- 在空间低于阈值时发送邮件或消息告警
- 生成趋势报告,提前预测扩容需求
- 集成到监控系统(如Zabbix、Prometheus)中
据统计,80%的磁盘故障前都有空间增长异常信号,而脚本监控可提前48小时预警。
常用脚本语言对比
| 语言 | 适用平台 | 优点 | 缺点 |
|---|---|---|---|
| Shell | Linux/macOS | 系统自带,命令简洁 | 跨平台弱,错误处理较繁琐 |
| Python | 跨平台 | 功能强大,可扩展 | 需要安装解释器和依赖 |
| PowerShell | Windows/Linux | 面向对象,与系统集成好 | 语法稍复杂,学习成本略高 |
对于运维初学者,建议从Shell或PowerShell开始;如果需要进一步分析或可视化,Python更优。
Shell脚本检查Linux磁盘空间
脚本逻辑
- 使用
df -h获取磁盘使用情况 - 提取使用率百分比
- 与阈值(如80%)比较
- 若超过阈值,输出告警信息并可选发送邮件
完整脚本示例
#!/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下可使用 mail 或 sendmail 命令,也可以在Python中使用 smtplib 库,注意邮件服务器配置(如Gmail需开启SMTP并设置应用密码)。
Q3:如何监控远程服务器的磁盘空间?
A:有两种主流方式:
- 在远程服务器上部署代理脚本,通过SSH或API上报数据
- 使用SNMP协议采集(需要服务器开启SNMP服务)
Q4:如果磁盘空间已满,脚本本身可能无法运行怎么办?
A:建议将脚本部署在独立分区(如 /opt 或 /var/log),并设置较低的告警阈值(如75%),预留足够剩余空间给脚本和日志。
Q5:告警阈值应该设置为多少?
A:一般建议:
- 普通数据盘:80%
- 系统盘:75%
- 日志分区:70%
- 数据库专用分区:85%(但需结合业务流量判断)
小结:自动监控的最佳实践
- 单一脚本 vs 集成系统:小规模用Shell/Python脚本+邮件;大规模用Prometheus+Grafana等专业监控。
- 日志记录:每次检查结果写入文件,便于复盘。
- 多级告警:90%时发邮件,95%时发短信或钉钉消息。
- 定期清理:配合
logrotate或自动清理脚本,从根源减少空间压力。
通过以上三个实战脚本(Shell、Python、PowerShell),你已经掌握了跨平台检查磁盘空间的核心方法,建议先从单机手动运行开始,逐步扩展到定时任务和告警集成。
延伸资源:
- Linux
df命令手册:man df - Python
shutil模块官方文档 - PowerShell
Get-PSDrive详解
(本文全部使用示例域名,无外链)