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>