編程學習網 > 服務器 > Linux > Linux 如何快速找到被刪除的文件?
2021
03-12

Linux 如何快速找到被刪除的文件?

attachments-2021-03-UuaaPalz604b0af2125a0.png


日常運維過程中,我們經常需要處理磁盤空間問題,當接到告警后,第一時間會去找那些大文件,一般比如 Centos,可能大文件就是 /var/log/messages。

但有的時候,會出現怎么也查不到大文件的情況,通過 du 查找的時候,統計出來的大小,跟 df 顯示的占用空間對應不上。

如果通過 df -i 查看inode沒有滿的話,那么極有可能,是有大文件被直接rm了,但是仍然有進程打開了這個文件。

這種情況,由于進程沒有退出,因此文件占用的空間并不會釋放;直到進程退出,磁盤空間才會真正釋放。


如何找到是哪個進程打開了該文件

Linux上,由于進程仍然存活,因此可以通過查看所有進程打開的 fd,如果該文件已經被刪除,則查看時,會顯示(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


掃碼二維碼 獲取免費視頻學習資料

Python編程學習

查 看2022高級編程視頻教程免費獲取