磁盘明明还有空间,为什么 Linux 提示 No space left on device?

举报
yd_259541464 发表于 2026/10/28 17:24:38 2026/10/28
【摘要】 服务器提示 No space left on device,第一反应通常是磁盘满了。但如果 df -h 显示还有空余,也不要急着删除文件:文件系统还可能耗尽了 inode。今天体验 AI 开发者空间时,我用这个问题做了一次问答。下面把排查思路整理成一套只读检查,适合先判断问题,再决定怎么处理。 空间和 inode 是两种不同的资源文件数据需要磁盘空间;文件系统还需要 inode 记录文件类型...

服务器提示 No space left on device,第一反应通常是磁盘满了。但如果 df -h 显示还有空余,也不要急着删除文件:文件系统还可能耗尽了 inode。

今天体验 AI 开发者空间时,我用这个问题做了一次问答。下面把排查思路整理成一套只读检查,适合先判断问题,再决定怎么处理。

空间和 inode 是两种不同的资源

文件数据需要磁盘空间;文件系统还需要 inode 记录文件类型、权限、所有者、时间等元数据。创建文件时,两者都要有余量。

因此,大量小文件可能让 inode 先耗尽,即使磁盘字节容量还有不少;反过来,少数大文件也可能填满空间,而 inode 仍有余量。inode 的具体分配方式和限制取决于文件系统,不应简单地把 inode 数理解为所有文件系统固定不变的文件数量上限。

先检查出问题的路径

假设应用写入 /var/log/myapp,先针对这个路径查询它所在的文件系统:

df -h /var/log/myapp
df -i /var/log/myapp

第一条看容量及 Use%;第二条看 inode 及 IUse%。如果后者接近或达到 100%,而前者还有余量,就要调查该文件系统内的小文件数量。

也要确认路径确实存在;不存在时,应改查其已存在的父目录。容器、挂载点和配额也会影响实际可用资源,所以不要只看根目录的数据就下结论。

找到数量异常的目录

在确定需要检查的文件系统后,可以对应用自己的目录做有限范围统计:

find /var/log/myapp -xdev -type f | wc -l

-xdev 防止跨越到其他挂载的文件系统。该命令只统计普通文件,目录、符号链接等也可能占用 inode;没有读取权限的目录会出现错误,结果不能视为完整总数。大量文件时遍历也可能耗时,先从应用目录开始更合适。

找到异常目录后,先确认文件的用途、保留策略和应用状态,再选择清理方式。不要因为数量多就直接删除数据库文件、正在写入的日志或应用缓存。

删除文件后空间仍没回来?

Linux 中,文件名被删除不一定意味着数据立即释放:如果进程仍打开着文件,空间通常要等最后一个相关文件描述符关闭后才会归还。可以用下面的只读命令检查已删除但仍被进程打开的文件:

sudo lsof +L1

该命令可能需要安装 lsof 和足够权限;输出可能包含敏感路径。先识别持有文件的服务,再根据服务的日志轮转或维护流程处理,避免直接重启关键进程。

硬链接仍存在、检查了不同挂载点、快照或文件系统特性、用户或项目配额等,也可能让现象看起来像“删了却没释放”。具体原因需要结合文件系统和应用环境判断。

排查顺序

先对实际写入路径执行 df -h 和 df -i,区分空间耗尽与 inode 耗尽;再结合挂载点、配额及应用目录定位原因。整个过程中先只读确认,再决定是否清理或重启,能避免把一次容量问题变成服务故障。

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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