我有一个备份系统,它创建以 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 标志保持相同。
硬链接是对同一文件的真实引用(由其索引节点表示)。 “原始”文件和指向它的硬链接之间没有区别。 两个文件具有相同的状态,both 是对此文件的引用。 移除其中一个可以让另一个保持完整。 只有删除最后一个硬链接才能最终删除文件并释放磁盘空间。
因此,如果您询问
du
它仅在一个目录中看到什么,它并不关心其他地方是否有指向相同内容的硬链接。 它只是计算所有文件的大小并将它们相加。 只有所考虑的目录中的硬链接不会被多次计数。 du
就是那么聪明(并非所有程序都必须如此)。所以实际上,目录 A 的 du
大小可能为 28G,目录 B 的大小可能为 29G,但它们加起来仍然只占用 30G,如果你问
du
A 和 B 的大小,你会得到那个号码。