为什么df和du看到的数据量不一样?

     【@】最近在window客户端用多个iozone进程通过samba共享的方式访问我们集群文件系统。

    待测试完毕后,我进入集群文件系统的挂载点将生成的临时数据全部删掉。然后用du -sh命令查看挂载点显示为148k(还剩下几个脚本),但我用df -h查看挂载点的使用空间时,显示已使用395G(正是iozone生成的数据的大小),怎么会差这么大呢?是我们的集群文件系统出bug了么?

    首先怀疑是两个命令的统计方式不同,但从结果看了统计方式不同也不至于结果差别这么大吧?排除此种可能。

    然后我通过lsof grep deleted命令查看,这一看就一目了然了,把所有已经deleted的但尚有进程在open着的文件列了出来,查看持有此类文件的进程是samba进程,再看看window客户端的任务管理器的进程,果然有六七十个iozone进程,原因很明显了:虽然已经将文件删除,但尚有进程open着此文件,所有空间尚未释放,等进程close该文件后,空间才真正释放!

    unlink()  deletes  a  name from the filesystem. If that name was the last link to a file and no processes have the file open the file is deleted
and the space it was using is made available for reuse.

    If the name was the last link to a file but any processes still have the file open the file  will  remain  in  existence  until  the  last  file
descriptor referring to it is closed.

    哈哈,幸亏没追到代码中去,要是追到代码去的话估计现在也没心情写blog,也许正愁着怎么解决这个“bug”呢!

    PS:du得到的空间占用情况和df的结果差距明显的情形,还有一种原因,那就是某个原本有内容的目录被作为挂载点mount上其他分区,于是那个目录下原本的内容就看不到了,但是它们都还在那里,在占用着空间。你看不见的东西,不意味着它们就不存在。^_^

你可能感兴趣的:(du,df,空间不同,空间不一样,-h,-sh,数据量不同)