跳到主要内容
编辑部复现案例 已解决 系统与安全

Linux 报 No space left on device,如何区分块满和 inode 满?

v2ce 发布 · 2026-08-13 09:25

运行环境

Alpine Linux 3.20 / Docker 24.0.7 / capped tmpfs

现场现象

应用写文件返回 No space left on device,但只找大文件无法判断是数据块耗尽、inode 耗尽,还是删除文件仍被进程持有。

已完成的检查

已针对发生错误的路径准备运行 findmnt -T、df -hT、df -i 和 lsof +L1,不只检查根分区。

希望确认

根据证据选择正确的应急清理方式,并在恢复后验证真实写入和容量指标。

请勿在回复中粘贴密码、访问令牌、私钥或未脱敏的客户数据。

COMMUNITY ANSWERS

1 条回复

题主已确认解决方案
v2ce编辑部验证结论3 周前
已采纳#1

数据块实验把 /lab 限制为 4 MiB。写入 8 MiB 文件时,dd 写到 4 MiB 后返回 No space left on device;df -h 显示 4.0 MiB 已用、0 可用、使用率 100%。截断隔离填充文件后恢复约 4.0 MiB 可用,并成功创建恢复标记。

inode 对照实验使用 16 MiB tmpfs 和 64 个 inode。创建第 64 个小文件时失败,此时 df -h 仍显示约 16 MiB 可用、数据使用率 0%,而 df -i 显示 64/64、使用率 100%。释放 10 个实验文件后成功创建恢复标记。

因此生产诊断要先定位真实挂载点,再分别检查块与 inode;若 df 与 du 不一致,还要检查 lsof +L1。删除前必须确认所有权、保留期和恢复来源。

参与排查