天天看點

Linux 根分區快滿了,這個方法快速定位!

在伺服器運維過程中,我們時常會遇到這樣的情況,收到伺服器磁盤空間告警

Linux 根分區快滿了,這個方法快速定位!

登入伺服器,通過df -Hl檢視

Linux 根分區快滿了,這個方法快速定位!

和告警資訊一緻,接着我們就是要找到導緻磁盤空間滿的目錄或檔案

如何找到占用空間大的目錄或檔案?

一種比較笨的方法是,在根目錄下,通過du -hs指令,列出各目錄所占空間大小

Linux 根分區快滿了,這個方法快速定位!

之後再用同樣的方法繼續到對應目錄下去找

再相對高效一點的方法是通過du的-d參數,或--max-depth,設定查詢的目錄深度,目錄深度增加,所查詢的目錄,展示出來會很多,這個時候可以通過grep進行過濾

du -h -d 2|grep [GT] |sort -nr  
du -h --max-depth=2|grep [GT] |sort -nr        

通過這樣的方式,可以搜出以G或者T為機關的占用磁盤空間的大目錄,并排序

或者可以通過find來查詢

find / -type f -size +1G -exec du -h {} \;        

從效率上來說,find要比du要更快速、靈活

通過這兩種方法,我們可以快速找到占用磁盤空間的罪魁禍首

你以為就這麼簡單?很多時候,你會發現,通過find或du查半天,發現所有加起來的占用空間,和df看到的磁盤空間占用,相差很大,就比如我上面的兩張圖

通過df檢視,磁盤使用37G,但是在根目錄下通過du -hs 檢視,總共加起來差不多10G,沒有隐藏目錄,那空間被誰吃了?

很明顯,有空間被已删除檔案占用,檔案删除了,但是資源沒釋放

之前介紹過一個很好用的指令:lsof,我們可以通過以下指令去檢視

lsof +L1        
Linux 根分區快滿了,這個方法快速定位!

從結果可以看出,有一個28G左右的大日志檔案,删除了,但是空間沒釋放,這是很常見的一種情況

對應的解決方法就是,重新開機tomcat應用,釋放空間

磁盤空間莫名被吃?

還有一種經常有人問的問題,就是,通過df檢視到的磁盤

Linux 根分區快滿了,這個方法快速定位!

會發現,Used和Avail加起來不夠Size,莫名被吃掉一部分

其實這是Linux檔案系統的一種安全政策,它預設會為root使用者保留5%的磁盤空間,留作緊急情況使用。這樣能保證有些關鍵應用(比如資料庫)在硬碟滿的時候有點餘地,不緻于馬上就 crash

我們可以通過tune2fs修改預留白間的比例

tune2fs -m 1 /dev/vda1        

通過下圖可以看到前後對比

Linux 根分區快滿了,這個方法快速定位!

這樣被吃掉的空間,就吐出來了!

繼續閱讀