Linux inode 用满怎么办:从 df -i 到小文件清理的完整实验
Linux 服务器报“磁盘已满”时,`df -h` 可能还显示剩余空间不少,真正用完的是 inode。inode 可以理解为文件元数据名额,小文件数量太多时,即使磁盘容量还够,也会出现无法创建文件、日志写不进去、临时文件失败、服务启动异常等问题。本文用一个实验把排查路径跑一遍:先看 `df -i`,再定位小文件目录,最后清理并验证恢复。
- 前置条件:先理解 inode 和磁盘空间的区别
- 初始化实验:制造一个小文件目录
- 运行检查:df -h 正常但 df -i 告警
- 定位目录:找出文件数量异常的位置
- 安全清理:先确认再删除
- 扩展实验:给业务目录加防线
- 清理和总结
前置条件:先理解 inode 和磁盘空间的区别
磁盘容量表示还能存多少字节,inode 表示还能创建多少个文件。一个 1KB 的小文件和一个 1GB 的大文件,都会占用 inode。日志切片、缓存碎片、邮件队列、会话文件、临时上传目录、爬虫结果目录,都可能在短时间内制造大量小文件。
判断这类问题不能只看 `df -h`,还要看 `df -i`:
df -h df -i
如果容量使用率不高,但 inode 使用率接近 100%,就说明问题方向不是“大文件占满磁盘”,而是“小文件数量打满 inode”。
初始化实验:制造一个小文件目录
下面用一个临时目录模拟小文件堆积。生产环境不要直接照搬制造文件的命令,这里只是为了让现象更直观。
mkdir -p /tmp/inode-lab/cache for n in $(seq 1 30000); do printf 'x' > "/tmp/inode-lab/cache/item-$n.tmp" done find /tmp/inode-lab/cache -type f | wc -l
如果你在测试机上观察,`df -i /tmp` 的 inode 使用数会增加。真实线上通常不是 3 万个文件这么温和,而是几十万、几百万个碎文件持续堆积。
运行检查:df -h 正常但 df -i 告警

排查时先看两个命令输出:
df -h / df -i /
典型现象可能是这样的:
Filesystem Size Used Avail Use% Mounted on /dev/vda1 40G 25G 13G 66% / Filesystem Inodes IUsed IFree IUse% Mounted on /dev/vda1 2621440 2621440 0 100% /
第一段输出会让人误以为磁盘还有 13G;第二段才指出 inode 已经没有空余。此时继续写日志、创建 session 文件、落临时文件,都可能失败。
定位目录:找出文件数量异常的位置
定位时不要一上来删除,先按目录层级统计文件数量。可以从可疑目录开始,比如 `/var/log`、`/tmp`、业务缓存目录、上传临时目录、队列目录。
sudo find /var -xdev -type f | awk -F/ '{print "/"$2"/"$3}' | sort | uniq -c | sort -nr | head
sudo find /tmp -xdev -type f | wc -l
sudo find /var/spool -xdev -type f | wc -l
如果某个目录文件数异常高,再进入下一层细分:
sudo find /var/spool/app -xdev -type f | awk -F/ '{print "/"$2"/"$3"/"$4}' | sort | uniq -c | sort -nr | head

