du计算文件大小的硬链接?

时间:2013-11-13 10:55:51

标签: linux diskspace du

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

2 个答案:

答案 0 :(得分:151)

硬链接是对同一文件的真实引用(由其inode表示)。 “原始”文件与指向它的硬链接之间没有区别。两个文件具有相同的状态,两个都是对此文件的引用。删除其中一个让另一个保持不变。只删除最后一个硬链接将最后删除该文件并释放磁盘空间。

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

因此,实际上,目录A的du大小可能是28G,目录B的大小可能是29G,但是它们一起只占用30G,如果你问du的大小是A和B,你会得到那个号码。

Disc usage by several directories when hardlinks are involved.

答案 1 :(得分:13)

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