Linux中du、df顯示不一致問題


Linux中du、df顯示不一致問題


最近在做關於Q博士的項目的時候,用到了docker進行部署,對於后端服務可能會經常變動,於是將docker容器的jar包與宿主機目錄下的jar包進行綁定,之后每次需要更新的時候替換掉原來的jar包,然后重啟容器即可。當我使用docker logs -f <容器名>查看容器日志時,發現需要遍歷原來所有的日志,對於運行了很長時間的容器來說,光是遍歷就要花很長時間,雖然可以用 --tail 100 只查看尾部100行,但是日志越來越大肯定會撐爆磁盤,這時我想要清除日志文件,發現使用du -sh 和 df -h 統計的結果不一致,於是搜索了下相關的信息,這篇博文介紹的非常清晰https://www.linuxidc.com/Linux/2018-03/151600.htm

1、du統計的原理

(1)如果統計目錄下掛載了其他文件系統,那么也會對這個文件系統進行統計。

(2)如果文件被刪除,即使被其他進程引用了,du命令也無法對其統計。因為stat命令找不到這個文件。

(3)可以跨分區統計某些你想統計的文件大小總和。因為它們都能被stat找到並統計。

2、df統計的原理

(1)當某個文件系統下掛載了其他分區,df不會把這個分區也統計進去。

(2)由於df每次統計都是讀取superblock,所以df對文件系統中的某個文件進行統計時,會自動轉為統計這個文件系統的信息。

(3)df會統計已刪除但卻仍有進程引用的文件。

從以上原理可以看出,du統計的結果並不總是比df小,因為du會統計目錄下的掛載文件,而df不會。然而du不會
統計已經被刪除但仍然被進程使用的文件,而df會統計。

針對於上述docker日志,如果不想清空日志文件,使用 echo "" > <日志文件名> 即可,因為使用rm -rf不會釋放空間(docker進程仍然占用),除非重啟容器。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM