刚刚遇到一个奇怪的du
. 以一种方式提出论点给出:
$ du -s htdocs/.git/ feuerkraft/.git/ media/.git/
40564 htdocs/.git/
40740 feuerkraft/.git/
204 media/.git/
以不同的顺序放置它们会改变最后一个目录的大小:
$ du -s media/.git/ htdocs/.git/ feuerkraft/.git/
40696 media/.git/
40564 htdocs/.git/
248 feuerkraft/.git/
这些应该都是常规目录:
$ ls -l */.git -d -i
4891918 drwxrwxr-x 1 ingo ingo 138 Mar 28 08:41 feuerkraft/.git
4892896 drwxrwxr-x 1 ingo ingo 138 Mar 28 08:44 htdocs/.git
4893874 drwxrwxr-x 1 ingo ingo 138 Mar 28 08:42 media/.git
手动执行会给出:
$ for i in htdocs/.git/ feuerkraft/.git/ media/.git/; do du -s "${i}"; done
40564 htdocs/.git/
40740 feuerkraft/.git/
40696 media/.git/
当我复制目录时cp -axv
,问题仍然存在,如果我复制目录,cp -rxv
它就会消失。
深层发掘:
$ du -s feuerkraft/.git/objects/pack/pack-26b69bdec4b3fd894bf7984d23e1938b522e6d53.pack media/.git/objects/pack/pack-26b69bdec4b3fd894bf7984d23e1938b522e6d53.pack htdocs/.git/objects/pack/pack-31a80589fbb132827d19b718c07aba1aa6bb9c02.pack | wc -l
2
$ ls feuerkraft/.git/objects/pack/pack-26b69bdec4b3fd894bf7984d23e1938b522e6d53.pack media/.git/objects/pack/pack-26b69bdec4b3fd894bf7984d23e1938b522e6d53.pack htdocs/.git/objects/pack/pack-31a80589fbb132827d19b718c07aba1aa6bb9c02.pack | wc -l
3
du
如果给出三个文件,则只列出 2 个文件,ls
列出 3。
文件系统是btrfs
. 这是一个错误还是压缩/写时复制或其他什么?
这解释了它:
和文件指向同一个inode,即硬链接
feuerkraft
。media
这是git clone
联机帮助页的一项功能并记录在案:这也解释了为什么
git
将打包文件设置为只读,一直对此感到疑惑。du
还有一个选项可以将硬链接计数加倍:这给出了预期的结果: