抓了个现行:du与df显示不一致案例

出现这种问题,脑海里第一时间想到的是应用程序使用的文件句柄没有释放导致,怪就怪程序员代码写的太烂,才会平白无故增加运维的工作量。

一图胜千言,解决过程如下:

处理完问题后特意查阅了下du与df的man手册:

du: Summarize disk usage of each FILE, recursively for directories.

df: Show information about the file system on which each FILE resides, or all file systems by default.

可以看到du计算的是磁盘的使用量,而df计算的是文件系统的使用量。当碰到这种情况, du和df计算结果就不一样了,例如当一个程序在读取一个文件,另一个程序进行删除,这时这个文件从磁盘层面看来已经被删除了,因为磁盘索引i节点已经被删除了,但是在系统层面看来,他还在啊,因为还有程序在读取,文件句柄还在,就把他也计算进去了,因此就出现du和df计算的结果不一样了。同理,这种情况下数据也是可以恢复的,因为他的文件句柄还在,可以顺利的读取到文件内容。

自言自语:

最近各种忙,却不知道在忙些什么。生活一团浆糊,需要静下来慢慢捋一下,静一静,安排各项事情的进度、优先级。博客估计要长草一段时间了。

参考资料:

使用lsof处理文件恢复、句柄以及空间释放问题:http://segmentfault.com/blog/yexiaobai/1190000000461077