刪除文件磁盤空間未釋放

在客戶使用我們產(chǎn)品后鹏氧,發(fā)現(xiàn)一個(gè)問題:在刪除了文件后池户,磁盤空間卻沒有釋放离例。是有進(jìn)程在打開這個(gè)文件换团,還是其他情況?我們一起來看看一下兩個(gè)場(chǎng)景

一. 場(chǎng)景一:進(jìn)程打開此文件

當(dāng)一個(gè)文件正在被一個(gè)進(jìn)程使用時(shí)宫蛆,用戶刪除此文件艘包,文件只會(huì)從目錄結(jié)構(gòu)中刪除,但并沒有從磁盤刪除耀盗。當(dāng)使用這個(gè)文件的進(jìn)程結(jié)束后想虎,文件才會(huì)真正的從磁盤刪除,釋放占有的空間袍冷。

我們發(fā)現(xiàn)剩余磁盤空間比較少時(shí),回去刪除一些大的臨時(shí)文件或者log文件猫牡,如果刪除之后會(huì)發(fā)現(xiàn)磁盤空間并未減少胡诗,那么可以通過“l(fā)sof”命令去查看正在使用該文件的進(jìn)程,然后再重啟該進(jìn)程或者服務(wù)淌友。

【例子】

現(xiàn)在發(fā)現(xiàn)磁盤空間的占用了99%煌恢,剩余空間只剩下522M。
SUSE11X64-001:/test # df -h
Filesystem                       Size  Used Avail Use% Mounted on
/dev/sda2                         29G   27G  522M  99% /
devtmpfs                         972M  116K  972M   1% /dev
tmpfs                            972M     0  972M   0% /dev/shm
 找到一個(gè)文件"vmcore"占用了接近900M空間震庭,但這個(gè)文件不需要再使用了瑰抵,于是采用“rm”命令刪除此文件,可是刪除后器联,發(fā)現(xiàn)磁盤空間并沒有真正的減少二汛。
SUSE11X64-001:/test # rm vmcore 
SUSE11X64-001:/test # df -h
Filesystem                       Size  Used Avail Use% Mounted on
/dev/sda2                         29G   27G  522M  99% /
devtmpfs                         972M  116K  972M   1% /dev
tmpfs                            972M     0  972M   0% /dev/shm
//10.204.16.2/home/splx/iceking  6.3T  1.6T  4.7T  25% /mnt/iceking
也就是說很有可能有其他進(jìn)程正在使用這個(gè)文件,使用“l(fā)sof”命令去查看正在使用該文件的進(jìn)程拨拓。
SUSE11X64-001:/test # lsof | grep vmcore
a.out      2610       root    3r      REG                8,2 941331144    1643779 /test/vmcore (deleted)
進(jìn)程號(hào)為2610(進(jìn)程名為"a.out")的進(jìn)程肴颊,正在使用vmcore文件,也可以看到其后有“deleted”:其表示正在使用的文件被刪除渣磷,但并沒有真正從磁盤上移除婿着。
現(xiàn)在我們刪除這個(gè)進(jìn)程,并查看磁盤空間此時(shí)占用率降低為95%醋界,剩余空間增加到1.4G竟宋。

SUSE11X64-001:/test # df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 29G 26G 1.4G 95% /
devtmpfs 972M 116K 972M 1% /dev
tmpfs 972M 0 972M 0% /dev/shm

二. 場(chǎng)景二:內(nèi)核模塊Bug

在文件系統(tǒng)處理文件需要的信息都存放在索引節(jié)點(diǎn)(inode)中,如果在刪除文件的時(shí)候索引節(jié)點(diǎn)的引用計(jì)數(shù)不為0(表示文件正在被使用)形纺,則不會(huì)在磁盤中真正的刪除文件丘侠,從而保證正在使用此文件的進(jìn)程能夠正常的處理文件。

首先我們一起來看一下內(nèi)核中關(guān)于文件系統(tǒng)的一些關(guān)鍵數(shù)據(jù)結(jié)構(gòu)的關(guān)聯(lián)逐样,當(dāng)一個(gè)進(jìn)程打開一個(gè)文件后婉陷,便會(huì)在內(nèi)核中創(chuàng)建一個(gè)file對(duì)象帚称,這個(gè)對(duì)象主要描述了進(jìn)程如何與文件進(jìn)行交互。file對(duì)象中將指向一個(gè)dentry結(jié)構(gòu)(目錄項(xiàng))秽澳,目錄項(xiàng)中描述了目錄項(xiàng)名稱闯睹,父目錄項(xiàng)信息,子目錄項(xiàng)信息等担神。而dentry中的d_inode所指向的inode節(jié)點(diǎn)中則包含了實(shí)際的文件存儲(chǔ)在磁盤上的信息楼吃。

