如何在 Linux 下快速找到被刪除的文件?
點(diǎn)擊上方“程序員大白”,選擇“星標(biāo)”公眾號(hào)
重磅干貨,第一時(shí)間送達(dá)
載自:「Zlatan Eevee」
原文:https://tinyurl.com/y89mq5oq
日常運(yùn)維過(guò)程中,我們經(jīng)常需要處理磁盤(pán)空間問(wèn)題,當(dāng)接到告警后,第一時(shí)間會(huì)去找那些大文件,一般比如 Centos,可能大文件就是 /var/log/messages。
但有的時(shí)候,會(huì)出現(xiàn)怎么也查不到大文件的情況,通過(guò) du 查找的時(shí)候,統(tǒng)計(jì)出來(lái)的大小,跟 df 顯示的占用空間對(duì)應(yīng)不上。
如果通過(guò) df -i 查看inode沒(méi)有滿的話,那么極有可能,是有大文件被直接rm了,但是仍然有進(jìn)程打開(kāi)了這個(gè)文件。
這種情況,由于進(jìn)程沒(méi)有退出,因此文件占用的空間并不會(huì)釋放;直到進(jìn)程退出,磁盤(pán)空間才會(huì)真正釋放。
如何找到是哪個(gè)進(jìn)程打開(kāi)了該文件
Linux上,由于進(jìn)程仍然存活,因此可以通過(guò)查看所有進(jìn)程打開(kāi)的 fd,如果該文件已經(jīng)被刪除,則查看時(shí),會(huì)顯示(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)
如何避免這種情況
不要直接刪除該文件,而是通過(guò)將文件 truncate 的方式,釋放磁盤(pán)空間。
一種方式是:
cat /dev/null > ${filename}
或者(新get!)
: > ${filename}
如此,可以快速釋放空間。
參考文檔
Find and remove large files that are open but have been deleted
推薦閱讀
國(guó)產(chǎn)小眾瀏覽器因屏蔽視頻廣告,被索賠100萬(wàn)(后續(xù))
年輕人“不講武德”:因看黃片上癮,把網(wǎng)站和786名女主播起訴了
關(guān)于程序員大白
程序員大白是一群哈工大,東北大學(xué),西湖大學(xué)和上海交通大學(xué)的碩士博士運(yùn)營(yíng)維護(hù)的號(hào),大家樂(lè)于分享高質(zhì)量文章,喜歡總結(jié)知識(shí),歡迎關(guān)注[程序員大白],大家一起學(xué)習(xí)進(jìn)步!


