熟悉Linux操作系統的人都清楚,Linux在使用一定時間,需要對磁盤的空間進行掃描,以便節省更多的磁盤空間。但很多人都不知道怎樣清理Linux磁盤?對于Linux磁盤已滿的問題,我們通常的解決方案是使用du查找可以清除的大文件,然后臨時刪除它們以首先減少磁盤使用率,以確保磁盤可以繼續寫入。
怎樣清理Linux磁盤?
1、確定是不是真的是磁盤空間不足
輸入命令:df –lh 查看磁盤信息
2、如何定位最大文件目錄
輸入命令: cd / 進入根目錄。
輸入命令:du -h max-depth=1 尋找當前目錄,哪個文件夾占用空間最大
3、如何定位最大文件
輸入命令:ls –lhS 將文件以從大到小順序展現
4、確認文件未被占用
刪除文件誰都會:rm –f catalina.out 但是,最好確認下是否要下載下來讓開發人員分析日志。
但是也有些不一樣的情況影響我們的推進效果。下面我們就來看一下不同情況,如果清理Linux磁盤。
一、被忽略的隱藏文件
1、認識 swapfile
Linux 的交換文件 swapfile 的產生場景較普遍,而且也是以隱藏文件的形式存在的,因此這里主要聊聊 swapfile 這一類的隱藏文件。
當用 vim 打開一個文件時,都會產生一個 .swp 的臨時隱藏交換文件,用來備份緩沖區中的內容。
當文件非正常關閉(比如直接關閉終端或者電腦斷電等)時,.swp文件不會被刪除,這樣就可以用此文件來恢復文件。(注意當正常關閉時,此文件會被刪除;且如果只是讀取文件,不會產生 .swp 文件)
而且,如果 vim 意外退出后,又重新打開文件二次編輯,那么舊的 .swp 文件會繼續保留,并產生新的 .swo 臨時隱藏文件。
如果二次編輯的時候,vim 又異常退出了,那么還會繼續產生新的臨時隱藏文件.swn、.swm、 .swl …
2、處理建議
有些隱藏文件的磁盤占用也挺大:
1.:/tmp # ll -rth | grep G
2.total 17.7G
3.-rw------- 1 xxxx users 17.6G 2020-02-12 18:27 .sqlkfJTFl.swp
所以有時候碰到大隱藏文件導致磁盤滿的情況,如果沒能發現這些隱藏文件,就會覺得離奇和疑惑。
所以在排查磁盤滿問題的時候,可以通過執行 vim -r 來查看和檢查下所有臨時交換文件的大小;或者通過 ls -lha 把所有隱藏文件都列出來看看大小。
更粗暴地,如果不想留 swapfile 這個特性,可以考慮關掉 swapfile :
1.vim /etc/vimrc
2.# 添加如下配置
3.set noswapfile # 禁止在編輯時候產生此文件;
但是注意這僅限于對文件損失可以容忍的情況下;
如果不能容忍文件損失,那還是建議還是打開 swapfile:
1.vim /etc/vimrc
2.# 添加如下配置
3.set swapfile # 則是在編輯時候產生此文件。
二、未釋放的已刪除文件
1、du 和 df 不一致
如果隱藏文件因素排除了,還是發現 du 出來的大小詭異,比如 du 發現磁盤并沒有用滿,但是 df 看到磁盤使用率卻是 100% 。
這又會是什么原因呢?
這時候,通常就得懷疑有一些已刪除的文件,還被一些進程 hold 住句柄沒釋放,導致這些文件雖然已經刪除,也的確看不到了,但是卻還占著磁盤空間;從而導致 du 和 df 出來的磁盤使用結果不一致的情況。
2、處理建議
通過執行 lsof | grep deleted 可以找到那些沒有釋放磁盤空間的文件和進程,然后通過重啟對應進程,就可以達到釋放已刪除文件占用的空間的目的。
另外,對于這種情況,還有個錯誤的處理方法,這里特別提醒下:
有些同學在找到未釋放已刪除文件的 pid 之后,可能會直接通過 kill pid 來達到釋放已刪除文件的目的。這種做法確實能夠釋放已刪除文件,從而釋放磁盤空間,但是這種做法是有副作用的,危害可大可小。
如果在離線環境這么操作,影響一般不大;但是如果在生產環境這么操作的話,那就可能搞出故障來了。
我們假設這么一種場景:
生產環境的某程序由于某種bug,一直不會釋放日志文件,而分時寫入的日志文件又是有過期刪除機制的,這樣一直持續下去,就會發現服務器上有大量的已過期刪除日志文件還占用著磁盤空間,直到產生磁盤滿風險。
那么這個時候如果直接通過 kill pid 來處理的話,就直接把生產環境的在線程序直接干掉了;這個后果就可想而知了:在這個程序被守護進程拉起來之前,這個服務都是不可用的。
好了,關于怎樣清理Linux磁盤的全部內容,想了解更多關于Linux的信息,請繼續關注我們吧。