du
当我在某些文件夹上使用时,我看到了一些非常奇怪的结果。
例如:
#cd /storage/main_folder
#du -h --max-depth=2 subfolder1 | grep subfolder2
1.8G subfolder1/subfolder2/subfolder31
5.3G subfolder1/subfolder2/subfolder32
352M subfolder1/subfolder2/subfolder33
76K subfolder1/subfolder2/subfolder34
1.8G subfolder1/subfolder2/subfolder35
4.0M subfolder1/subfolder2/subfolder36
301M subfolder1/subfolder2/subfolder37
9.4G subfolder1/subfolder2
# du -h --max-depth=1 subfolder1/subfolder2
1.8G subfolder1/subfolder2/subfolder31
5.3G subfolder1/subfolder2/subfolder32
352M subfolder1/subfolder2/subfolder33
96G subfolder1/subfolder2/subfolder34
1.8G subfolder1/subfolder2/subfolder35
4.0M subfolder1/subfolder2/subfolder36
301M subfolder1/subfolder2/subfolder37
106G subfolder1/subfolder2
据我所知,中没有链接或特殊文件subfolder2
。该磁盘是本地 RAID 卷,ext4,使用挂载rw,noatime,nodiratime,stripe=64
。
这可能是什么原因造成的?我该怎么做才能解决这个问题并获得正确的结果?
谢谢你!
[ 编辑,因为我收到了一个链接这个问题:我知道表观大小与块大小。但在这种情况下,请注意:
subfolder34
在一个输出中显示为 76K,在另一个输出中显示为 96G。差异太大,无法用表观大小来解释……- 我使用完全相同的
du
命令,唯一的区别是运行命令时的工作目录。因此,我们可以排除由于不同实用程序计算大小的方式而导致的差异]
答案1
看起来@muru 从他的第一个评论就一针见血——只是我很难理解这是怎么回事,因为硬链接。
du
足够智能,只计算一次硬链接文件 - 所以在我的第一个例子中,如果它在subfolder34
其他任何地方找到文件,它就不会再次将它们计入文件夹大小。
在第二个命令中,由于我只查看subfolder2
,它看不到其他硬链接 - 因此它计算文件的大小。
如果我运行du
(-l
明确告诉它多次计算硬链接),我会得到预期的结果:
#cd /storage/main_folder
#du -h --max-depth=2 subfolder1 | grep subfolder2
1.8G subfolder1/subfolder2/subfolder31
5.3G subfolder1/subfolder2/subfolder32
352M subfolder1/subfolder2/subfolder33
76K subfolder1/subfolder2/subfolder34
1.8G subfolder1/subfolder2/subfolder35
4.0M subfolder1/subfolder2/subfolder36
301M subfolder1/subfolder2/subfolder37
9.4G subfolder1/subfolder2
#du -h --max-depth=2 -l subfolder1 | grep subfolder2
1.8G subfolder1/subfolder2/subfolder31
5.3G subfolder1/subfolder2/subfolder32
352M subfolder1/subfolder2/subfolder33
96G subfolder1/subfolder2/subfolder34
1.8G subfolder1/subfolder2/subfolder35
4.0M subfolder1/subfolder2/subfolder36
301M subfolder1/subfolder2/subfolder37
106G subfolder1/subfolder2
谢谢@muru的评论,以及对我的许多问题的耐心!:)如果您将评论作为答案发布,我会很高兴接受。