当前位置:首页 > 文章列表 > 文章 > linux > Linux 磁盘空间没满但仍写不进去:inode 用尽的定位、清理与复测

Linux 磁盘空间没满但仍写不进去:inode 用尽的定位、清理与复测

来源:17golang原创 2026-07-26 17:44:22 0浏览 收藏

有些 Linux 故障很容易被 df -h 误导:磁盘还剩几十 GB,应用却在创建临时文件时直接报 No space left on device。这通常是 inode 用完了——容量统计看的是字节,inode 统计的是文件、目录等文件系统对象的数量。

先用 df -i 看 inode 使用率,再定位小文件最多的目录;确认无业务风险后清理,最后用同一组命令复测容量、inode 和服务写入。

要点速览
  • df -h 正常不代表还能创建文件,df -i 才能确认 inode 是否耗尽。
  • 定位时先从挂载点和一级目录入手,不要直接对整个根目录执行高风险删除。
  • 日志切割、缓存碎片和临时文件是小文件爆发的常见来源,清理策略要保留最近可用数据。
  • 复测不能只看容量,至少还要检查 inode、应用写入和服务日志。

为什么磁盘还有空间,mkdir 仍然会失败

文件系统创建一个新文件时,需要同时分配数据块和 inode。前者存放文件内容,后者记录权限、所有者、时间和数据块位置。小文件很多时,数据块可能还没用尽,inode 却先到达上限。

先看两个指标,不要急着改日志配置:

df -hT /var
df -i /var
findmnt -T /var

如果 df -iIUse% 接近 100%,而 df -h 仍有余量,方向就很明确了。findmnt 用来确认目标路径实际落在哪个挂载点,避免把清理范围误判成整个根分区。

Linux df -h 与 df -i 对照,/var 挂载点从 inode 满载指向小文件定位

用一组低风险命令找出小文件堆积点

排查的第一步是找“哪个挂载点满”,第二步才是找“哪个目录制造了大量对象”。下面的命令只统计,不删除:

df -iP | sort -k5 -h

sudo find /var -xdev -type f -printf '%h\n' 2>/dev/null | sort | uniq -c | sort -nr | head -20

-xdev 很关键,它让 find 不跨到其他文件系统;否则挂载在 /var 下的目录也可能被算进来,结果既慢又容易误导。第二条命令按文件所在目录计数,通常能很快暴露出某个缓存目录、临时目录或日志碎片目录。

如果需要知道目录体积,再单独检查候选路径:

sudo du -xhd1 /var 2>/dev/null | sort -h
sudo find /var/cache/my-service -xdev -type f | wc -l
sudo find /var/cache/my-service -xdev -type f -printf '%TY-%Tm-%Td %p\n' | sort | head -20

这里不要只盯着最大的目录。一个占用 2 GB 的目录可能只有几百个大文件,而另一个只有 800 MB 的目录可能塞了数百万个几 KB 的碎片文件,后者才是 inode 的主要消耗者。

清理顺序:先止住增长,再处理可重建数据

清理前先确认候选目录属于谁、是否仍在写入。对正在增长的日志或队列目录直接删除,可能导致应用句柄指向已删除文件,甚至丢掉仍未消费的任务。

更稳妥的顺序是:

  1. 先暂停制造碎片文件的定时任务或降低写入速率,并记录当前 inode 使用率。
  2. 优先处理明确可重建的缓存、过期临时文件和已经上传到集中日志系统的旧日志。
  3. 使用应用自带清理命令或日志轮转;必须手动删除时,限定绝对路径、文件类型和时间范围。
  4. 清理后立即复测,不要一次性扩大删除范围。
# 示例:只列出 14 天前的缓存文件,先看清单
sudo find /var/cache/my-service -xdev -type f -mtime +14 -print | head -50

# 确认清单无误后再删除;生产环境应配合维护窗口
sudo find /var/cache/my-service -xdev -type f -mtime +14 -delete

如果是日志问题,优先检查 logrotate 是否正常运行、轮转后的压缩文件是否仍然产生过多分片,以及应用是否持有已删除的大日志。后者可以通过 lsof +L1 发现:文件名已经消失,但进程仍占着空间;它主要影响容量,不一定解决 inode 问题,却经常和这类故障一起出现。

Linux 小文件目录经过限范围清理后,inode 使用率下降并通过写入复测

