zoukankan      html  css  js  c++  java
  • du查看的目录大小与df查看的大小不同的时候用lsof查找

    首先MAN一下两个命令,看一下解释的区别:

    du - estimate file space usage
    df - report file system disk space usage
    

    du估计文件空间占用情况,df报告文件系统磁盘空间使用情况。两个命令所要获取的对象时不同的。在linux下,几乎所有东西都可以称为文件,常规文件,二进制文件,socket流。所以,通常情况下,使用du得到到的根路径文件空间占用情况应当与df得到的文件系统磁盘占用的情况是一致的或者说相差无几。但是在某些情况下却会出现du得到的空间占用情况要远小于df得到的。

    后通过查询,发现问题出现在deleted文件上。

    root下 lsof | grep deleted会发现多多少少有些文件状态出于deleted状态。

    [root@eb152 ~]# lsof |grep deleted
    进程名   PID       USER    FD   文件类型        大小(字节)  索引节点  文件名  [(状态)]
    java       3311    AuSP    8w      REG              253,0         778   10879268 ***.log (deleted)
    java       3311    AuSP    9w      REG              253,0        3275   10879269 ***.log (deleted)
    java       3311    AuSP   10w      REG              253,0           0   10879815 ***.log (deleted)
    java       3311    AuSP   11w      REG              253,0           0   10879816 ***.log (deleted)
    oracle     4195  oracle    7u      REG              253,0           0   14254321 *** (deleted)
    

    状态为deleted为标记被删除,其实该文件并没有从磁盘中删除,类似windows下的回收站状态。

    据称当有其他进程打开某文件时文件被删除,就会将该文件标记为deleted,并删除其目录节点。使用du查看时,因为没有该删除状态文件的节点信息,所以就不做统计,从而导致与df的结果不一致。

    若要将deleted状态文件删除,则根据pid直接kill调相应进程即可。

    找回被删除文件;

    根据以上分析,若删除的文件仍有进程进行操作是有找回数据的可能的。

    若删除的文件为系统日志中的secure文件,则可以根据以下方法找回

    # lsof |grep /var/log/secure 
    syslogd 2574 root 2w REG 253,0 1099 525125 /var/log/secure (deleted)
    

    可以看到进程号为2574的syslogd进程仍然打开了 /var/log/secure这个文件,这个文件所显示状态是deleted,已经被删除。现在FD文件描述符是2w。它的意思是文件描述符是2,状态是w写。

    我们可以根据这个在/proc/2574/fd/2找到被删除的/var/log/secure的内容。

    当文件被误删时,切忌reboot操作。

    更新历史

    why when
    创建 2013年03月23日
    更新 2019年12月9日
  • 相关阅读:
    如何测试复杂的逻辑
    Docker 安装nginx和tomcat
    提高英语
    2020年终总结
    在互联网上班是什么感觉?
    已经过去2周了,你感觉怎么样?
    如何使用玩弄 macOS 的「聚焦搜索」
    如何使用玩弄 macOS 的「聚焦搜索」
    [sdoi2015]排序(搜索+剪枝优化)
    [sdoi 2010][bzoj 1925]地精部落(神仙dp)
  • 原文地址:https://www.cnblogs.com/zphj1987/p/13575244.html
Copyright © 2011-2022 走看看