为什么同步的两个目录层次结构具有不同的大小?

boa*_*der 7 linux rsync filesystems

我正在使用 rsync 同步两个文件夹

rsync -arzv --times --delete-after --relative -e ssh user@host:path/./media/ ~/path/
Run Code Online (Sandbox Code Playgroud)

它说一切都很好,但目的地报告:

$ du -s path/media/
18335196    site_media/media/
Run Code Online (Sandbox Code Playgroud)

和消息来源报告:

$ du -s path/media/
18473500        site_media/media/
Run Code Online (Sandbox Code Playgroud)

当我深入研究问题时,所有文件的大小都相同,但目录的大小不同。为什么?两者都是运行 ubuntu 的虚拟机,源在 11.04 上,目标在 12.04 LTS 上

我明白为什么它们加起来不相同,我想明白的是为什么文件夹报告不同的大小。

sar*_*old 0

您很可能长期以来一直在目录中添加和删除文件。目录中未链接文件的空间被回收,但将来的添加可能无法直接使用该可用空间。

我认为您还没有镜像曾经发生过的每个文件链接和取消链接 - 源链接和取消链接的文件很容易比目标多十到二十倍 - 因此目标并不像支离破碎。

如果您执行一些超级复杂的目录练习,您也许能够减少源上目录的大小;它看起来像这样:

mkdir foo
mv media/* foo
rmdir media
mv foo media
Run Code Online (Sandbox Code Playgroud)

请注意,这不会节省足够的驱动器空间,因此值得这样做。这只是一个有趣的玩具,如果...