我们用于备份的专有软件(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
以外的问题?
答案 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)
我们最终采用的解决方案是编写一个可以解决移动本身的脚本。