我运行了 rsync 来备份我们的一台生产服务器。我将生产服务器置于只读模式,这样就无法添加或修改其他数据。然后,我使用存档 (-a) 执行了递归 rsync,将生产服务器数据目录备份到远程备份,该备份的配置与生产服务器相同。
几天后,我发现备份(目标)服务器最终多了约 100MB 的数据。这怎么可能——这是正常的吗?知道如何追踪吗?现在,我正在对生产和备份服务器上的文件执行 ls -laR。然后,我将尝试比较文件以查看是否存在差异。还有其他提示吗?
答案1
我不会太担心。毕竟,可能会有稀疏分配的文件。当通过 rsync 使用的逻辑文件访问复制这些文件时,未分配的空间将扩展为零填充区域,因此您将获得更多空间。源和目标上的文件大小仍然相同。
顺便说一句,我可能会通过 md5sum 或 sha1sum 来比较文件校验和,而不是使用 diff。
答案2
副本占用的空间与原始文件占用的空间不同,可能由以下几种原因造成:
- 稀疏文件。如果复制时没有利用稀疏文件,则副本可能比原始文件占用更多空间。如果复制时利用稀疏文件,则副本可能比原始文件占用更少空间。如果有
rsync
两个可能的选项(由选项控制--sparse
),则目标文件要么是稀疏的,要么不是。普通cp
命令有三个选项:使所有副本稀疏、使所有副本都不稀疏、如果源是稀疏的,则使副本稀疏。 - 文件系统松弛。如果源和目标位于不同的文件系统上(即使它们使用相同的驱动程序但块大小不同),则存储要求可能会有所不同。
- 元数据。随着时间的推移,开发人员想出了越来越多可以与文件一起存储的元数据。并非所有复制工具都能跟上新元数据的引入,并且不复制所有元数据会导致副本占用更少的空间。
- 目录开销。目录的大小可能取决于添加和删除文件的顺序。例如,ext2、3、4 文件系统在删除文件时不会释放目录空间。这可能导致副本占用的空间小于原始副本。
答案3
另一种可能性是,一些文件已从生产服务器中删除,并且尚未告知 rsync 从备份中删除这些文件(--delete
-option)。
答案4
如果您在备份/目标机器上使用不同的操作系统,那么可能会有差异。由于行尾的原因,同一个文件在 Linux 上比在 Windows 上大,如果您有大量文本文件,那么这很有意义。
另一种情况可能是,某些操作系统在列出文件大小时可能使用 10 的幂而不是 2 的幂,例如 2^10=1024,这绝对不是 10^3=1000
这个可能性较小,但还是要说一下...如果您有不同的操作系统,请确保您没有查看磁盘大小,例如 FAT、NTFS、exFAT 使用簇作为块单元,这与 ext(2,3,4) 完全不同