df -h統計的信息與du -sh不一致的原因

有時候會遇到這樣的問題:df -h統計一個目錄,顯示有約100M可用空間,使用了5G;而用du -sh統計該目錄下的文件大小,卻發現總共才占用了1G。也就是說,二者統計結果差距巨大。
例如:
df-h /tmp/
結果:
3.9G 3.5G 220M 95% /tmp
du-sh /tmp/
結果:
132K /tmp/
結果差異巨大。
引用網上的一段話,原因是這樣的:
(1)This section gives the technical explanation of why du and df sometimes report different totals of disk space usage. When a program that is running in the background writes to a file while the process is running, the file to which this process is writing is deleted. Running df and du shows a discrepancy in the amount of disk space usage. The df command shows a higher value. (2)The difference is that whenever an application has an open file, but the file is already deleted, then it is counted in the df output (because the space is certainly not free) but not in du (because it is not being used by a file).
如何查看是什么進程導致的問題?
假設你發現是 /tmp/ 目錄不對勁,那么就這樣就可以查看:
lsof| grep /tmp/
輸出的結果中,注意某些含有“(deleted)”字樣的記錄,它們中的一部分就是罪魁禍首,將它們kill掉即可(如果可以重啟這些進程所對應的服務的話,也有可能解決問題)。

評論關閉