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