du查看的目录大小与df查看的大小不一样的时候用lsof查找

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

du - estimate file space usagelinux

df - report file system disk space usagewindows

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

后经过查询,发现问题出如今deleted文件上。socket

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

[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调相应进程便可。

找回被删除文件:

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

quote:

若删除的文件为系统日志中的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操做。

相关文章
相关标签/搜索