完整或增量备份大量文件

我有大量的数量和总文件大小的文件。 (我们正在谈论几TB)。 我想将这些文件/文件夹同步一次到外部备份系统,然后运行每日任务,根据每日更改重新同步备份。 改变不是那么频繁,但有些日子我们可能会有大约300GB的差异(大约1.5K文件)。

我一直在考虑rsync或rdiff-backup或rsnapshot作为一些工具,但我想先用rsynch运行一些testing。 我有一个与rsync的主要问题,那就是:

检查现有文件是否需要太长时间。 我们正在讲话超过20小时,这使得日常备份毫无意义。 这是使用rsync -rvhzP或-rvhP。 它似乎只是简单地扫描所有的文件,即使没有文件被添加/更改/删除,花费数小时。

难道我做错了什么? 我提到的其他系统(rdiff-backup或rsnapshot)会有更好的performance吗? 我正在假设他们是基于rsync反正。

提前致谢。

更新额外的信息:我们有大约2600个目录和10万个文件总计大约3.5TB,使用rsync version 3.0.9 protocol version 30运行testing。 就日常变化而言,每天通常有10个文件的变化,但是在1.5K文件变化/添加/删除的时候可以达到峰值,而在300Gb的文件体积中可以达到峰值(尽pipe这些峰值并不常见,并且一般都会传播)

假设源文件上的修改时间戳是合法的(并且在文件被修改时正在更新),我认为添加-t参数来同步时间是有意义的。 Quoth rsync手册页 :

-t ,– times
这告诉rsync传输修改时间以及文件并在远程系统上更新它们。 请注意,如果不使用此选项,排除未被修改的文件的优化将无法生效; 换句话说,缺less-t或-a会导致下一次传输的行为就像使用-I一样,导致所有文件都被更新(尽pipersync的delta传输algorithm会使更新效率更高,如果文件没有实际上改变了,你使用-t)更好。

基本上,你失去了优化,从而使rsync可以使用文件的修改时间戳作为标记来指示文件已被修改。 如果修改时间戳在发送者和接收者之间不一致,则使用增量复制algorithm并且扫描文件内容。 就像你所说的那样,一个语料库就像你所看到的,这将是一个漫长的扫描过程。

如果你的文件的修改时间戳没有被更新,当文件被改变(出于一些奇怪的原因),那么这将不会有效,你将不得不做全文件扫描。 如果您需要远程文件的修改时间戳来反映它们何时被同步,而不是源文件的修改时间戳,那么这也不是一个可行的解决scheme。

不过,我怀疑这个选项会大大提高你的同步速度。

您可能想使用lvm快照和lvmsync去一层。

在这个解决scheme中,快照将知道已经改变了什么,不需要扫描。 缺点是这个解决scheme不理解文件,它只会传输块。

另一种解决scheme是使用inotify的守护进程,并存储哪些文件已被更改的信息。 那么你可能只是rsync列表上的文件。 Lsyncd看起来像一个你正在寻找的软件。