你计算硬链接到文件大小?

我有一个备份系统,它创建以 Unix Timestamp 命名的目录,然后使用硬链接系统(—— link-est in rsync)创建增量备份,所以通常第一个备份非常大,然后后来的备份也是一样大。

这是我当前备份的输出:

root@athos:/media/awesomeness_drive# du -sh lantea_home/*
31G lantea_home/1384197192
17M lantea_home/1384205953
17M lantea_home/1384205979
17M lantea_home/1384206056
17M lantea_home/1384206195
17M lantea_home/1384207349
3.1G    lantea_home/1384207678
14M lantea_home/1384208111
14M lantea_home/1384208128
16M lantea_home/1384232401
15G lantea_home/1384275601
43M lantea_home/1384318801

然而,一切似乎都是正确的,以最后一个目录 lantea_home/1384318801为例:

root@athos:/media/awesomeness_drive# du -sh lantea_home/1384318801/
28G lantea_home/1384318801/

我一直得到这种行为,为什么第二个 du 命令认为目录是28G?

注意-输出与-P 和-L 标志保持不变。

33639 次浏览

硬链接是对同一文件的实际引用(由其 inode 表示)。“原始”文件和指向它的硬链接之间没有区别。两个文件具有相同的状态,然后 都有引用这个文件。移除其中一个能让另一个完好无损。只有删除最后一个硬链接才能最终删除文件并释放磁盘空间。

因此,如果您询问 du只在一个目录中看到了什么,它并不关心其他地方有指向相同内容的硬链接。它只是计算所有文件的大小并总结它们。只有硬链接 内心被考虑的目录计数不超过一次。du就是这么聪明(不是所有的程序都需要这样)。

所以实际上,目录 A 的 du大小可能是28G,目录 B 的大小可能是29G,但它们加起来仍然只占30G,如果你问 du A 和 B 的大小,你会得到那个数字。

Disc usage by several directories when hardlinks are involved.

使用开关“-l”du 计算每个 subdir 中的硬链接,所以我可以看到,整个备份有多大,不仅仅是增量 delta。