admin 发表于 2026-8-12 08:39:33

服务器目录爆满、inode耗尽运维解决

当服务器出现目录爆满或inode耗尽时,会导致系统无法写入新数据、服务异常甚至崩溃。以下是详细的排查和解决方法:



一、目录空间爆满(磁盘使用率100%)
1. 定位大文件/目录

[*]查看磁盘使用情况:

   df -h# 查看各分区使用率

[*]定位具体目录:

   du -h --max-depth=1 /# 从根目录开始,逐级查找大目录
   # 或使用更高效的工具(如ncdu)
   ncdu /

2. 清理无用文件

[*]日志文件:

   检查 /var/log/ 下的日志(如 messages, nginx/access.log),清理或轮转:
   # 清理旧日志(示例)
   rm -f /var/log/old_log_*.log
   # 或使用logrotate配置自动轮转

[*]临时文件:

   清理 /tmp/、缓存目录(如 /var/cache/)或应用生成的临时文件。

[*]核心转储文件:

   删除 /var/core/ 或应用目录下的 core.* 文件。

3. 扩展存储(可选)

[*]如果清理后空间仍不足,考虑:
[*]扩容磁盘或分区。
[*]挂载新磁盘到特定目录(如 /data)。




二、inode耗尽(No space left on device)
1. 检查inode使用情况
   df -i# 查看各分区inode使用率

[*]若某分区inode使用率100%,需清理小文件。


2. 定位inode占用高的目录
   # 遍历目录统计文件数量(示例)
   for i in /*; do echo $i; find $i | wc -l; done
   # 或使用find命令快速定位
   find /path/to/dir -xdev -type f | cut -d "/" -f 2- | sort | uniq -c | sort -nr

3. 清理小文件

[*]应用临时文件:

   检查应用是否生成大量小文件(如缓存、会话文件),清理后重启服务。

[*]邮件/队列文件:

   清理 /var/spool/ 下的邮件或任务队列。

[*]容器/虚拟化文件:

   若使用Docker/KVM,清理无用镜像、容器或虚拟磁盘。

4. 预防措施

[*]调整文件存储策略:

   避免在单个目录存放过多文件,可按日期/哈希分目录存储。

[*]监控inode使用:

   通过 df -i 或Prometheus等工具监控,设置告警。



三、通用优化建议

[*]日志管理:
[*]配置 logrotate 定期压缩、轮转日志。
[*]禁用不必要的调试日志。
[*]自动化清理:
[*]编写脚本定期清理临时文件(如通过 cron 执行)。
[*]文件系统选择:
[*]若业务产生大量小文件,考虑使用XFS(比ext4支持更多inode)。
[*]监控告警:
[*]使用Zabbix、Prometheus等监控磁盘和inode使用率,触发告警及时处理。




四、紧急恢复

[*]快速释放inode:

删除大量小文件(如 find /path -type f -name "*.tmp" -delete)。

[*]挂载新分区:

若当前分区无法扩展,可挂载新磁盘到高负载目录(如 /var/lib/docker)。



总结步骤

[*]诊断:通过 df -h 和 df -i 确认是空间还是inode问题。
[*]定位:使用 du 或 find 找到占用资源的大文件/目录。
[*]清理:优先删除无用文件(日志、临时文件、缓存)。
[*]预防:优化存储策略、配置监控和自动化清理。


通过以上步骤,可快速恢复服务器正常运行并避免问题复发。
页: [1]
查看完整版本: 服务器目录爆满、inode耗尽运维解决