用前后指标确认修复真的生效

清理完成后,至少保存下面四项结果。单看 df -h 变绿,只能说明数据块释放了,不能证明 inode 或业务写入已经恢复。

检查项修复前关注修复后应看到
挂载点findmnt -T /var 结果路径和文件系统没有误判
inodeIUse% 接近 100%有明显余量,且不再持续上升
文件创建mkdir 或临时文件报错测试目录可创建、删除
服务状态日志出现 No space left on device新请求能写日志或落盘
test_dir=/var/tmp/inode-recheck-$$
mkdir "$test_dir" && touch "$test_dir/probe" && rm -f "$test_dir/probe" && rmdir "$test_dir"
df -iP /var
tail -n 50 /var/log/my-service/app.log

如果 inode 很快再次上涨,问题不是“还没删干净”,而是增长源仍在运行。把刚才的目录计数命令加入短时间观察,结合 find 输出的文件名模式,回到日志轮转、缓存过期或临时文件清理策略上处理根因。

几个容易把故障越修越大的误区

rm -rf /var/* 当作快速修复

这种做法无法区分缓存、队列、配置和运行时目录,风险远高于 inode 故障本身。先确定挂载点和具体目录,再用时间、后缀或文件名模式收窄范围。

只看目录大小,不看文件数量

du -sh 适合找容量大户,不能替代 inode 统计。文件数量要用 find ... | wc -l 或按目录聚合的计数命令确认。

删除日志后立刻重启所有服务

重启可能释放被删除文件占用的容量,却不能修复仍在持续生成小文件的配置。先找到增长源,再决定是否需要重启或滚动重载。

相关问题

inode 用完一定是小文件太多吗?

通常是,但也可能是某个程序反复创建临时文件却没有及时清理。用目录级文件计数和文件名模式确认,不要只凭目录体积猜测。

清理 inode 后 df -h 为什么变化不大?

因为你释放的主要是 inode,不一定释放了很多数据块。只要 df -i 恢复且业务可以创建文件,容量变化小并不代表清理失败。

能不能通过扩容解决 inode 不够?

单纯扩大虚拟磁盘未必增加当前文件系统的 inode 数量。应先确认文件系统类型和扩容方式;短期先止住小文件增长,长期再调整存储设计。

总结:把容量和对象数量分开看

Linux 写不进文件时,df -h 只是一个入口。先用 df -i 判断 inode,再用不跨挂载点的统计命令锁定小文件目录,按可重建数据、时间范围和业务状态逐步清理,最后用创建文件、inode 和服务日志做闭环验证。这套顺序比“看到报错就删目录”慢不了多少,却能显著降低误删风险。

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
2026年立秋是几月几号?交节后天气会马上转凉吗2026年立秋是几月几号?交节后天气会马上转凉吗
上一篇
2026年立秋是几月几号?交节后天气会马上转凉吗
CSS 容器查询实现响应式卡片:container-type 与 @container 的最小配方
下一篇
CSS 容器查询实现响应式卡片:container-type 与 @container 的最小配方
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • H2O EvalGPT:开源LLM大模型评估与排行榜工具
    H2O EvalGPT
    H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
    101次使用
  • LMArena是什么?伯克利AI模型评估平台使用指南与功能解析
    LMArena
    LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
    12次使用
  • OpenCompass大模型评测体系详解:功能、使用指南与应用场景
    OpenCompass
    OpenCompass是上海AI实验室推出的开源大模型评测平台,提供CompassKit、CompassHub和CompassRank三大核心组件,支持LLM及多模态模型的一站式标准化评估与排行榜查询。
    28次使用
  • AGI-Eval大模型评测平台:权威榜单、数据集与人机协同评测方案
    AGI-Eval
    AGI-Eval是由上海交大等高校联合发布的大模型评测社区,提供公正透明的LLM能力榜单、多领域评测集及Data Studio数据服务,助力AI模型性能评估与NLP科研开发。
    14次使用
  • SuperCLUE中文大模型评测基准:功能、能力维度与应用指南
    SuperCLUE
    SuperCLUE是权威的中文大语言模型综合评测基准,涵盖语言理解、知识应用、AI Agent智能体及安全性等12项核心能力。通过多轮对话与客观测试,定期发布榜单与技术报告,为模型研发、优化及行业选型提供科学依据。
    255次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议隐私政策
返回登录
  • 重置密码