镜像文件随rsync移动

时间:2009-08-05 10:20:01

标签: rsync

我们用于备份的专有软件(sadface)生成一系列图像,我们使用rsync将其同步到场外位置。生成的文件类似于:

a.bak
b.bak
c.bak

因此,我们将这些结果同步并在异地计算机上获得完全相同的结构。然后备份程序再次运行,我们得到类似的东西:

archive/a.bak
archive/b.bak
c.bak
d.bak
e.bak

所以rsync作业运行,我们最终得到类似的结果:

archive/a.bak
archive/b.bak
a.bak
b.bak
c.bak
d.bak
e.bak

显然,我们希望非现场机器看起来像现场机器一样,以避免混乱并节省存储空间。有没有办法让rsync反映现场发生的动作,或者我们是否需要解决rsync以外的问题?

4 个答案:

答案 0 :(得分:3)

我不知道有任何方法让它智能地检测到文件只是“移动”了。但是,您可以使用--delete标志,以便它将从源上不再存在的目标中删除文件。缺点是你会在文件移动时重新复制文件,但至少你不会再浪费目的地上旧位置的空间。

答案 1 :(得分:2)

这个问题有一个非常聪明的解决方案。它需要额外的空间,但它可以节省您的浪费。我在https://lincolnloop.com/blog/detecting-file-moves-renames-rsync/

中找到了它

在那里查看详细信息,但基本上,您在进行任何更改之前都会创建一个硬链接备份树,然后修改原始树。当rsync'ing时,你使用额外的选项来保留硬链接,这足以让rsync检测到重复的文件并避免再次复制它们。

答案 2 :(得分:0)

如果您使用--times开关并确保两端都有时钟同步,那么您可以使用--update和--delete选项仅传输较新的文件并删除不应该存在的文件。

有关完整选项,请参阅rsync man page

答案 3 :(得分:-4)

我们最终采用的解决方案是编写一个可以解决移动本身的脚本。