深色模式
inode 与磁盘满假象
摘要:df 说还有空间却写不了文件?可能是 inode 耗尽,或被删文件仍被进程占用没释放。本文教你两招定位。前提:root/sudo。
适用环境
bash
df -h # 看空间(可能还有)
df -i # 看 inode 使用率(关键!)1
2
2
一、inode 耗尽场景
bash
df -i # 若 Use% 到 100%,新文件建不了
# 大量小文件(如缓存、session)会耗尽 inode
# 找小文件最多的目录:
find / -xdev -type f | cut -d/ -f2-3 | sort | uniq -c | sort -rn | head1
2
3
4
2
3
4
二、已删除但未释放的文件
危险
进程仍打开的文件被 rm 后,磁盘空间不会释放,直到进程关闭。这会导致"明明删了文件,df 还是满"。
bash
lsof +L1 # 列出已删除但仍被打开的文件(LINKCOUNT 为 0)
# 例如:nginx 1234 ... /var/log/access.log (deleted)
# 处理:重启该进程,或清空而非删除:> /var/log/access.log1
2
3
2
3
三、释放与验证
bash
# 找到占用进程后,优雅重启它释放空间:
systemctl restart <服务>
df -h # 空间应回落1
2
3
2
3
验证
- [ ]
df -i能判断 inode 是否耗尽 - [ ]
lsof +L1能找出"已删未释放"文件 - [ ] 重启对应进程后
df -h空间释放
常见坑
- 只清空间不看 inode:删了大文件但小文件无数,inode 仍满,新建文件照样失败。
- rm 替代 truncate:正在写的日志别直接 rm,用
> file清空更安全。 - docker Overlay 泄漏:容器层堆积的已删文件也会占 inode,需清理无用镜像。