linux☞df与du数据不一致的原因

阅读量: zyh 2015-11-15 23:14:54
Categories: > Tags:

linux ☞ df与du数据不一致的原因

df 数据比 du 数据小,而且是发生在删除文件之后。


这个问题牵扯到 linux 系统是将如何确认和回收数据的.

linux文件系统判定空间是否被占用,是查看空间的 imap 是否为1,而 imap 是否为1,则取决于占用空间的文件的 inode 节点的 Links 是否为0。而每当程序调用文件且没有关闭,那么此文件的 inode 的 Links 就会加 1。

如果 Links 不为0,则 imap 就不会是 0 ,则这份空间就无法被再次调用.
另外,每一个文件,默认 inode Links 是1

文件系统首先在父目录文件里找到所要删除的文件名,将此文件信息从父目录里清除掉,如若清除后,Links 为0 ,则删除 inode 节点,将 imap 就置为0,空间可以再次被利用。但是,如果父目录文件信息清除后,有程序在调用文件,则 Links 不为0,那么 inode 无法被删除, imap 也无法置为0,结果就是文件看着没了,但是空间还是没有释放。


df 和 du 的最大区别就是:

df 是根据 inode 的 Links 来确认空间是否被占用,并进而统计

du 是根据目录的文件信息来确认空间是否被占用,并进而统计

从上面可知,我们只需要将被删除文件的 inode Links 降成 0 即可,也就是关闭此文件的调用程序.

如何查找调用程序?

lsof -n | grep rm_file_name # 获取到程序 pid,并将其杀死即可