我想知道为什么当我使用 rsnapshot 将 /usr/lib/locate 从一台机器同步到另一台机器时,“du”给出的输出不同?机器是相同的,两者的操作系统都是 CentOS 5.3。
这是源机器上的输出:
# du -csh /usr/lib/locale
129M /usr/lib/locale
129M total
和目标机器(它已被 rsync 到的地方):
# du -csh usr/lib/locale/
319M usr/lib/locale/
319M total
机器上的分区甚至相同,/var 和大小都相同,大约 409 gig。
可能的一件事是 rsnapshot 正在将源目录中的符号链接解析为目标机器上的真实链接。例如,在源机器上,寻找没有硬链接到任何东西的文件:
# find /usr/lib/locale -links 1 | wc -l
1733
然后在目标机器上:
# find usr/lib/locale/ -links 1 | wc -l
4597
当你 rsync 时,你使用
--delete
标志吗?如果没有,那么当您进行同步时,您将不会删除已从远程计算机中删除的文件,您只会同步确实存在的文件。
另外,请确保您以相同的方式终止路径,例如...
……不一样……
...在添加 之前
--delete
,请确保执行 a--dry-run
,以便查看会发生什么。另外,请记住使用 -S(--sparse) 标志,以便 rsync 可以有效地处理小文件。否则,rsync 的目标最终会更大。
阅读 rsync 手册页。在那里,您将找到一个检测和同步硬链接的选项。与 -a 一起使用。如果该目录中的某些文件是硬链接的,您会注意到空间显着减少。
尝试使用 rsnapshot du。
目录的大小通常不会缩小(取决于文件系统),因此一个目录过去在一个系统上包含大量文件,但现在不包含,将比它过去不包含很多文件时更大。
应该有一个选项 du 或忽略目录大小的东西。
(注意:我指的是目录本身,而不是文件)