服务器磁盘占用过大是一个常见的运维问题,需要系统性地排查和清理。遵循以下专业步骤,可以有效定位问题并释放磁盘空间。

第一步:快速定位磁盘使用情况
使用df -h命令查看磁盘整体使用率和挂载点,确认是哪个分区或卷接近饱和。
使用du -sh *或更高效的ncdu(需安装)命令,逐级深入分析特定目录(如 /、/home、/var、/usr)的大小,找出占用最大的目录。
第二步:针对性分析与清理常见占用源
1. 日志文件:系统和应用日志(如/var/log)是常见“罪魁祸首”。
- 使用 journalctl --disk-usage 检查 systemd 日志大小,可通过 journalctl --vacuum-time=3d 清理3天前的日志。
- 检查特定应用日志(如nginx、tomcat),使用logrotate进行日志轮转或直接清理历史文件。
- 使用 lsof | grep deleted 查找已被删除但进程仍占用的文件,重启对应进程可释放空间。
2. 临时文件和缓存
- 清理系统临时目录:/tmp 和 /var/tmp。
- 清理包管理器缓存:对于CentOS/RHEL使用 yum clean all 或 dnf clean all;对于Ubuntu/Debian使用 apt-get clean 和 apt-get autoremove。
- 清理应用缓存:如Docker的 docker system prune -a(谨慎使用),或浏览器、代理服务器缓存。
3. 无用或过大的用户文件及备份
- 查找并删除指定目录下的大文件:find /path -type f -size +100M -exec ls -lh {}\;。
- 查找并清理旧文件:find /path -type f -mtime +30 -exec rm -f {}\;(例如删除30天前的文件)。
- 检查并清理过期的旧备份文件、核心转储(core dump)文件。
4. 特定应用数据
- 数据库:清理binlog、慢查询日志或归档日志。对于MySQL,检查并清理 ibdata1 文件或未使用的表空间。
- 邮件服务器:清理旧邮件队列和垃圾邮件。
- 版本控制库(如Git):执行垃圾回收 git gc --prune=now --aggressive。
第三步:高级分析与长期管理
- 使用 inode 检查:通过 df -i 确认是否因小文件过多导致inode耗尽。
- 考虑使用符号链接:将大型目录(如日志)链接到更大的磁盘分区。
- 实施监控与告警:部署监控工具(如Prometheus、Zabbix),对磁盘使用率设置阈值告警。
- 建立自动化清理策略:编写定期执行的脚本,结合logrotate、cron任务自动清理日志和临时文件。
- 评估与扩容:若数据增长是长期且健康的,规划磁盘扩容或使用LVM动态调整分区大小。
注意事项
在删除任何文件前,务必确认其是否重要,尤其对于生产环境。建议先进行备份或移至临时位置观察。清理应用日志前,应确保已无排错需求。长期解决方案在于建立完善的日志轮转、文件归档和容量规划机制。

查看详情

查看详情