直接来方法,如图
解释:
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 机头上,把影像删除即可,为点开头的文件