带 du 的文件夹的大小

带 du 的文件夹的大小

rsync我已经使用包括符号链接、硬链接、权限、删除目标上的文件等复制了一个文件夹。它们应该非常相似。

一个文件夹位于 USB 驱动器上,另一个位于本地磁盘上。

如果我du -bls在两个文件夹上运行:,大小会略有不同。

我的du支持--apparent-size,它是由硬链接应用的-s,并且-l应该计算硬链接的内容。

如何解释这种差异以及如何获得实际总数?

两种文件系统都是 ext4,唯一的区别是 USB 驱动器是加密的。

编辑:

我深入挖掘找到了实际上不同的文件夹,我找到了一个,内容并不特殊(没有块设备,没有管道,没有硬链接或符号链接,没有零字节文件),其特殊之处可能是其中有几个小文件。差异在于该特定文件夹的 872830 与 881022。

我也在du -blsc两个文件夹中运行,在这种情况下结果是相同的。

有关我使用的命令的一些额外详细信息:

$ du -Pbsl $LOCALDIR $USBDIR | cut -f1
872830
881022

$ du -Pbslc $LOCALDIR/*
[...]
868734  total

$ du -Pbslc $USBDIR/*
[...]
868734  total

$ ls -la $USBDIR | wc
    158    1415    9123
$ ls -la $LOCALDIR | wc
    158    1415    9123

$ diff -sqr --no-dereference $LOCALDIR $USBDIR | grep -v identical
[No output and all identical if I remove the grep]

答案1

由于您已使用 复制了文件rsync,然后使用 比较了两组文件diff,并且由于diff报告没有差异,因此两组文件是相同的。

大小差异可能可以通过两个目录结构中实际目录节点的大小来解释。在某些文件系统上,如果删除文件或子目录,目录不会被截断,从而留下比实际需要稍大的目录节点。

如果您在某个时候保留了许多后来被删除的文件,则可能会留下较大的目录节点。

例子:

$ mkdir dir
$ ls -ld dir
drwxr-xr-x  2 kk  wheel  512 May 11 17:09 dir
$ touch dir/file-{1..1000}
$ ls -ld dir
drwxr-xr-x  2 kk  wheel  20480 May 11 17:09 dir
$ rm dir/*
$ ls -ld dir
drwxr-xr-x  2 kk  wheel  20480 May 11 17:09 dir
$ du -h .
20.0K   ./dir
42.0K   .
$ ls -R
dir

./dir:

请注意,即使我删除了创建的 1000 个文件,该dir目录仍然使用 20 KB。

答案2

您检查过文件系统块大小吗?即使两个设备使用相同的文件系统,块大小也可能不同,这可以解释“略有不同”的大小。

例如,当在文件系统设置为使用 8KiB 块大小的设备中存储一堆 1KiB 文件时,每个已用块将浪费 7KiB。在这种情况下,文件从磁盘获取的实际大小是已使用块的大小,而不是文件本身的大小(除非有某种工具可以在每个块存储多个文件)。尝试使用以下命令检查不同设备的块大小。

# blockdev --getbsz <DEVICE>

相关内容