釋放被程序佔用的磁盤空間

*問題

我們在生產中有時候會遇到磁盤空間滿了,造成操作系統崩潰情況,這因爲操作系統後臺有很多程序在不停的工作,比如說日誌就不停的在寫。我們的通常做法是,臨時清空一些沒有用的文件數據來減輕系統的壓力,如果這個時候又有一些程序正在訪問佔用這個文件,我們該如何處理呢?

試驗模擬

第一次實驗:無程序佔用磁盤空間的情況下清理磁盤空間

# df -h

df -h命令可以查看實驗環境的磁盤空間情況

這裏寫圖片描述

如上圖用掛載到/boot文件夾下的磁盤a的分區1來做實驗,磁盤總空間大小爲969M,已經使用35M,可用885M,使用率爲4%,現在把磁盤空間使用率提高至80%。

使用dd命令從設備文件/dev下寫0到/boot/文件夾下的新建的test文件裏,大小爲700M。

#dd if=/dev/zero of=/boot/test bs=1M count=700


這裏寫圖片描述

從圖上可以看出,/boot分區的使用率升至80%。

現在使用rm命令刪除test文件

# rm -rf /boot/test


從圖上可以看出,磁盤空間的使用率降低到4%,說明用rm命令成功的刪除了test文件,並釋放了磁盤空間。



第二次實驗:有應用程序佔用磁盤空間的情況下釋放磁盤空間

重複上面的命令,使/boot分區的使用率提高至80%,然後在同一操作系統上另外開一終端,使用vim命令編輯test文件,不要退出。

這裏寫圖片描述

注意:進入編輯模式不要退出

這裏寫圖片描述

切換終端終端,執行命令rm刪除test文件

# rm -rf /boot/test
#df -h


這裏寫圖片描述

從顯示的結果看出,執行rm命令後,空間使用率並沒降下來,還是80%,接着我們可以執行 ls 命令查看 test文件 是否存在。

這裏寫圖片描述

從圖上可以看到,boot目錄下沒有test文件,說明執行 rm 命令只是刪除了test文件,但是沒有釋放磁盤空間。刪除失敗,說明在有程序佔用磁盤空間的情況,只是執行 rm 命令可以刪除文件夾,但是不能夠釋放磁盤空間。


第三次實驗:釋放被程序佔用的磁盤空間

退出實驗二中的vim編輯,執行 rm 命令刪除test文件,重複上面的步驟,把/boot分區的磁盤空間使用率升至80%,同樣另開一個終端使用vim命令編輯/boot文件夾下的test文件不要退出。注意:不要執行rm命令

分析:實驗二發現有程序佔用了test文件,從而出現不能用 rm 刪除文件釋放磁盤空間的情況,同時在真實環境中,很可能有多個程序佔用要清裏的磁盤空間,如果採用殺死進程的方法管理程序,雖然可行,但是效率較低,不能達到快速釋放磁盤空間的目的。

這裏可以使用lsof命令查看誰正在佔用磁盤空間。

# lsof /boot/test


這裏寫圖片描述

從圖上可以清楚的看出,vim正在佔用test文件。

分析:我們既不能用直接刪除test文件方法來釋放磁盤空間,關閉程序的方法也達不到我們需求,那麼我們該怎麼辦呢?
其實我們可以用覆蓋test文件內容的方法來釋放磁盤空間。

繼續上面的操作,我們在/boot分區磁盤空間使用率在80%,並且不退出vim編輯的情況下,執行 > /boot/test 命令
> /boot/test 命令的意思是大於括號前面的內容覆蓋後面的文件內容,大於括號前面沒有內容,就爲空,覆蓋後,文件即爲空。

# > /boot/test


這裏寫圖片描述

從圖上看出,/boot分區下的磁盤空間使用率在不退出vim編輯模式的狀態下很快又變回了4%,說明釋放磁盤空間成功,實驗三成功。

在/boot文件夾下執行 ll 命令

這裏寫圖片描述

從圖上可以看到test文件還在,不過文件內容大小已經爲0,說明覆蓋成功。再執行 rm 命令刪除test文件即可。

這裏寫圖片描述

總結:實驗一中,在沒有程序佔用文件或者磁盤空間的情況下,直接 執行rm -rf 命令刪除文件,即可釋放磁盤空間。實驗二中,有程序佔用磁盤空間,用 rm -rf 可以刪除文件,但是不能釋放磁盤空間,除非關閉程序。實驗三中,在程序佔用磁盤空間的情況下,用覆蓋的方法可以釋放磁盤空間,達到強行釋放被程序佔用磁盤空間的目的!

最後,感謝認真用心的自己~~微笑

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章