博客 2015-04-28

直接来方法,如图


du-sh.PNG


解释:


1.du 与 df  大小不一致


2.lsof 查找 有delete 标记的文件,并按大小排序


3.找到大文件的 PID fd  


4.清空大文件 




大家都知道正常清日志是用 >,而不是直接rm 


原因很简单,就是因为系统在使用,即便你删除文件,fd 依旧指向同一个inode, 只是你删除了目录索引结点。为了让应用能正常运行,系统就不会释放那个用于写入的文件,依然存在磁盘之上。


原理是什么? 


很简单,用exec 就可以实现。


Exec 可以指定一个用于写的文件,可以指定一个用于读的文件,可以跟踪文件位置(就是这个)


现在立即写一个(用于写):


[public@CNSZ040588 ~]$ exec 100>/tmp/ForWrite.txt
[public@CNSZ040588 ~]$ ls -l /proc/$$/fd
total 0
lrwx------ 1 public usr01 64 Apr 20 22:14 0 -> /dev/pts/11
lrwx------ 1 public usr01 64 Apr 20 22:14 1 -> /dev/pts/11
l-wx------ 1 public usr01 64 Apr 20 22:35 100 -> /tmp/ForWrite.txt
lrwx------ 1 public usr01 64 Apr 20 22:13 2 -> /dev/pts/11
lrwx------ 1 public usr01 64 Apr 20 22:14 255 -> /dev/pts/11
[public@CNSZ040588 ~]$ ls /tmp/ForWrite.txt 
/tmp/ForWrite.txt
[public@CNSZ040588 ~]$  echo "Good" >&100
[public@CNSZ040588 ~]$ cat /tmp/ForWrite.txt 
Good
[public@CNSZ040588 ~]$ exec 100<&-
[public@CNSZ040588 ~]$ ls /tmp/ForWrite.txt 
/tmp/ForWrite.txt
[public@CNSZ040588 ~]$ ls /proc/$$/fd
0  1  2  255


Add-------------------------

如果是Nas ,du与df不一致,可能是一个卷被多个主机挂载,一台上面删除后,而另外一台还在使用,没有释放。

处理方法:

找到对应的Nas 机头上,把影像删除即可,为点开头的文件