當(dāng)多個(gè)進(jìn)程打開同一個(gè)文件時(shí),內(nèi)核中變會(huì)創(chuàng)建相應(yīng)的file對(duì)象妄讯,但是他們都公用同一個(gè)dentry孩锡,只不過每一次打開文件dentry的引用計(jì)數(shù)d_count加1。并且對(duì)于打開的同一個(gè)文件而言亥贸,inode也是唯一的躬窜,inode的引用計(jì)數(shù)i_count一般為文件硬鏈接的數(shù)目】恢茫看過一些中文博客荣挨,說“同一個(gè)文件,每打開一次朴摊,則inode中引用計(jì)數(shù)i_count則加1”默垄,這種說法通過我的驗(yàn)證結(jié)果是錯(cuò)誤的。實(shí)驗(yàn)結(jié)果是:對(duì)于同一個(gè)文件甚纲,每打開一次口锭,則inode中的引用計(jì)數(shù)不變,但相應(yīng)的dentry引用計(jì)數(shù)加1.

這次客戶在刪除文件后介杆,磁盤空間沒有釋放鹃操,通過"lsof"命令也沒有找到正在占用此文件的進(jìn)程。于是再次懷疑這是由于產(chǎn)品的內(nèi)核模塊早成的春哨。后經(jīng)分析得到:在上一篇博文《Linux Kernel模塊內(nèi)存泄露查找 (2)》中解釋過由于在產(chǎn)品內(nèi)核模塊中组民,對(duì)dentry引用,并使用完之后并沒有對(duì)其引用計(jì)數(shù)減1悲靴,從而造成內(nèi)存泄露臭胜。在這種情況下,dentry不會(huì)被釋放癞尚,則inode也就一直被引用著耸三,從而也導(dǎo)致了即使刪除文件,也不會(huì)從磁盤刪除浇揩。

而且針對(duì)以上的問題和分析仪壮,如果不能及時(shí)給客戶修這個(gè)問題,那也只能讓其重新啟動(dòng)OS胳徽,空閑的磁盤空間才會(huì)釋放出來积锅。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末爽彤,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子缚陷,更是在濱河造成了極大的恐慌适篙,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,273評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件箫爷,死亡現(xiàn)場(chǎng)離奇詭異嚷节,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)虎锚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門硫痰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人窜护,你說我怎么就攤上這事效斑。” “怎么了柱徙?”我有些...
    開封第一講書人閱讀 167,709評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵缓屠,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我坐搔,道長(zhǎng)藏研,這世上最難降的妖魔是什么敬矩? 我笑而不...
    開封第一講書人閱讀 59,520評(píng)論 1 296
  • 正文 為了忘掉前任概行,我火速辦了婚禮,結(jié)果婚禮上弧岳,老公的妹妹穿的比我還像新娘凳忙。我一直安慰自己,他們只是感情好禽炬,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評(píng)論 6 397
  • 文/花漫 我一把揭開白布涧卵。 她就那樣靜靜地躺著,像睡著了一般腹尖。 火紅的嫁衣襯著肌膚如雪柳恐。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,158評(píng)論 1 308
  • 那天热幔,我揣著相機(jī)與錄音乐设,去河邊找鬼。 笑死绎巨,一個(gè)胖子當(dāng)著我的面吹牛近尚,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播场勤,決...
    沈念sama閱讀 40,755評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼戈锻,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼歼跟!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起格遭,我...
    開封第一講書人閱讀 39,660評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤哈街,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后如庭,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體叹卷,經(jīng)...
    沈念sama閱讀 46,203評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評(píng)論 3 340
  • 正文 我和宋清朗相戀三年坪它,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了骤竹。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,427評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡往毡,死狀恐怖蒙揣,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情开瞭,我是刑警寧澤懒震,帶...
    沈念sama閱讀 36,122評(píng)論 5 349
  • 正文 年R本政府宣布,位于F島的核電站嗤详,受9級(jí)特大地震影響个扰,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜葱色,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評(píng)論 3 333
  • 文/蒙蒙 一递宅、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧苍狰,春花似錦办龄、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至翔忽,卻和暖如春英融,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背歇式。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工驶悟, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人贬丛。 一個(gè)月前我還...
    沈念sama閱讀 48,808評(píng)論 3 376
  • 正文 我出身青樓撩银,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親豺憔。 傳聞我的和親對(duì)象是個(gè)殘疾皇子额获,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容