先找到是谁占的空间
磁盘告警时不要急着删文件。先用 df -h 确认是哪个分区写满,再用 du -xh –max-depth=1 逐层定位到具体目录。注意有些文件已被删除但仍被进程持有,空间不会释放,这类情况用 lsof +L1 能查出来,处理方式是重启对应进程而不是删除文件。
日志文件
日志是最常见的元凶。Nginx access.log、PHP 错误日志、系统日志在流量大或程序报错频繁时会快速增长。清理方式:先 truncate -s 0 文件名 把文件清空(不会删除 inode,正在写入的进程不受影响),再考虑配置 logrotate 限制单文件大小与保留份数。切忌直接 rm 正在被写入的日志——进程仍持有句柄,空间不会释放。
包管理器缓存
CentOS 用 dnf clean all 或 yum clean all 清理 rpm 缓存;Ubuntu 用 apt clean 清理 /var/cache/apt/archives。这些缓存只是安装包的副本,删除不影响已安装软件,需要时会重新下载。通常能回收几百 MB 到数 GB。
旧内核与孤儿依赖
系统多次升级会留下多个旧内核,占用可观空间。确认当前正在使用的内核版本后,清理列表中更旧的版本(保留至少一个可用回退)。同时用包管理器的 autoremove/clean_requirements_on_remove 清理不再被任何软件依赖的包。清理前务必确认不是业务依赖,误删库文件会导致服务无法启动。
Docker 相关
若服务器跑了 Docker,悬空镜像、停止的容器、未使用的卷与构建缓存会持续堆积。用系统自带的清理命令配合 prune 处理,注意不要加会删除数据卷的参数,除非你确认卷内容可丢弃。清理后用 df 复查,Docker 场景下往往一次能回收几十 GB。
大文件与写入监控
- 用 find / -type f -size +500M 定位异常大文件
- 检查是否有程序把临时文件写在系统盘而非数据盘
- 确认备份文件是否重复保存在本机
- 数据库 dump、上传目录、缓存目录要单独评估
预防再写满
清理是一次性的,预防才是长期的。配置 logrotate 统一管理日志、设置磁盘使用率告警(如 80% 通知)、把 /var/log 与数据目录分开挂载、定期跑一次磁盘占用报表。做到这几件事,磁盘写满通常会变成提前三天知道的可处理事件,而不是服务突然宕机的事故。