Watch at Ease看见世界,读懂生活。

科技 · 实用指南

Linux 报“设备上没有空间”,但 df 明明有余量?先查准确失败路径

ENOSPC 不代表你查看的文件系统已满。先把失败路径映射到真实挂载点和存储后端,再依次核查块、inode、已删除但仍打开的文件、配额、overlay 与文件系统限制。

Linux 报“设备上没有空间”,但 df 明明有余量?先查准确失败路径
原创示意图:让 df 查询那条准确路径 Watch at Ease

“No space left on device”只是某次失败操作返回的错误,它不能证明裸跑 df 时看到的文件系统就是失败目标,也不能证明唯一短缺的是字节空间。

先保存准确失败路径,确认它所在的挂载点、文件系统类型和存储边界。在同一路径检查块与 inode,再按证据进入已删除但仍打开、隐藏挂载、配额、容器层或文件系统分配分支。

清理前先捕获失败路径

保存完整错误、命令、时间和目标路径。若应用隐藏路径,应开启正常诊断日志或只复现一次;不要先删文件或重启。

记录写入发生在主机、容器、bind mount、CI 工作区还是其他存储服务中。相同目录名跨边界后可能指向不同后端。

让 df 查询那条准确路径

对失败路径或其现有父目录运行 df,记录 Filesystem、Type、Size、Avail 和 Mounted on;再对同一路径检查 inode。

若路径尚不存在,就逐级上溯到最近的现有父目录,并记录挂载视图,避免把独立 /var、bind mount、overlay 或网络文件系统误当成根分区。

区分块容量与 inode 容量

块不足时,只在该文件系统内找大户,删除前确认保留政策和所有者;除非明确需要,不要让扫描跨越其他挂载点。

inode 不足而块仍有余量时,查找制造大量小文件的目录。单纯增加字节容量不一定会在所有文件系统上增加可用 inode。

解释 df 与 du 的差异而不丢证据

若 df 的已分配空间明显高于目录扫描结果,检查仍被进程打开的已删除文件;先记录 PID、服务、文件描述符和大小,再决定是否安全重启、重载或截断。

还要检查挂载点下是否藏有较早写入的文件。生产环境卸载会中断服务,应在维护窗口或安全命名空间中检查。

检查配额、容器与文件系统限制

块和 inode 都健康时,检查准确写入者的用户、组或项目配额与保留空间;容器场景先保存存储根、驱动、可写层与宿主后端。

再用文件系统专用工具检查元数据、快照、写时复制预留或池容量,不能拿 ext4 的判断方式套用到 XFS、Btrfs、ZFS、LVM thin 或远程存储。

只修一个已证实分支,并复测原写入

选择能处理已证实资源的最小可逆动作:按政策到期清理、轮转日志、释放已确认的打开文件、扩容正确卷、调整有依据的配额或按文档迁移容器存储。

只重试一次原写入,再在同一目标路径确认容量、inode 或配额余量,并持续观察,区分长期恢复与重启造成的短暂下降。

Linux 报“设备上没有空间”,但 df 明明有余量?先查准确失败路径
原创示意图:检查配额、容器与文件系统限制 Watch at Ease