掛了一塊50G到/data目錄下
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/xvdb1 50G 46G 1.2G 98% /data
顯示已經使用快50G空間了
可是在/data 下用 du -sh . 只顯示使用了19G
導致這個兩個命令查看磁盤容量不一致的原因是,用戶刪除了大量的文件被刪除后,在文件系統目錄中已經不可見了,所以du就不會再統計它。然而如果此時還有運行的進程持有這個已經被刪除的文件句柄,那么這個文件就不會真正在磁盤中被刪除,分區超級塊中的信息也就不會更改,df仍會統計這個被刪除的文件。
可通過 lsof命令查詢處於deleted狀態的文件,被刪除的文件在系統中被標記為deleted。如果系統有大量deleted狀態的文件,會導致du和df統計結果不一致。
# lsof |grep deleted #在opt目錄下執行lsof |grep deleted
解決方法:
1、根據lsof列出的pid直接kill相應進程或者重啟對應的服務。示例:
# kill -9 692
注:如果服務器正在運行業務,kill 會導致進程直接終止,可能會影響到業務,請慎重操作。
2、重啟服務器。
重啟服務器系統會退出現有的進程,開機后重新加載。該過程會釋放調用的deleted文件的句柄。
