Linux 磁碟不夠用怎麼辦(Linux 磁碟空間不足)
在伺服器運維過程中,我們時常會遇到這樣的情況,收到伺服器磁碟空間告警
登入伺服器,通過 df -Hl
檢視
和告警資訊一致,接著我們就是要找到導致磁碟空間滿的目錄或檔案
如何找到佔用空間大的目錄或檔案?
一種比較笨的方法是,在根目錄下,通過 du -hs
命令,列出各目錄所佔空間大小
之後再用同樣的方法繼續到對應目錄下去找
再相對高效一點的方法是通過 du的 -d
引數,或--max-depth
,設定查詢的目錄深度,目錄深度增加,所查詢的目錄,展示出來會很多,這個時候可以通過grep
進行過濾
通過這樣的方式,可以搜出以G或者T為單位的佔用磁碟空間的大目錄,並排序
或者可以通過find來查詢
find / -type f -size 1G -exec du -h {} /;
從效率上來說,find
要比du
要更快速、靈活
通過這兩種方法,我們可以快速找到佔用磁碟空間的罪魁禍首
你以為就這麼簡單?很多時候,你會發現,通過find或du查半天,發現所有加起來的佔用空間,和df看到的磁碟空間佔用,相差很大,就比如我上面的兩張圖
通過df檢視,磁碟使用37G,但是在根目錄下通過du -hs
檢視,總共加起來差不多10G,沒有隱藏目錄,那空間被誰吃了?
很明顯,有空間被已刪除檔案佔用,檔案刪除了,但是資源沒釋放
之前介紹過一個很好用的命令:lsof,我們可以通過以下命令去檢視
lsof L1
從結果可以看出,有一個 28G 左右的大日誌檔案,刪除了,但是空間沒釋放,這是很常見的一種情況
對應的解決方法就是,重啟 tomcat 應用,釋放空間
磁碟空間莫名被吃?
還有一種經常有人問的問題,就是,通過df檢視到的磁碟
會發現,Used 和 Avail 加起來不夠 Size,莫名被吃掉一部分
其實這是 Linux 檔案系統的一種安全策略,它預設會為 root 使用者保留 5% 的磁碟空間,留作緊急情況使用。這樣能保證有些關鍵應用(比如資料庫)在硬碟滿的時候有點餘地,不致於馬上就 crash
我們可以通過 tune2fs 修改預留空間的比例
tune2fs -m 1 /dev/vda1
通過下圖可以看到前後對比圖片
這樣被吃掉的空間,就吐出來了
來源:本文轉自公眾號運維研習社,點選檢視原文。