Linux 根分區快滿了!你還無計可施?

前言

大家好,這裏是浩道 linux,主要給大家分享 linuxpython網絡通信相關的 IT 知識平臺。

今天浩道跟大家分享硬核實戰乾貨,面對 linux 根分區快滿了,該如何定位

 文章來源:https://blog.csdn.net/weixin_38889300/article/details/121347245

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

登錄服務器,通過 df -Hl 查看

和告警信息一致,接着我們就是要找到導致磁盤空間滿的目錄或文件。

如何找到佔用空間大的目錄或文件?

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

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

再相對高效一點的方法是通過 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

從結果可以看出,有一個 28G 左右的大日誌文件,刪除了,但是空間沒釋放,這是很常見的一種情況。

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

磁盤空間莫名被喫?

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

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

其實這是 Linux 文件系統的一種安全策略,它默認會爲 root 用戶保留 5% 的磁盤空間,留作緊急情況使用。這樣能保證有些關鍵應用(比如數據庫)在硬盤滿的時候有點餘地,不致於馬上就 crash

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

tune2fs -m 1 /dev/vda1

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

這樣被喫掉的空間,就釋放出來了!

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/kuy67AJqPm3YkySZScnpZg