一、背景說明
經常會在運維工作中會遇到某服務器磁盤滿了,一些應用無法開啟的情況,就需要去清理垃圾文件,釋放磁盤空間,這時候就要先查看磁盤使用情況,尤其是接手別人運維的服務器,不了解之前的應用部署,常用的是命令有df和du以及ls。
題外話,應用服務器的磁盤滿的情況大部分是由於應用服務產生大量的日志文件沒有做定時轉儲,撐爆了磁盤;數據庫服務器的磁盤滿的情況大部分是備份文件或者歸檔日志沒有做清理或者沒有移動至專門的存儲服務器上。
二、du和df的區別
- du:disk usage,是通過搜索文件來計算每個文件的大小然后累加,du能看到的文件只是一些當前存在的,沒有被刪除的。他計算的大小就是當前他認為存在的所有文件大小的累加和。可以理解成統計文件大小相加。
- df:disk free,通過文件系統來快速獲取空間大小的信息,當我們刪除一個文件的時候,這個文件所占用的空間並不是立馬被釋放,可能還有進程在使用,df命令就依然可以統計的到,只有當涉及到的進程都被kill掉之后,空間釋放,這時候du和df就一致了。可以理解成統計數據塊的使用情況。
三、常用命令
-
可以通過
df --help和du --help查看參數說明 -
df -h查看磁盤使用情況[NOTE]
-h --human-readable print sizes in human readable format,是將大小信息轉換成k,M,G。
-
du -h --max-depth=1 /data[NOTE]
-h --human-readable print sizes in human readable format,是將大小信息轉換成k,M,G。
--max-depth=1 查看/data目錄下的各個目錄占用空間大小和/data目錄所占空間大小,不計算各個目錄中的子目錄,如果--max-depth=0就是查看/data目錄所占空間大小,不添加此參數會遞歸統計/data目錄下所有目錄大小包含子目錄,可以理解成目錄結構的層數。
四、解決問題案例
- 先通過
df -h命令查看各個磁盤的使用情況,查看對應的掛載目錄,假設根目錄滿了 - 再通過
du -h --max-depth=1 /命令查看具體是根目錄下哪一個目錄所占空間過度,並以此類推逐層去查看,假設是/var/log目錄所占空間過大 - 先
cd /var/log目錄,最后通過ll -h查看此目錄下具體是哪一個文件過大,再做處理,當然后續可以配置好自動轉儲或者自動清理等。
