宝塔面板磁盘爆满排查与清理全记录
前言前几天登录宝塔面板发现磁盘空间告急日志文件都清理了怎么磁盘占用率还这么高81.52G / 98.3G剩余不足 17%。虽然服务器负载不高但这个磁盘占用率让人隐隐不安——如果不及时处理数据库写入失败、网站无法上传、面板报错等问题随时可能找上门。于是我开始了这次磁盘清理之旅。整个过程比想象中曲折也意外发现了一个坑。记录下来希望对遇到类似问题的朋友有所帮助。第一步定位元凶SSH 登录服务器执行du -sh /www/* | sort -rh | head -20结果一目了然41G /www/backup 27G /www/server 1.9G /www/wwwlogs 1.2G /www/wwwroot问题很清晰/www/backup占了 41GB是总磁盘占用的一半。显然备份目录出了问题。第二步深入备份目录执行du -sh /www/backup/*结果让人一惊938M /www/backup/database 39G /www/backup/panel ← 罪魁祸首 909M /www/backup/sitepanel目录占了 39GB。这是宝塔面板的配置备份目录正常情况下只有几十 MB显然异常膨胀了。第三步查看 panel 目录内容执行ls -lh /www/backup/panel/真相大白-rw--- 1 root root 346M Jan 17 00:16 2026-01-17.zip -rw--- 1 root root 346M Jan 18 00:15 2026-01-18.zip ... -rw--- 1 root root 362M Mar 3 00:37 2026-03-03.zip从 1 月 17 日到 3 月 3 日每天一个 350MB 的压缩包累积了约 110 个文件。宝塔面板的自动备份功能一直在默默运行却从未清理过旧文件。第四步清理与解决立即释放空间rm -f /www/backup/panel/*.zip执行后磁盘从 81GB 降至 40GB 左右空间立刻释放。长效方案设置自动清理与其强行关闭备份不如设置自动清理规则。在宝塔面板的「计划任务」中添加任务类型Shell 脚本执行周期每天 凌晨 3:00脚本内容find /www/backup/panel/ -name *.zip -mtime 7 -delete这样每天自动删除 7 天前的备份既能保留最近的安全回滚点又不会让磁盘再次爆满。附任务排查逻辑解析有朋友问为什么要查crontab那些加密名字的任务是怎么排查的这里单独展开讲讲如何排查服务器上的定时任务。为什么要查定时任务清理完 39GB 旧文件后如果不关闭自动备份明天又会生成一个新的 360MB 压缩包。虽然有了自动清理脚本每天删 7 天前的可以兜底但更好的做法是先搞清楚这个备份是谁创建的还会不会继续写所以需要排查宝塔面板的定时任务系统。任务排查的完整思路第一步查看当前用户的定时任务列表crontab -l这个命令会列出当前用户通常是root的所有定时任务。我们当时看到的输出是10 * * * * /www/server/cron/3ab48c27ec99cb9787749c362afae517 /www/server/cron/...log 21 02 * * * * /www/server/cron/46a3ddacac2d541df7368f077287b174 /www/server/cron/...log *1 * * * * /www/server/cron/6f019627a35217391176398968f8afa7 /www/server/cron/...log ...共 10 条观察要点所有任务都指向/www/server/cron/目录下的文件文件名都是无意义的 32 位随机字符串每条任务都带日志重定向...log这是宝塔面板的常见做法将具体逻辑封装到脚本文件中然后用随机命名隐藏任务的真实用途。这样做可以防止用户误删或被篡改但也给排查带来了困难。第二步用关键词搜索任务脚本内容因为无法从任务名看出用途需要直接搜索脚本内容。grep -l panel /www/server/cron/*-l只输出包含关键词的文件名不输出匹配行内容panel搜索面板相关的关键字搜索结果/www/server/cron/3ab48c27ec99cb9787749c362afae517 /www/server/cron/3ab48c27ec99cb9787749c362afaa517.log /www/server/cron/46a3ddacac2d541df7368f077287b174找到了 3 个包含panel的文件。其中.log是日志文件可以忽略重点关注另外两个脚本文件。第三步查看脚本内容确认用途cat /www/server/cron/3ab48c27ec99cb9787749c362afae517输出内容#!/bin/bash PATH... export PATH echo $$ /www/server/cron/3ab48c27ec99cb9787749c362afae517.pl /www/server/panel/pyenv/bin/python3 -u /www/server/panel/class/acme_v2.py --renew1 echo --- ... rm -f /www/server/cron/3ab48c27ec99cb9787749c362afae517.pl关键识别点acme_v2.py --renew1这是一个Lets Encrypt SSL 证书自动续期任务不是面板备份。不能删除否则网站 HTTPS 证书到期后不会自动续期。第四步扩展搜索范围如果panel没搜到想要的目标可以换其他关键词# 搜索备份相关的关键词 grep -l backup /www/server/cron/* # 搜索 zip 压缩相关的面板备份会打包成 .zip grep -l \.zip /www/server/cron/* # 查看所有非日志脚本的头几行 for f in /www/server/cron/*; do if [ -f $f ] ! echo $f | grep -q \.log$; then echo $f head -5 $f fi done为什么没用bt命令宝塔官方提供了bt命令行工具理论上输入18可以关闭面板自动备份。但是版本差异不同宝塔版本的菜单编号可能不同状态不一致部分面板版本中这个开关可能已经失效或未生效如果bt命令能解决问题当然最省事。但当它失效时就需要手动排查 crontab。一套通用的任务排查逻辑先看表象crontab -l看看有哪些定时任务找关键词根据要排查的问题推测可能的代码关键词如backup、panel、zip、clean等反向搜索grep -l 关键词 /path/to/scripts/*读脚本确认cat出来看前几行通常能定位用途判断能否操作确认不是核心任务如 SSL、系统更新、面板心跳后再处理一个实用的简化方法如果你不想深入排查可以直接保留备份任务但加上自动清理逻辑# 添加一个每天清理 7 天前备份的计划任务 echo 0 3 * * * find /www/backup/panel/ -name *.zip -mtime 7 -delete /var/spool/cron/root这样做的好处是不需要找到并关闭原任务备份继续运行但不会无限堆积风险低不影响其他功能经验总结定期检查磁盘占用用du -sh /* --excludeproc可以快速定位大目录。备份是好习惯但必须配套清理策略只开备份不设保留份数迟早会撑爆磁盘。/www/backup/panel目录值得重点关注它会每天生成 300MB 的压缩包半年不管就是 50GB。crontab 中的加密任务不要乱删需要先cat确认内容可能是 SSL 续期等核心任务。关键词搜索 读脚本头几行这是排查宝塔加密任务最有效的方法。如果找不到源头可以用清理脚本兜底不必非要关闭原任务。写在最后这次排查的核心思路可以概括为从现象倒推可能的原因层层深入定位找到根源后选择最合适的处理方案。对于定时任务的排查重点是不盲目删除而是通过关键词搜索、读脚本内容来准确判断每个任务的职责再做决定。如果你也遇到类似问题不妨先从/www/backup/panel看起——说不定答案就在那里。