收到"磁盘不足"告警时,最没用的做法是随手删几个日志文件——通常删完第二天又满。正确顺序是先定位,再处置,最后修根因。
第一步:看清是哪个分区
df -h
注意区分 / 和 /www 是不是同一个分区。宝塔默认都装在 /www 下,如果 /www 单独挂了盘,根分区满不影响网站,反之亦然。
第二步:找一级目录
du -sh /* 2>/dev/null | sort -rh | head -10
一般前几名就是 /www、/var、/root、/tmp 这几个。接着往下钻:
du -sh /var/* | sort -rh | head
du -sh /www/* | sort -rh | head
第三步:找大文件
find / -xdev -type f -size +100M -exec ls -lh {} ; 2>/dev/null
-xdev 很重要,不加会跨分区扫,慢且容易卡住。
常见元凶
- /var/log/messages:Debian 的 rsyslog 默认会写这个文件,但 logrotate 的清单里常常漏掉它,于是无限增长。
- systemd journal:
journalctl --disk-usage一看便知,默认没有上限。在/etc/systemd/journald.conf加SystemMaxUse=300M后重启服务。 - Docker 容器日志:
ls -lh /var/lib/docker/containers/*/*-json.log。没有配log-opts的话,一个容器跑几个月能写出几百兆。 - 数据库二进制日志和错误日志:MySQL 的
*.err、mysql-bin.*,以及慢查询日志。 - 备份文件:宝塔的定时备份、自己 dump 的 SQL,堆在 /www/backup 里没人清理。
- 老目录残留:比如几年前跑压测留下的 fio、geekbench 目录,看着像数据其实早没用了。
第四步:处置方式要选对
正在被进程写入的日志,不要用 rm。rm 只是删了目录项,进程手里的文件描述符还在,空间不会释放,还会继续写一个"幽灵文件"。正确做法是截断:
: > /var/log/messages
或者交给 logrotate:logrotate -f /etc/logrotate.d/rsyslog,它会按规则切割、压缩、保留历史。
第五步:修根因
删是治标,轮转配置才是治本。检查每个大日志是否有对应的 logrotate 规则,没有就补一条;能给上限的(journald、docker)就设上限。做完这一步,磁盘曲线才会真正平稳。
最后提醒:任何删除操作前,先 ls 看清楚目录内容。有些"看着像垃圾"的目录,可能是某个服务的运行数据。





还没有评论,来说两句吧...