78

我有一个备份系统,它创建以 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 标志相同。

4

2 回答 2

201

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

因此,如果您du只询问它在一个目录中看到的内容,它并不关心其他地方是否存在指向相同内容的硬链接。它只是计算所有文件的大小并将它们总结起来。只有考虑目录中的硬链接不会被多次计算。 du是不是很聪明(并非所有程序都必须如此)。

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

涉及硬链接时多个目录的磁盘使用情况。

于 2013-11-13T11:14:05.683 回答
25

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

于 2014-06-05T09:14:09.540 回答