`-xdev` 的作用是限制在当前文件系统内,避免跨到挂载盘后统计结果混乱。线上机器目录多时,建议先在业务低峰做统计,避免对磁盘产生额外压力。
安全清理:先确认再删除
清理小文件最怕误删业务数据。建议分三步走:
- 先确认来源:确认目录属于缓存、临时文件、旧日志、可重建数据,而不是用户上传原件或业务账务文件。
- 先抽样查看:看文件名、时间、大小、所属进程,确认是否还在被使用。
- 再按条件清理:按时间、后缀、目录白名单清理,不用宽泛路径一把删。
sudo find /tmp/inode-lab/cache -type f -mtime +7 | head sudo find /tmp/inode-lab/cache -type f -mtime +7 -print0 | sudo xargs -0 rm -f df -i /tmp find /tmp/inode-lab/cache -type f | wc -l
如果是业务日志目录,优先检查 logrotate 或应用自身日志切分配置;如果是缓存目录,优先补 TTL、最大条目数和定期清理任务。一次手工删除只能止血,不能防止复发。
扩展实验:给业务目录加防线
防止 inode 再次用满,可以从业务和运维两侧加限制:
- 缓存目录:设置最大数量、过期时间和后台清理,避免无限增长。
- 日志目录:配置按大小和时间切分,同时限制保留天数。
- 上传目录:失败上传和临时切片要有过期清理。
- 监控告警:把 `df -i` 纳入告警,inode 使用率 80% 提醒、90% 告警。
- 部署检查:新服务上线前确认临时目录、缓存目录、队列目录都有清理策略。
一个简单的巡检脚本可以只输出重点字段:
#!/usr/bin/env bash
set -euo pipefail
target="${1:-/}"
df -i "$target" | awk 'NR==1 || NR==2 {print}'
把它接入监控后,就能在 inode 接近耗尽前提前处理,而不是等服务写文件失败。
清理和总结
实验结束后可以删除临时目录:
rm -rf /tmp/inode-lab
Linux inode 用满的核心判断很简单:`df -h` 看容量,`df -i` 看文件名额。容量没满但 inode 满了,多半是小文件堆积。排查时先定位目录,再确认文件性质,最后按白名单和时间条件清理。真正的长期修复,是给缓存、日志、临时文件和队列目录设置上限与清理策略,并把 inode 使用率纳入监控。
国家医保服务平台亲情账户怎么用?和家庭共济有什么区别
- 上一篇
- 国家医保服务平台亲情账户怎么用?和家庭共济有什么区别
- 下一篇
- 前端长列表卡顿怎么优化:从全量 DOM 到虚拟列表架构
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- ljg-skills
- ljg-skills 是李继刚开源的 AI 技能与提示词集合,面向大模型使用者整理了一批可复用的 prompt、角色设定和任务技能模板,适合用于学习提示词设计、搭建个人 AI 工作流和沉淀团队常用智能体能力。
- 3169次使用
-
- MELO音乐
- MELO音乐是一站式AI视频与音乐制作助手,对标suno, udio的高品质体验。提供伴奏生成、原创写词、无损导出、哼唱识曲、混音变声等全套音频与短视频编辑工具。无论是流行Kpop、电音说唱、民谣古风、摇滚儿歌还是商用轻音乐,MELO为你免费谱曲,轻松做同款!
- 2923次使用
-
- UniScribe
- UniScribe 是一款 AI 音视频转文字与内容整理工具,支持上传音频、视频文件或粘贴 YouTube 链接,自动生成转写文本、摘要、思维导图和关键问题,并支持多格式导出,适合会议记录、课程学习、访谈整理和内容创作复盘。
- 2881次使用
-
- 剧云
- 剧云是专业中文剧本创作平台,安全稳定运行十余年,集成AI编剧、剧本医生审核、人物小传、剧情关系图、大纲编写、多人协作、Word导入导出、版权管控功能,数据安全防护,轻松高效创作剧本。
- 3087次使用
-
- 万象有声
- 万象有声,一个专为有声创作者打造的新一代智能有声内容创作平台。平台提供专业的智能拆章、智能画本编辑、AI配音、AI生成音效、后期制作、智能对轨、智能审听等有声创作全流程工具,可以帮助创作者高效、低成本创作出引人入胜的有声作品。立即体验,让有声书制作更简单!
- 3042次使用
-
- 在Linux系统中安装Go语言的详细教程
- 2022-12-29 402浏览
-
- 使用golang获取linux上文件的访问/创建/修改时间
- 2022-12-31 238浏览
-
- go程序部署到linux上运行的实现方法
- 2023-01-02 387浏览
-
- Linux系统下Go语言开发环境搭建
- 2023-01-07 242浏览
-
- 详解golang执行Linuxshell命令完整场景下的使用方法
- 2023-01-07 426浏览

