我的文件数量和总文件大小都很大。(我们说的是几 TB)。我想将这些文件/文件夹同步到外部备份系统一次,然后运行每日任务,根据每日更改重新同步备份。更改并不频繁,但有时我们可能会有大约 300GB 的差异(大约 1.5K 个文件)。
我一直在考虑使用 rsync 或 rdiff-backup 或 rsnapshot 作为工具,但我想先用 rsynch 运行一些测试。我在使用 rsync 时遇到了一个主要问题,那就是:
检查现有文件的变化花费的时间太长了。我们说的是超过 20 小时,这使得每日备份毫无意义。这是使用 rsync -rvhzP 或 -rvhP。它似乎只是扫描所有文件,即使没有添加/更改/删除任何文件,也需要几个小时。
我做错了什么吗?我提到的其他系统(rdiff-backup 或 rsnapshot)的性能会更好吗?我本来以为它们都是基于 rsync 的。
提前致谢。
更新额外信息: 我们有大约 2600 个目录和 100k 个文件,总计约 3.5TB,使用 运行测试rsync version 3.0.9 protocol version 30
。就每日更改而言,通常每天有 10 个文件更改,但峰值可达约 1.5K 个文件更改/添加/删除,容量约为 300Gb(尽管这些峰值并不频繁,而且通常分散开来)
答案1
-t
假设源文件上的修改时间戳是合法的(并且在文件被修改时被更新),我认为添加同步时间的参数是有意义的。手册rsync
页:
-t,--次
这告诉 rsync 将修改时间与文件一起传输并在远程系统上更新它们。请注意,如果不使用此选项,则排除未修改文件的优化将无法生效;换句话说,缺少 -t 或 -a 将导致下一次传输的行为就像使用了 -I 一样,导致所有文件都更新(尽管如果文件实际上没有更改,rsync 的增量传输算法将使更新相当高效,但使用 -t 会更好)。
基本上,您失去了优化,rsync
可以使用文件的修改时间戳作为标记来指示文件已被修改。如果发送方和接收方的修改时间戳不一致,则使用增量复制算法并扫描文件内容。对于像您所说的这么大的语料库,这将是一个漫长的扫描过程,正如您所看到的。
如果文件更改时(出于某些奇怪的原因)文件的修改时间戳没有更新,那么这种方法将不会有效,您必须进行完整的文件扫描。如果您需要远程文件的修改时间戳来反映它们的同步时间,而不是源文件的修改时间戳,那么这也不是一个可行的解决方案。
我怀疑这个选项根本但可以加快同步速度。