“No space left on device”可能是Inode耗尽所致,需用df -i检查Use%是否达100%,再通过find或ncdu定位/var等路径下的海量小文件,最后清理journal、tmp或Docker数据,并通过监控、分区优化和mkfs预设Inode预防。

当Linux系统提示“No space left on device”,但用 df -h 查看磁盘空间仍有富余时,很可能是Inode耗尽导致的——此时文件系统无法创建新文件或目录,即使磁盘块还有空闲。df -i 是定位该问题的核心命令。
用 df -i 快速确认 Inode 使用率
df -i 会列出各挂载点的 Inode 总数、已用、可用及使用百分比。重点关注 Use% 列:
- 若某分区(如
/或/var)的 Use% 达到 100%,即 Inode 耗尽; - 注意:Inode 耗尽和磁盘空间满互不影响,
df -h和df -i需**同时检查**; - 可加
-T参数查看文件系统类型:df -i -T,不同文件系统默认 Inode 数量策略不同(如 ext4 可在 mkfs 时指定-N)。
定位大量小文件的目录(Inode 占用大户)
Inode 耗尽通常由海量小文件(如日志碎片、缓存、临时文件、邮件队列)引起。用以下命令逐级排查:
- 按子目录统计 Inode 使用量(以
/var为例):find /var -xdev -type f | cut -d/ -f1-3 | sort | uniq -c | sort -nr | head -10 - 更直观方式(需安装
ncdu):ncdu -x /var→ 进入后按Shift+I切换显示 Inode 数而非大小 - 常见高危路径:
/var/log/journal(systemd-journald 日志)、/var/spool/postfix/maildrop(堆积邮件)、/tmp或应用缓存目录(如/var/lib/docker/overlay2)
清理或释放 Inode 的实用操作
确认目标目录后,针对性清理(务必先备份关键数据):
- 清空过期 journal 日志:
journalctl --disk-usage查大小,再执行journalctl --vacuum-time=7d(保留7天)或--vacuum-size=500M - 删除无主临时文件:
find /tmp -type f -mtime +7 -delete(谨慎使用-delete,建议先-ls预览) - 清理 Docker 悬空数据:
docker system prune -a --volumes(注意影响运行容器) - 若为日志轮转失效,检查
logrotate配置,并手动归档压缩旧日志:gzip /var/log/*.log.1
预防 Inode 耗尽的长期建议
避免问题反复发生,需从机制上优化:
- 监控告警:在 Zabbix/Nagios 中添加
df -i的 Use% 监控(阈值建议设为 85%) - 合理规划分区:对易产生小文件的路径(如
/var、/home)单独挂载,避免影响根分区 - 创建文件系统时预留足够 Inode:
ext4 示例:mkfs.ext4 -N 20000000 /dev/sdb1(指定 2000 万 Inode) - 应用层控制:如 Nginx 日志按天切分并启用
rotate;程序避免无限生成临时文件


















