在 Linux 系统中,出现 no space left on device 错误不一定代表磁盘容量已满。很多时候 df 命令显示空间充足,但 inode 已经耗尽,导致无法创建新文件。本文说明如何确认并排查此类问题。

如何确认是 inode 耗尽
使用 df 命令时加上 -i 参数可以查看 inode 使用情况。如果 Use% 接近 100%,而普通 df 显示空间未满,就说明是 inode 问题。
# 查看各挂载点 inode 使用 df -i # 示例输出 # Filesystem Inodes IUsed IFree IUse% Mounted on # /dev/sda1 655360 655350 10 100% /
为什么 inode 会耗尽
每个文件或目录都需要一个 inode。如果系统中存在海量小文件,例如日志碎片、缓存文件、邮件队列等,就会迅速消耗 inode。常见场景包括:
- 应用频繁写入极小的日志文件且未轮转
- 临时目录被大量会话文件占满
- 邮件服务堆积未清理的队列
inode 耗尽排查脚本
下面的脚本从指定目录开始,逐层统计子目录中的文件数量,帮助定位占用 inode 最多的位置。
#!/bin/bash
# 用法: ./inode_scan.sh /path/to/scan
# 统计各子目录文件数,排序输出前20
target_dir=${1:-/}
echo "正在统计 $target_dir 下各子目录文件数..."
find "$target_dir" -maxdepth 1 -type d | while read -r dir; do
# 统计该目录直接及嵌套文件数
count=$(find "$dir" -type f | wc -l)
echo "$count $dir"
done | sort -rn | head -n 20
echo "排查完成,请重点关注文件数最多的目录"
清理与预防
找到问题目录后,可人工确认并删除无用文件。长期方案建议:
- 配置日志轮转,避免小文件堆积
- 对临时目录设置定时清理任务
- 监控 inode 使用率,提前告警
注意:删除文件前务必确认其无用,避免误删导致服务异常。
简单监控示例
可用如下命令检查 inode 使用率是否超过阈值:
# 当 inode 使用率大于90%时输出警告
use=$(df -i / | awk 'NR==2 {print $5}' | sed 's/%//')
if [ "$use" -gt 90 ]; then
echo "警告: inode 使用率已达 ${use}%"
fi
inodedfno_space_left_on_deviceLinux排查脚本修改时间:2026-07-24 18:09:26