引言:磁盘满,服务告急!
对于运维人员来说,最怕的告警之一就是No space left on device。CentOS服务器磁盘空间一旦爆满,不仅服务响应变慢,严重时甚至会崩溃。但别慌,只要掌握一套系统的清理流程,就能快速释放空间,恢复运行。本文从检查到清理,再到自动维护,给你一份完整的操作指南。
第一步:诊断磁盘空间
首先摸清磁盘使用状况,使用df -h查看各分区挂载点与使用率。例如:
df -h | grep -E ‘^/dev/’
找到使用率超过80%的分区后,用du逐层排查大目录。最常用的是:
du -sh /var/* | sort -rh | head -10
这能快速定位到占用最多的子目录,如/var/log、/var/cache、/tmp等。
第二步:清理YUM缓存
YUM在安装更新时会产生大量缓存,通常位于/var/cache/yum。清理命令:
yum clean all
如果还安装了dnf(CentOS 8/9),执行dnf clean all。这部分通常能释放几百MB到数GB。
第三步:清理系统日志
日志是磁盘杀手,尤其/var/log/下的messages、secure、maillog等文件会随时间膨胀。手动清理:
find /var/log -type f -name “*.log” -size +100M -exec truncate -s 0 {} ;
对于systemd日志(journalctl),限制其大小:
journalctl –vacuum-size=500M
或者配置/etc/systemd/journald.conf中的SystemMaxUse=500M,重启服务生效。
还可以调整logrotate保留策略,编辑/etc/logrotate.d/下对应配置文件,缩短保留天数。
第四步:清理临时文件
/tmp和/var/tmp目录存放临时文件,系统默认启动时不会自动清理所有内容。使用tmpwatch工具(CentOS 7)或systemd-tmpfiles清理:
yum install -y tmpwatch
tmpwatch -m 72 /tmp # 删除72小时未访问的文件
CentOS 8+可以用systemd-tmpfiles –clean,并检查/usr/lib/tmpfiles.d/中的规则。
第五步:清理废旧内核与包
长期运行的系统会积累多个内核版本,占用/boot空间。查看已安装内核:
rpm -qa | grep kernel
保留当前运行的内核,删除旧版:
package-cleanup –oldkernels –count=2
对于CentOS 8+,使用dnf remove $(dnf repoquery –installonly –latest-limit=-2 -q)。另外,执行yum autoremove移除孤立依赖包。
第六步:查找并删除大文件
某些残留的大文件(如log文件、core dump、备份文件)往往隐藏在深处。用find搜索大于100MB的文件:
find / -type f -size +100M -exec ls -lh {} ; 2>/dev/null | sort -k5 -rh | head -20
确认无用后删除或移至其他分区。注意/home下的个人文件,特别是.cache、.local/share/Trash等。
第七步:Docker容器与镜像清理
如果系统运行Docker,镜像和容器会吃掉大量空间。大招:
docker system prune -a –volumes
该命令会删除所有停止的容器、未使用的网络、悬空镜像、挂载卷。建议在非生产环境执行前确认。
第八步:自动化清理脚本
手动清理费时,写个脚本扔进crontab每周执行一次,例如:
#!/bin/bash
# 清理YUM缓存
yum clean all
# 清理journal日志(保留最近3天)
journalctl –vacuum-time=3d
# 清理临时文件
find /tmp -type f -atime +3 -delete
# 清理Docker(可选)
docker system prune -f –volumes
保存为/root/clean_disk.sh,赋予可执行权限,添加到crontab -e:
0 3 * * 0 /root/clean_disk.sh >/dev/null 2>&1
总结
磁盘空间管理是CentOS运维的基本功。通过上述步骤——检查、清理缓存、日志、临时文件、废旧内核、大文件、Docker,再配合自动化脚本——你可以将磁盘使用率始终控制在安全线以下。建议每月执行一次全面检查,避免临时抱佛脚。记住:预防胜于清理,合理配置日志轮转、下载包管理策略才是长远之计。