linux 文件大小总和,linux磁盘占用跟每个文件夹大小总和不符?
我們在使用磁盤統計的時候,經常用到df和度命令, 但是很多時候都發現不太一致.其實主要分下面兩類情況
一、僵尸進程
通過top命令可以統計僵尸進程:
image.png
也可以通過以下命令進行操作
ps -ef | grep defunct | grep -v grep | wc -l
如果發現有的話,可以清理一波,用如下命令:
ps -e -o ppid,stat | grep Z | cut -d '' -f2 | xargs kill -9
注意: 僵尸進程一次不一定能被清理干凈,可以多清理幾次.
二、刪除的文件被進程占用
df 統計的時候是從文件系統考慮的,不僅包含文件系統大小,還要統計被命令或者程序占用的空間,
例如 文件已經被刪除,但是被某個進程持有。其原理是讀取每個分區的superblock來獲取空閑數據塊、已使用數據塊,從而計算出空閑空間和已使用空間,因此df統計的速度極快(superblock才占用1024字節)。所以非常快。
既然文件已經被刪除了為何還不釋放呢? 文件已經被刪除,但是被某個進程持有。這種情況就不會釋放。
如何查找出這些僵尸文件呢?
lsof |grep deleted
找到的結果就是一些文件已經被刪除,但是空間還沒有釋放的。可以很久實際情況將持有的改文件的PID kill掉來釋放空間。
可以使用如下命令批量刪除。 生產環境謹慎操作。
for i in `lsof |grep deleted |awk '{ print $2 }'` ; do kill -15 $i ;done
三、du和df的原理
du -s命令通過將指定文件系統中所有的目錄、符號鏈接和文件使用的塊數累加得到該文件系統使用的總塊數,因為是stat所以所有類型的 ”文件” 都可以統計的到;而df命令通過查看文件系統磁盤塊分配圖得出總塊數與剩余塊數。文件系統分配其中的一些磁盤塊用來記錄它自身的一些數據,如i節點,磁盤分布圖,間接塊,超級塊等。這些數據對大多數用戶級的程序來說是不可見的,通常稱為Meta Data。
du命令是用戶級的程序,它不考慮Meta Data,而df命令則查看文件系統的磁盤分配圖并考慮Meta Data。df命令獲得真正的文件系統數據,而du命令只查看文件系統的部分情況。
總結
以上是生活随笔為你收集整理的linux 文件大小总和,linux磁盘占用跟每个文件夹大小总和不符?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OJ1021: 三个整数的最大值
- 下一篇: 测试需要的的linux命令,(面试必备)