为什么两个 CentOS 机器上的同一目录使用的磁盘空间不同?

为什么两个 CentOS 机器上的同一目录使用的磁盘空间不同?

我想知道为什么当我使用 rsnapshot 将 /usr/lib/locate 从一台机器 rsync 到另一台机器时,'du' 给出的输出不同?这些机器是相同的,两台机器上的操作系统都是 CentOS 5.3。

以下是源机器上的输出:

# du -csh /usr/lib/locale
129M    /usr/lib/locale
129M    total

以及目标机器(已经同步到该机器):

# du -csh usr/lib/locale/
319M    usr/lib/locale/
319M    total

机器上的分区都是相同的,都是 /var,大小也相同,约为 409GB。

有可能的是,rsnapshot 正在将源目录中的符号链接解析为目标计算机上的真实链接。例如,在源计算机上,查找未硬链接到任何内容的文件:

# find /usr/lib/locale -links 1  | wc -l
1733

然后在目标机器上:

# find usr/lib/locale/ -links 1 | wc -l
4597

答案1

当你 rsync 时,你使用该--delete标志吗?

如果不是,那么在执行同步时,您将不会删除已从远程计算机中删除的文件,而只会同步存在。

另外,确保您以相同的方式终止路径,例如......

rsync -a remote:/tmp/X ./tmp/X/

...与...不一样

rsync -a remote:/tmp/X/ ./tmp/X/

...在添加之前--delete,请确保你做了,--dry-run这样你就能看到什么发生。

答案2

另外,记得使用 -S(--sparse) 标志,这样 rsync 才能有效处理小文件。否则,rsync 的目标最终会变得大得多。

答案3

阅读 rsync 手册页。在那里,您将找到一个检测和同步硬链接的选项。将其与 -a 一起使用。如果该目录中的某些文件是硬链接的,您会注意到空间会大大减少。

答案4

目录的大小通常永远不会缩小(取决于文件系统),因此,一个目录曾经在一个系统上包含大量文件,但现在却不包含,那么它的目录将比以前不包含大量文件时更大。

du 上应该有一个选项或其他东西可以忽略目录的大小。

(注意:我指的是目录本身,而不是文件)

相关内容