CentOS 7 用久了,系统盘满是个躲不过去的坎。我这个月就处理了三四台机器,有物理服务器,也有装在 VMware 里给测试环境用的虚拟机,症状出奇一致:df -h 一看 / 的可用空间为 0,MySQL 直接拒绝写入,ssh 能连上但敲命令卡到怀疑人生。多数时候你不是撞见了什么天大的故障,而是日志、缓存、旧内核、Docker 镜像这些“隐形大户”一层一层把盘塞满了。这篇文章就把我在 CentOS 7 上清理系统盘的完整套路汇总一遍,从诊断到收尾,全部是可复现的命令。环境是 CentOS 7 x86_64,不管是最小化安装还是 DVD 完整安装,清理逻辑完全一致。
1. 动手清理之前,先把磁盘占用看明白
1.1 用 df 和 du 快速定位大目录
很多新手一上来就 rm -rf 各种文件,结果把系统删坏了还找不到问题在哪。我习惯先看三层:文件系统使用率、inode 使用率、根目录下哪个一级目录最占地方。
bash复制df -h
df -i
du -sh /* 2>/dev/null | sort -hr | head -20
df -h 看的是文件系统的容量和挂载点,df -i 看的是 inode。很多人只盯着空间,忘了 inode 也会满。如果 inode 满了,哪怕磁盘还有几十 G 空余,你也写不了任何新文件,表现就是各种“No space left on device”。
du -sh /* 是把根目录下每个一级目录的大小扫出来,sort -hr 按人类可读的数值倒序排,这样一眼就能看到到底是 /var、/usr、/home 还是 /tmp 在作怪。这一步做扎实了,后面清理才有方向。千万别说你直接 du -sh / 跑一遍,那只会告诉你根目录很大,对你没有半点帮助。
1.2 用 ncdu 交互式往下钻
命令行 du 能定位到一级目录,但再往下钻就比较费劲了。我强烈推荐装一个 ncdu,英文全称是 NCurses Disk Usage,一个基于 ncurses 的磁盘占用分析工具,操作起来像菜单一样直观。
bash复制yum install -y ncdu
ncdu /
进入界面之后,上下键移动光标,回车进入目录,d 键删除当前项,q 键退出。它的好处是把每个子目录的大小按人类可读方式列出来,还带一个百分比进度条,钻目录非常快。我记得有一次排查,就是靠 ncdu 发现了 /var/lib/docker/overlay2 下面藏着一个 12G 的日志文件,普通 du 命令早就被一堆容器层淹没了。
这里有个注意事项:ncdu 扫描大目录会花一点时间,而且第一次扫描时会读大量磁盘,建议在业务低峰期做。另外如果系统盘已经满了到无法 yum 安装的程度,可以先用 du 找出占用最大的目录,再决定要不要删掉一些文件腾出空间来装工具。这是个很现实的先后顺序问题,盘满了反而装不了诊断工具,先删垃圾再用工具,这就是运维的生存智慧。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 日志与包缓存:最容易忽略的“隐形大户”
2.1 systemd journal 日志的积压问题
CentOS 7 从很早开始就把系统日志交给了 systemd 的 journald 管理,默认日志放在 /var/log/journal 目录里,如果这个目录越来越大,根分区必然跟着遭殃。
journald 默认对日志大小没有太严格限制,它会把所有服务输出、内核消息、认证记录全部收进来。我自己就遇到过一台机器,/var/log/journal 累积到 8 个多 G,就是因为某个服务崩溃后疯狂打印错误信息。
最直接的清理方式:
bash复制journalctl --vacuum-time=7d
这条命令会把 7 天前的日志全部清掉。也可以按大小清理:
code复制
