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

Dan*_*nna 57 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
Run Code Online (Sandbox Code Playgroud)

一切似乎都是正确的,但是,例如最后一个目录,lantea_home/1384318801:

root@athos:/media/awesomeness_drive# du -sh lantea_home/1384318801/
28G lantea_home/1384318801/
Run Code Online (Sandbox Code Playgroud)

我一直都是这种行为,为什么第二个du命令会将目录视为28G?

注 - 输出与-P和-L标志保持一致.

Alf*_*lfe 165

硬链接是对同一文件的真实引用(由其inode表示)."原始"文件与指向它的硬链接之间没有区别.这两个文件具有相同的地位,双方都那么这个文件的引用.删除其中一个让另一个保持不变.只删除最后一个硬链接将最后删除该文件并释放磁盘空间.

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

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

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

  • 惊人的清晰图像,价值千言万语. (20认同)
  • 由于`du`只计算它遇到的同一个inode的第一个硬链接,我喜欢连续给它目录:`$ du -hc --max-depth = 0 dirA dirB 29G/dirA 1G/dirB 30G total` (8认同)
  • 我想我没有给予足够的信誉,我不会想到这一点.谢谢! (4认同)

小智 13

并且通过开关"-l"du计算每个子目录中的硬链接,所以我可以看到,整个备份有多大,而不仅仅是增量增量.

  • 多一点解释可能有助于其他程序员理解它是如何工作的. (8认同)
  • 这才是真正的答案 (2认同)