du 将硬链接计算为文件大小?

问题描述 投票:0回答:2

我有一个备份系统,它创建以 Unix 时间戳命名的目录,然后使用硬链接系统(rsync 中的 --link-dest)创建增量备份,因此通常第一个备份非常大,然后后面的备份也一样大.

这是我当前备份的输出:

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 标志保持相同。

linux diskspace du
2个回答
224
投票

硬链接是对同一文件的真实引用(由其索引节点表示)。 “原始”文件和指向它的硬链接之间没有区别。 两个文件具有相同的状态,both 是对此文件的引用。 移除其中一个可以让另一个保持完整。 只有删除最后一个硬链接才能最终删除文件并释放磁盘空间。

因此,如果您询问

du
它仅在一个目录中看到什么,它并不关心其他地方是否有指向相同内容的硬链接。 它只是计算所有文件的大小并将它们相加。 只有所考虑的目录中的硬链接不会被多次计数。 du 就是那么聪明(并非所有程序都必须如此)。
所以实际上,目录 A 的 

du

大小可能为 28G,目录 B 的大小可能为 29G,但它们加起来仍然只占用 30G,如果你问

du
A 和 B 的大小,你会得到那个号码。

Disc usage by several directories when hardlinks are involved.


31
投票

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.