磁盘满了:df 与 du 对不上时怎么查
df -h 显示某分区已经 100%,用 du -sh /* 加起来却对不上,或删了大文件空间也不回来。这类问题几乎人人都会撞上。
先分清两种「满」
- 块用尽:
df -h里 Use% 到 100% - inode 用尽:块还有空闲,但
df -i显示 IUse% 100%,这时也无法再创建新文件
df 大、du 小的常见原因
文件已被删除,但仍有进程开着句柄。空间要等进程关闭文件(或退出)才会释放。
lsof +L1
# 或
lsof | grep deleted
找到对应进程后,重启该服务或结束进程即可。日志类服务尤其常见。
挂载点盖住目录
某目录下先堆了数据,后来又把设备挂到这个路径上,原来的数据会被「盖住」,du 看不到,但底层分区仍被占用。检查:
findmnt
mount | column -t
# 临时卸载后看原目录大小(谨慎操作)
快速定位大目录
du -xhd1 / 2>/dev/null | sort -h
du -xhd1 /var 2>/dev/null | sort -h
-x 不跨文件系统,避免把别的挂载点混进来。