还在计算指向文件大小的硬链接?


69

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

Answers:


185

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

因此,如果您仅询问du在一个目录中看到的内容,则无需担心其他地方有指向相同内容的硬链接。它仅计算所有文件的大小并进行汇总。仅所考虑的目录的硬链接不会被计数一次以上。 du这么聪明(不一定需要所有程序)。

因此,实际上,目录A的du大小可能为28G,目录B的大小可能为29G,但是它们加在一起仍然仍然只占30G,如果您询问duA和B的大小,您将获得该数字。

涉及硬链接时,多个目录使用光盘。


6
我想我没有给予足够的荣誉,我不会想到的。谢谢!
Dan LaManna

10
并且由于du仅计算与遇到的相同索引节点的第一个硬链接,因此我希望连续为其提供目录:$ du -hc --max-depth=0 dirA dirB 29G /dirA 1G /dirB 30G total
tuk0z

21

并通过开关“ -l” du也在每个子目录中计算硬链接,因此我可以看到整个备份有多大,而不仅仅是增量增量。


9
稍作解释可能会帮助其他程序员理解其工作原理。
NJInamdar 2014年

2
这是真正的答案
Max Cuttins
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.