零镜子 發表於 2024-9-5 00:00:00

如何在 Linux 下快速找到被删除的文件

<p>
        日常运维过程中,我们经常需要处理磁盘空间问题,当接到告警后,第一时间会去找那些大文件,一般比如 Centos,可能大文件就是 /var/log/messages。</p><p><img style="max-width:100%!important;height:auto!important;" title="如何在 Linux 下快速找到被删除的文件" alt="如何在 Linux 下快速找到被删除的文件" border="0" height="auto" src="https://zhuji.jb51.net/uploads/img/202305/0b1223b8be458fceb44e588bd79042e5.jpg" width="auto"/></p><p>
        但有的时候,会出现怎么也查不到大文件的情况,通过 du 查找的时候,统计出来的大小,跟 df 显示的占用空间对应不上。</p><p>
        如果通过 df -i 查看inode没有满的话,那么极有可能,是有大文件被直接rm了,但是仍然有进程打开了这个文件。</p><p>
        这种情况,由于进程没有退出,因此文件占用的空间并不会释放;直到进程退出,磁盘空间才会真正释放。</p><p><strong>如何找到是哪个进程打开了该文件</strong></p><p>
        Linux上,由于进程仍然存活,因此可以通过查看所有进程打开的 fd,如果该文件已经被删除,则查看时,会显示(deleted)。</p><p>
        示例如下:</p><blockquote><p class="alt">$&nbsp;sudo&nbsp;find&nbsp;/proc/*/fd&nbsp;-ls&nbsp;|&nbsp;grep&nbsp;&nbsp;<span class="string">&#39;(deleted)&#39;</span>&nbsp;</p><p>&nbsp;&nbsp;&nbsp;388609&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;lrwx<span class="comment">------&nbsp;&nbsp;&nbsp;1&nbsp;zerotier-one&nbsp;zerotier-one&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;64&nbsp;Aug&nbsp;21&nbsp;00:19&nbsp;/proc/29400/fd/4&nbsp;-&gt;&nbsp;/tmp/ibpX85Vd\&nbsp;(deleted)</span>&nbsp;</p><p class="alt">&nbsp;&nbsp;&nbsp;388610&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;lrwx<span class="comment">------&nbsp;&nbsp;&nbsp;1&nbsp;zerotier-one&nbsp;zerotier-one&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;64&nbsp;Aug&nbsp;21&nbsp;00:19&nbsp;/proc/29400/fd/5&nbsp;-&gt;&nbsp;/tmp/ibCwAgAj\&nbsp;(deleted)</span>&nbsp;</p><p>&nbsp;&nbsp;&nbsp;388611&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;lrwx<span class="comment">------&nbsp;&nbsp;&nbsp;1&nbsp;zerotier-one&nbsp;zerotier-one&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;64&nbsp;Aug&nbsp;21&nbsp;00:19&nbsp;/proc/29400/fd/6&nbsp;-&gt;&nbsp;/tmp/ibRZ5rep\&nbsp;(deleted)</span>&nbsp;</p><p class="alt">&nbsp;&nbsp;&nbsp;388612&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;lrwx<span class="comment">------&nbsp;&nbsp;&nbsp;1&nbsp;zerotier-one&nbsp;zerotier-one&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;64&nbsp;Aug&nbsp;21&nbsp;00:19&nbsp;/proc/29400/fd/7&nbsp;-&gt;&nbsp;/tmp/ibBuNEzA\&nbsp;(deleted)</span>&nbsp;</p><p>&nbsp;&nbsp;&nbsp;388616&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;lrwx<span class="comment">------&nbsp;&nbsp;&nbsp;1&nbsp;zerotier-one&nbsp;zerotier-one&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;64&nbsp;Aug&nbsp;21&nbsp;00:19&nbsp;/proc/29400/fd/11&nbsp;-&gt;&nbsp;/tmp/ibG68kpG\&nbsp;(deleted)</span>&nbsp;</p></blockquote><p><strong>如何避免这种情况</strong></p><p>
        不要直接删除该文件,而是通过将文件 truncate 的方式,释放磁盘空间。</p><p>
        一种方式是:</p><blockquote><p class="alt">cat&nbsp;/dev/<span class="op">null</span>&nbsp;&gt;&nbsp;${filename}&nbsp;</p></blockquote><p>
        或者(新get!)</p><blockquote><p class="alt">:&nbsp;&gt;&nbsp;${filename}&nbsp;</p></blockquote><p>
        如此,可以快速释放空间。</p><p>
        原文地址:https://mp.weixin.qq.com/s?__biz=MzI3MTI2NzkxMA==&amp;mid=2247494283&amp;idx=1&amp;sn=fad8fdf2e65ebfe1b4a67de904f2bedc&amp;chksm=eac6cba2ddb142b44d9187acb37b10985c71862303c1082bc8e6f5df69881065b110dc978b29&amp;mpshare=1&amp;</p>
頁: [1]
查看完整版本: 如何在 Linux 下快速找到被删除的文件