生活随笔
收集整理的這篇文章主要介紹了
Linux下的磁盘空间管理
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
df -h /文件夾名
du -sh /文件夾名
后者統計的是我們能點開到的文件占用的空間,前者是總空間減去剩余空間。
可能出現的情況是二者不統一,原因見下:
http://wushank.blog.51cto.com/3489095/1533409
一、df和du的統計機制:
??? 1、du會把指定目錄下所有文件、目錄、目錄下的文件都統計。是建立在文件系統能看到的的確確是有這樣一些文件的基礎上的。也就是說我們能在文件系統里面看到的文件才會被du統計。
??? 2、df(df命令通過查看文件系統磁盤塊分配圖得出總塊數與剩余塊數。):
????????
?????? 這要從程序寫文件的方式來談起,一個進程要向一個文件里面寫東西,那么會得到一個pointer,
然后向指針指向的文件(磁盤區域)寫入。假如由于某些原因(也可能人為)被指向的文件被刪除了,但是(?write call)并不知道文件是否還在,就還會繼續向里面寫,不管文件是否存在,磁盤塊還是被寫操作使用。
于是因為文件沒有了,所以du統計不到寫入的這些磁盤塊,但是因為寫的進程還在,磁盤空間沒有被釋放,所以df卻能統計到,所以df統計的結果比du大很多。
如何解決呢?
1.停止系統上的程序。
2.如果還是不行,unmount一下文件系統看看
3.重啟系統
二、ls和du統計機制:
??????一個文件占用的磁盤空間和一個文件的大小是兩碼事情。
????? 占用空間取決于文件系統的塊(block)的大小,linux一般默認是4k(4096),因此,一個大小為1個字節的文件,最小也要占用4k,如果你創建文件系統的時候制定塊大小是16K,那么即便一個文件只有1個字節,占用空間也是16K。
????? 如果一個分區上主要放大文件,那么block可以大一些,有利于減少磁盤碎片,如果主要放小文件,那么block設置小一下,否則太浪費磁盤空間。
????? 通常情況下,ls 顯示的文件大小比du顯示的磁盤占用空間小
????? 原因:?? 比如文件系統的block是4K,一個13K的文件占用的空間是 13k/4k = 3.25個block,一個block只能被一個文件占用,因此實際占用空間就是4個block,就是16K。
????? 如果一個文件有比較大的黑洞,那么會出現文件大小比磁盤空間占用大的情況
????? 原因:?? 首先要理解什么是黑洞,怎么才能產生黑洞?
???????? 在向一個文件中寫數據的時候,文件偏移量可以大于文件的當前長度,在這種情況下,對該文件的下一次寫將加長該文件,并在文件中構成一個空洞,這一定是允許的。位于文件中但沒有寫過的字節都被讀為0.?? 文件中的空洞并不要求在磁盤上占用存儲區。具體處理方式與文件系統的實現有關,當定位超出文件尾端之后寫時,對于新寫的數據需要分配磁盤塊,但是對于原文件尾端和新開始寫位置之間的部分則不需要分配磁盤塊。
??? 稀疏文件--文件中有“洞”(hole)的文件
用Shell也可以創建稀疏文件:
$?dd?if=/dev/zero?of=sparse_file.img?bs=1M?seek=1024?count=0
0+0?records?in
0+0?records?out
查看方法:
?ls -s? : 反應磁盤分配情況,非實際文件大小,以block為單位????== du
?ls -lh : 反應實際文件大小????== du --apparent-size
常用的解決辦法就是:
lsof |grep deleted
sudo kill -9 進程編號
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎
總結
以上是生活随笔為你收集整理的Linux下的磁盘空间管理的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。