Linux 磁盘还有空间却写不进文件:inode 耗尽的排查与处置

举报
yd_291384559 发表于 2026/11/09 06:13:39 2026/11/09
【摘要】 df -h 还有空间却报 No space left on device,多半是 inode 耗尽。本文用 df -i 确诊,用 du --inodes 与 find -xdev 定位小文件目录,并给出确认占用、清理和日常监控的处置顺序。

现象:df 还有空间,写入却报 No space left on device

值班时经常遇到这种矛盾:df -h 显示根分区还剩几 GB,但 touch 新文件、应用写日志直接报 No space left on device。块空间充足、权限也正常,这时应优先怀疑 inode 用尽——每个文件、目录甚至一些特殊文件都占用一个 inode,文件数量先触顶时,剩余块再多也建不出新文件。

第一步:用 df -i 确认是不是 inode 问题

df -i
df -i /var

关注 IUse% 列。如果接近 100%,而 df -h 的 Use% 还很宽裕,基本可以确诊。只查某一目录对应的挂载点更快,避免被一堆 tmpfs 干扰。

第二步:定位哪个目录的文件最多

du --inodes -x --max-depth=1 /var | sort -n
find /var -xdev -type f | wc -l

du --inodes 按目录统计 inode 数,比 du -sh 更适合找小文件海。-xdev 保证不跨挂载点,否则会把别的分区算进来。常见高发位置包括邮件的 /var/spool/postfix、容器运行时的 /var/lib/docker/overlay2、应用按会话写的小文件和长期未清理的临时目录。

第三步:确认哪些文件可以删

lsof +L1 | head -50

+L1 列出已被删除但仍被进程占用的文件。这类文件会同时占着 inode 和块,只有重启或让进程关闭句柄才真正释放。清理前先判断来源:过期缓存、按天分桶的旧日志、失效会话可以删;数据库文件、运行中服务的数据目录不要动。

第四步:清理与验证

find /var/cache/myapp -type f -mtime +7 -delete
df -i

删除后重新看 IUse%,再让应用重试写入。ext4 的 inode 数量在格式化时固定,事后不能直接扩;xfs 动态分配 inode,通常不会遇到固定上限。若预估文件数长期偏大,应在建分区时调高 inode 数量,或把海量小文件迁到对象存储。

预防:把 inode 纳入日常监控

只监控磁盘使用率不够,IUse% 同样要设阈值告警;缓存目录配置定期清理,日志用 logrotate 设置 maxage;避免在单一目录堆放百万级文件,按日期或哈希分桶,删除和统计都会轻松很多。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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