inode耗尽时df -h显示空间充足但报“no space left on device”,而df -i显示iuse%达100%;需用find -xdev -type d配合wc -l定位高inode目录,重点排查/var/log/journal、/var/lib/docker/overlay2等;应配置journald限制、logrotate及监控df -i。
如何快速判断是磁盘空间还是 inode 耗尽
直接看 df -h 和 df -i 的输出差异:如果 df -h 显示使用率不高(比如 30%),但系统报 No space left on device,而 df -i 显示某挂载点 IUse% 达到 100%,基本可锁定为 inode 耗尽。注意:df -h 不反映 inode 状态,必须显式加 -i 参数。
定位高 inode 占用目录的 shell 一行命令
在疑似挂载点(如 /var)下快速找出 inode 消耗大户:
find /var -xdev -type d | while read dir; do echo "$(find "$dir" -maxdepth 1 -type f | wc -l) $dir"; done | sort -nr | head -20
说明:
– -xdev 防止跨文件系统(比如不进入 /proc 或 /sys)
– -maxdepth 1 保证只统计当前目录下的文件数,避免递归拖慢速度
– 实际中常见罪魁是 /var/log/journal、/var/lib/docker/overlay2、/var/spool/postfix/maildrop 等目录下堆积大量小文件
– 如果提示 Argument list too long,改用 find "$dir" -maxdepth 1 -type f -print0 | wc -l --files0-from=-
排查 Docker 或 systemd-journal 导致的 inode 泄漏
这两个服务极易产生海量小文件,且默认配置不清理: