宝塔面板磁盘爆满排查与清理全记录
【服务器磁盘清理实战】作者发现服务器磁盘占用高达81.52G/98.3G,经排查发现宝塔面板自动备份功能导致/www/backup/panel目录堆积了39GB的压缩包(每天生成350MB+)。解决方案包括:立即删除旧备份文件释放空间;设置find命令自动清理7天前的备份;通过grep搜索crontab脚本定位备份任务源。文章特别提醒:不要随意删除加密的定时任务,需先确认用途(如SSL续期等核心功
前言
前几天登录宝塔面板,发现磁盘空间告急(日志文件都清理了,怎么磁盘占用率还这么高):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/site
panel 目录占了 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 2>&1
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 --renew=1
echo "---"
...
rm -f /www/server/cron/3ab48c27ec99cb9787749c362afae517.pl
关键识别点:acme_v2.py --renew=1
这是一个 Let's 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 /* --exclude=proc可以快速定位大目录。 -
备份是好习惯,但必须配套清理策略:只开备份不设保留份数,迟早会撑爆磁盘。
-
/www/backup/panel目录值得重点关注:它会每天生成 300MB+ 的压缩包,半年不管就是 50GB+。 -
crontab 中的加密任务不要乱删:需要先
cat确认内容,可能是 SSL 续期等核心任务。 -
关键词搜索 + 读脚本头几行:这是排查宝塔加密任务最有效的方法。
-
如果找不到源头,可以用清理脚本兜底:不必非要关闭原任务。
写在最后
这次排查的核心思路可以概括为:从现象倒推可能的原因,层层深入定位,找到根源后选择最合适的处理方案。
对于定时任务的排查,重点是不盲目删除,而是通过关键词搜索、读脚本内容来准确判断每个任务的职责,再做决定。
如果你也遇到类似问题,不妨先从 /www/backup/panel 看起——说不定答案就在那里。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐



所有评论(0)