如何在 Linux 下快速找到被刪除的文件?
公眾號關(guān)注“杰哥的IT之旅”,
選擇“星標”,重磅干貨,第一時間送達!
日常運維過程中,我們經(jīng)常需要處理磁盤空間問題,當接到告警后,第一時間會去找那些大文件,一般比如 Centos,可能大文件就是 /var/log/messages。
但有的時候,會出現(xiàn)怎么也查不到大文件的情況,通過 du 查找的時候,統(tǒng)計出來的大小,跟 df 顯示的占用空間對應(yīng)不上。
如果通過 df -i 查看inode沒有滿的話,那么極有可能,是有大文件被直接rm了,但是仍然有進程打開了這個文件。
這種情況,由于進程沒有退出,因此文件占用的空間并不會釋放;直到進程退出,磁盤空間才會真正釋放。
如何找到是哪個進程打開了該文件
Linux上,由于進程仍然存活,因此可以通過查看所有進程打開的 fd,如果該文件已經(jīng)被刪除,則查看時,會顯示(deleted)。
示例如下:
$?sudo?find?/proc/*/fd?-ls?|?grep??'(deleted)'
???388609??????0?lrwx------???1?zerotier-one?zerotier-one???????64?Aug?21?00:19?/proc/29400/fd/4?->?/tmp/ibpX85Vd\?(deleted)
???388610??????0?lrwx------???1?zerotier-one?zerotier-one???????64?Aug?21?00:19?/proc/29400/fd/5?->?/tmp/ibCwAgAj\?(deleted)
???388611??????0?lrwx------???1?zerotier-one?zerotier-one???????64?Aug?21?00:19?/proc/29400/fd/6?->?/tmp/ibRZ5rep\?(deleted)
???388612??????0?lrwx------???1?zerotier-one?zerotier-one???????64?Aug?21?00:19?/proc/29400/fd/7?->?/tmp/ibBuNEzA\?(deleted)
???388616??????0?lrwx------???1?zerotier-one?zerotier-one???????64?Aug?21?00:19?/proc/29400/fd/11?->?/tmp/ibG68kpG\?(deleted)
如何避免這種情況
不要直接刪除該文件,而是通過將文件 truncate 的方式,釋放磁盤空間。
一種方式是:
cat?/dev/null?>?${filename}
或者(新get!)
:?>?${filename}
如此,可以快速釋放空間。
參考文檔
Find and remove large files that are open but have been deleted
本文轉(zhuǎn)載自:「Zlatan Eevee」,原文:https://tinyurl.com/y89mq5oq
推薦閱讀

評論
圖片
表情
