【@】最近在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 deletedand 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 filedescriptor referring to it is closed.
哈哈,幸亏没追到代码中去,要是追到代码去的话估计现在也没心情写blog,也许正愁着怎么解决这个“bug”呢!
PS:du得到的空间占用情况和df的结果差距明显的情形,还有一种原因,那就是某个原本有内容的目录被作为挂载点mount上其他分区,于是那个目录下原本的内容就看不到了,但是它们都还在那里,在占用着空间。你看不见的东西,不意味着它们就不存在。^_^