我想开始定期备份我的 ubuntu 笔记本电脑(机器 X)上的主目录。假设我可以访问 2 个可以备份到的不同远程(linux)服务器,机器 A 和 B。机器 X 将作为主服务器,应该同步到 A 和 B。我可以定期从 X 运行 rsync 到 A,然后从 X 运行 rsync 到 B。这就是我所需要的。
但是我很好奇是否有一种更节省带宽、更快捷的方法来实现这一点。假设 X 将使用住宅式宽带线路,由于我不想占用过多带宽,因此我会限制 X 的传输。A 和 B 将一直处于连接状态,但 X 不会,因此我还想减少 X 的传输时间,这样可能会让 A 和 B 花费更多时间进行传输。此外,X 不会一直处于连接状态。
最好的方法是什么?从 X rsync 到 A,然后从 A 到 B?选择正确的时间可能会很麻烦。我不想保留旧文件,所以如果我要 rsync,那么--del
将使用该选项。这是否意味着某些东西可能会从 A 传输到 B,然后从 B 删除,然后再次从 A 传输到 B?这不是最理想的。
我知道有像 gluster 这样的花哨的分布式文件系统,但我认为在这种情况下这是过度的,并且可能不适合断开连接的特性。
答案1
有巧妙的方法可以做到这一点,也有简单的方法。只要有可能,我就会选择简单的方法。
您能先将 X -> A,然后再将 A -> B 吗?
还有类似方法齐奏,但这似乎只能到达一个副本,而且是双向的,这似乎对备份不太有用。但是,如果 A 和 B 都在 Unison 上运行,那么客户端 X 似乎可以备份到 A或者B,并且它会顺利地到达另一个。
答案2
您希望 X 启动与 A 的同步,然后从 X 提取数据,完成后推送到 B。A 上的脚本可以检查某个地方是否存在文件,该文件由 X 在在线并准备好同步时上传到 A。从 X 提取完成后,它应该推送到 B,完成后删除该文件。或者,您可以在 A 和 B 上使用几乎相同的脚本,但当 A 从 X 提取完成后,它会将文件放在 B 上,告诉它与 A 同步。如果您有 2 台以上的机器需要同步,那么这将是可行的方法,因为这样同步就可以在所有机器之间级联(可能采用分布式树形方式,而不是线性方式)
答案3
Dropbox 适合你吗?
答案4
我认为 Michael Graff 的解决方案是最好的主意。rsync X -> A。然后 A -> B。
如果你想要另一个可以减少计算时间的建议,你可以看看 xdelta (http://xdelta.org/)。它本质上是与多跳 rsync 相同的解决方案,其优点是可以节省您计算每跳 delta 的时间。如果涉及的文件很大,这可以节省大量时间。