杜计数硬链接文件大小?
我有一个备份系统,它创build以Unix Timestamps命名的目录,然后使用硬链接系统(rsync中的–link-dest)创build增量备份,所以通常第一次备份非常大,然后以后备份的分数会很大。
这是我当前备份的输出:
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标志保持一致。
硬链接是对同一个文件的实际引用(由inode表示)。 “原始”文件和指向它的硬链接之间没有区别。 两个文件都具有相同的状态, 都是对该文件的引用。 删除其中一个让其他人保持完好。 只有删除最后一个硬链接才能最终删除文件并释放磁盘空间。
所以如果你问du
只在一个目录中看到什么,它并不在乎别的硬链接指向相同的内容。 它只是计算所有文件的大小,并总结它们。 所考虑的目录中只有硬连接不会被计入多次。 du
是聪明的(并不是所有的程序都是必须的)。
所以实际上,目录A可能具有28G的大小,目录B可能具有29G的大小,但是它们一起仍然只占用30G,并且如果你问du
和A和B的大小,你将得到那个数字。
并且用开关“-l”计算每个子目录中的硬连接,所以我可以看到,整个备份有多大,不仅是增量增量。