不经过悉心栽培,花儿开不出鲜艳的花朵;不经过时间的历练,幼苗长不成参天大树。

llinux中df和du磁盘空间不一致的问题

linux 建伟 275℃ 0评论

最近有台服务器磁盘报警的时候,我上去看是日志满了,然后删除了日志后,神奇的事情发生了 使用df -h 发现磁盘是满的,然后使用du -h 发现并没有大文件占满,这到底是怎么回事呢?

原因:

du -h
du -sh命令通过将指定文件系统路径下所有的目录、符号链接、文件使用的块数累加起来得到总块数以及总大小。它会遍历这个目录,针对所有真实存在的文件、目录等汇总,给出最终结果

df -h
首先,获取这个文件的文件句柄,这是会判断这个文件是否存在!
然后,程序所有的写入操作仅仅使用文件句柄,而不再关注具体文件是否存在!Linux中允许对一个正在写入的文件进行删除RM或者移动MV。应用程序获取句柄,就直接指向到了磁盘位置,到了数据块的级别上进行写入了,不再检查数据块所属的文件是否存在。这时候的写入,对于其他人,由于访问的入口–文件–不存在了,所以是看不到其写入的内容的!

解决方案:

lsof -n | grep deleted

找到打开的但被删除的文件,然后找到使用这个文件的服务重新启动就可以了。这个时候再用df -h 去查看磁盘空间已经正常了。

转载请注明:Li Jianwei's Blog » llinux中df和du磁盘空间不一致的问题

喜欢 (0)or分享 (0)
web技术交流群
22765697