欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

rm -rf之后磁盤空間沒有釋放的解決方法

 更新時間:2021年10月21日 15:21:39   作者:愛琴孩  
本文主要介紹了rm -rf之后磁盤空間沒有釋放的解決方法,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

rm -rf之后就高枕無憂了?

現(xiàn)在運營的平臺采用的是微服務架構(gòu),部署的服務較多,開發(fā)環(huán)境一臺服務器上部署幾十個服務是很正常的,之前用CI構(gòu)建部署的時候,發(fā)現(xiàn)磁盤滿了。我的處理方式是:先刪了 /tmp/ 目錄, 空閑出部分空間,然后檢查下幾個常用的用戶目錄,發(fā)現(xiàn)幾個日志文件占用了好幾個大G,由于是開發(fā)環(huán)境,所以就直接刪除, 于是 rm之后就天真地認為萬事大吉了...

然而過幾天后,又有同事發(fā)現(xiàn)該機器磁盤又滿了,驚呼奇怪咋這么快又滿了。最終發(fā)現(xiàn)是上次 rm后,占用好幾個大G的日志文件被刪除之后,磁盤空間并沒有釋放。Linux系統(tǒng)中是通過link的數(shù)量來控制文件刪除的,只有當一個文件不存在任何link的時候,這個文件才會被刪除。一般來說,每個文件都有2個link計數(shù)器:i_count 和 i_nlink,也就是說:Linux系統(tǒng)中只有i_nlink及i_count都為0的時候,這個文件才會真正被刪除。 

  • i_count表示當前文件使用者(或被調(diào)用)的數(shù)量
  •  i_nlink表示介質(zhì)連接的數(shù)量(硬鏈接的數(shù)量);

可以理解為i_count是內(nèi)存引用計數(shù)器,i_nlink是磁盤的引用計數(shù)器。 當一個文件被某一個進程引用時,對應i_count數(shù)就會增加;當創(chuàng)建文件的硬鏈接的時候,對應i_nlink數(shù)就會增加。在Linux或者Unix系統(tǒng)中,通過rm或者文件管理器刪除文件,只是將它會從文件系統(tǒng)的目錄結(jié)構(gòu)上解除鏈接(unlink),實際上就是減少磁盤引用計數(shù)i_nlink,但是并不會減少i_count數(shù)。如果一個文件正在被某個進程調(diào)用,用戶使用rm命令把文件"刪除"了,這時候通過ls等文件管理命令就無法找到這個文件了,但是并不意味著這個文件真正的從磁盤上刪除了。因為還有一個進程在正常的執(zhí)行,在向文件中讀取或?qū)懭?,也就是說文件其實并沒有被真正的"刪除",所以磁盤空間也就會一直被占用。當服務進程停止(文件句柄的引用計數(shù)會變?yōu)?)或者重啟后,占用的存儲空間才被釋放。如果不知道具體進程或文件名的話:lsof | grep deleted,這樣會查找所有被刪除的但是文件句柄沒有釋放的文件和相應的進程,然后再kill掉進程或者重啟進程即可。

其實可以簡單用修改文件內(nèi)容的方式(例如echo "test">test.log)在不用重啟進程的情況下釋放空間。

du和ls的區(qū)別

對于某個日志文件,直接用echo "test" > yyzx_tradingcenterservice.log.2020-06-03.log,然后 df 確認磁盤空間確實已經(jīng)釋放,分別執(zhí)行下面的命令:

[dev@tjptdebug-no yyzx_tradingcenterservice_logs]$ du -h  yyzx_tradingcenterservice.log.2020-06-03.log 
4.0K	yyzx_tradingcenterservice.log.2020-06-03.log
[dev@tjptdebug-no yyzx_tradingcenterservice_logs]$ ll -h  yyzx_tradingcenterservice.log.2020-06-03.log
-rw-rw-r-- 1 dev dev 7 Jul  8 19:49 yyzx_tradingcenterservice.log.2020-06-03.log

ls 的結(jié)果是 apparent sizes,我的理解是文件長度,就類似文件系統(tǒng)中 file 這個數(shù)據(jù)結(jié)構(gòu)中的定義文件長度的這個字段,du 的結(jié)果 disk usage,即真正占用存儲空間的大小,且默認度量單位是 block。block 為磁盤存儲的基本的單位,方便磁盤尋址等,而此處的block可以理解為一個邏輯單位,且一個文件除了包括數(shù)據(jù)外,還需要存儲描述此文件的其他信息,因此包含1個字節(jié)的文件實際在磁盤中占用的存儲空間不止1個字節(jié)。

總結(jié)

du == disk usage (磁盤使用量,占用的磁盤空間)
ls == apparent sizes(文件長度,file數(shù)據(jù)結(jié)構(gòu)中定義的文件長度字段)
一個文件占用的磁盤空間和一個文件的大小是兩碼事情。占用空間取決于文件系統(tǒng)的塊(block)的大小,Linux一般默認是4k(4096) ,因此,一個大小為1個字節(jié)的文件,最小也要占用4k,如果你創(chuàng)建文件系統(tǒng)的時候制定塊大小是16K,那么即便一個文件只有1個字節(jié),占用空間也是16K。通常情況下,ls 顯示的文件大小比du顯示的磁盤占用空間小,比如文件系統(tǒng)的block是4K,一個13K的文件占用的空間是 13k/4k = 3.25 個block,一個block只能被一個文件占用,因此實際占用空間就是4個block,就是16K。

到此這篇關(guān)于rm -rf之后磁盤空間沒有釋放的解決方法的文章就介紹到這了,更多相關(guān)rm -rf磁盤釋放內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論