“No space left on device”通常是inode耗尽而非磁盘空间满;需先用df -i确认IUse%≥95%(尤其100%),再逐级用find -xdev -type f | wc -l定位/var等高占用目录,最后安全清理小文件或重启占用进程。

“No space left on device”不一定是磁盘空间真满了,很可能是 inode 耗尽了。Linux 中每个文件、目录、符号链接都独占一个 inode,它和文件大小无关,只和数量有关——成千上万个 1KB 的日志或临时文件,就能把 inode 吃光,而磁盘还剩几十 GB。
第一步:确认是不是 inode 问题
运行这个命令:
df -i
重点看 IUse% 列:
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
- 如果某个挂载点(比如 /var、/boot 或 /)显示 100% 或 ≥95%,就是 inode 耗尽;
- 同时用 df -h 对比:若空间使用率很低(比如才 40%),但 IUse% 是 100%,基本坐实问题;
- 特别注意 /var、/boot 这类独立分区,它们有各自的 inode 池,根目录没满不代表它们安全。
第二步:快速定位高 inode 占用目录
从可疑挂载点开始,逐层找“文件最多”的子目录:
- 查一级子目录文件数:
for i in /var/*; do echo "$i"; find "$i" -xdev -type f | wc -l; done | sort -k2nr - 发现某目录(如 /var/spool/postfix/maildrop)数值异常高,就进它里面再跑一次:
cd /var/spool/postfix/maildrop && ls -U | head -n 5(看时间戳是否密集,判断是否 cron 堆积) - 常用高危路径:/var/log/journal(systemd 日志)、/var/cache(包缓存)、/tmp、/var/spool/clientmqueue(cron 邮件队列)
第三步:区分真实文件和“已删未释放”文件
有时候删了文件,inode 还没真正回收——因为进程还在打开它:
- 查已删除但仍在占用 inode 的文件:
lsof +L1 或 lsof | grep deleted - 重点关注 COMMAND 列里的服务名,比如 rsyslogd、nginx、java;
- 别直接 kill,优先重载服务:
systemctl reload rsyslog 或 nginx -s reload,释放更安全。
第四步:安全清理与预防
找到源头后,按类型处理:
- 删旧日志:
find /var/log -name "*.log" -mtime +30 -delete - 清空临时小文件(避免参数超长):
find /tmp -type f -print0 | xargs -0 -n 1000 rm -f - 禁用 cron 邮件堆积:
执行 crontab -e,开头加一行 MAILTO="",保存后重启 crond - 清理前先看几个文件名:
ls -1 | head -5,确认不是业务关键文件;生产环境建议先打包备份再删。

















