Linux 服务器磁盘 inode 耗尽:还有空间却写不进文件

举报
yd_283936595 发表于 2026/11/06 10:30:18 2026/11/06
【摘要】 遇到磁盘还有空间却写不进文件时,先用 df -i 检查 inode 是否耗尽,再定位、清理并加上监控。

线上偶发「磁盘还有几十 GB,touch 却报 No space left on device」。这时先别急着扩容,很大概率是 inode 用完了,而不是块空间不够。把 inode 和块空间当成两套容量来看,排查会快很多。

现象怎么认

典型表现有三类:写文件失败返回 ENOSPC;新建临时文件、日志轮转失败;包管理器或容器层报无法创建文件。用 df -h 看着还有空间,但 df -i 里 Use% 已经到 100%。

建议每次先同时看两行:

df -h /
df -i /

如果块使用率不高、inode 使用率接近满,就按 inode 排查,不要先去加盘或删大文件。只删几个大文件往往降不了 inode,因为 inode 吃的是「文件个数」。

为什么 inode 会耗尽

每个普通文件、目录、符号链接都要占一个 inode。当业务产生海量小文件时,块空间还剩很多,inode 会先见底。ext4 等文件系统在创建分区时就基本固定了 inode 数量,事后很难「只加 inode 不加盘」,所以预防和清理比临时扩容更重要。

定位是谁占了 inode

不要一上来在根目录盲目 find,先缩小到可疑挂载点。可以按目录统计文件数:

sudo find /var -xdev -type f 2>/dev/null | cut -d/ -f1-3 | sort | uniq -c | sort -rn | head
sudo du --inodes -d 1 /var 2>/dev/null | sort -rn | head

安全清理顺序

先动明确可重建的:临时目录、过期会话、缓存。日志优先压缩或截断,不要直接删仍被进程打开的活跃日志而不通知服务。容器环境再清理悬空层与构建缓存。每清理一批就重跑 df -i,并抽测 touch 是否恢复。

治本做法

给高基数目录设应用侧上限或定期归档;用 logrotate 按大小和时间切割并限制保留份数;监控同时采集 df -h 与 df -i,inode 使用率超过 80% 告警;新建小文件密集分区时提高 inode 比例;能用对象存储或集中日志的,不要把海量小文件堆在系统盘。

小结

「还有空间却写不进」优先查 df -i。用按目录的文件数统计定位元凶,按可重建程度清理,再补监控与轮转。把 inode 当成和块空间同等重要的容量指标,这类故障会少很多。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。