Linux 服务器磁盘清理实战:从 77% 到 50%
服务器磁盘告警是每个站长都绕不开的日常。这篇文章记录一次真实的磁盘清理过程:一台 28GB 小盘机器,使用率从 77% 一路清到 50%,释放了约 7.5GB 空间。整个过程用到的都是 Linux 自带工具,没有任何花哨操作。
第一步:找到大头
清理之前先摸清家底,不要凭感觉删文件。两个命令足够:
# 看整体使用率
df -h /
# 看根目录下每个一级目录的占用
du -sh /* 2>/dev/null | sort -rh | head -12
这次排查发现两个重灾区:/root 占了 12GB,/var 占了 8.3GB。继续深挖:
du -sh /root/* /root/.[!.]* 2>/dev/null | sort -rh | head -15
第二步:揪出元凶
深挖后发现,最大的问题不是系统本身,而是重复的备份文件:
- 同一天做了 5 份备份,内容几乎一样,共占 6.6GB
- 其中 3 份在 AstrBot 的备份目录,2 份散落在 /root 下
这类问题非常典型:备份脚本没有清理策略,或者手动备份后忘了删旧的。6.6GB 对大盘机无所谓,对小盘机就是灾难。
第三步:MySQL binlog 清理
另一个大头是 MySQL 的 binlog(二进制日志)。单文件竟然有 820MB,原因是活动 binlog 不会被 PURGE 命令删除:
-- 这样删不掉正在写的 binlog
PURGE BINARY LOGS BEFORE NOW();
-- 正确姿势:先滚动生成新日志,再删旧的
FLUSH BINARY LOGS;
PURGE BINARY LOGS TO 'binlog.000004';
清理后顺手配置了自动过期,防止再次膨胀:
SET GLOBAL binlog_expire_logs_seconds=259200; -- 3 天自动清理
第四步:Docker 构建缓存
Docker 的构建缓存(build cache)也是隐形磁盘杀手:
docker builder prune -f
一次清理释放了 727MB。这类缓存可以放心删,不影响任何运行中的容器。
复盘:怎么防止再犯
- 备份策略:保留最近 1-2 份即可,加
--delete-older-than之类的自动清理 - 日志管理:journald 设置
SystemMaxUse=50M,MySQL binlog 设置过期时间 - 定期巡检:每月跑一次
du -sh /*,把命令存成脚本配合 cron
磁盘清理的本质是"找大文件 + 断源头",工具只是辅助。养成定期看 du 的习惯,比等到告警再救火舒服得多。
本文是原创文章,采用 CC BY-NC-SA 4.0 协议,完整转载请注明来自 江江
评论
隐私政策
0/500
滚动到此处加载评论...
