df与du已使用空间不一致的原因及排查
问题发现:
linux df -h
显示使用空间已满,用 du -sh
查看哪个文件夹占用空间比较大时显示只使用了26G 差距很大,例如:
[root@ls-dj-test-4 /]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 308G 308G 20K 100% /data
[root@ls-dj-test-4 /]# du -sh /data/
26G /data
从这里面可以看出通过du看到使用了26G,但是通过df 看,/data目录已使用308G
原因:
显示大小不一样,一般而言,df显示的使用空间要大于du,这是因为: 当一个文件被删除的时候,在文件系统的目录中已经不可见了,所以du就不会再统计它了。然而如果此时还有运行的进程持有这个已经被删除了的文件的句柄,那么这个文件就不会真正在磁盘中被删除,分区超级块中的信息也就不会更改。这样df仍旧会统计这个被删除了的文件。
办法:
- 1、lsof |grep deleted > deleted_file查看有哪些未被释放的文件
- 2、排序看最大的未被释放的文件大小,命令:
sort -nr -k 7 deleted_file > sort_deleted_file
- 3、cat sort_deleted_file 查看前面那些文件,将占用空间大的程序kill掉
kill [pid]
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!