![使用 RSYNC 时能保证服务器上的数据冗余吗?](https://linux22.com/image/1318145/%E4%BD%BF%E7%94%A8%20RSYNC%20%E6%97%B6%E8%83%BD%E4%BF%9D%E8%AF%81%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E7%9A%84%E6%95%B0%E6%8D%AE%E5%86%97%E4%BD%99%E5%90%97%EF%BC%9F.png)
假设我有一台服务器,它提供关键任务服务,这些服务依赖于从另一台服务器同步的数据。问题是,如果我使用 RSYNC 进行数据同步,我是否可以确保服务器上的数据冗余?
RSYNC 是否提供了检查同步是否完成且不存在任何类型的数据损坏(无论出于何种原因)的方法?
如果出现断线或类似情况,是否有可靠的方法可以恢复文件同步(从中断点开始)?是否有比 RSYNC 更好的替代方案,应该在数据冗余至关重要的场景中使用?
答案1
您的问题让我有些困惑。如果你说的“冗余”指的是“完整性”--即“如果我将某些内容 Rsync 到我的服务器,是否可以保证它与源材料逐位相同?”答案是:可能,但完整性检查仅与 Rsync 使用的校验和/比较方法一样好。有关这些的更多信息,我建议您参阅Rsync 的手册页(检查-c
和-B
选项)和Rsync 的 wiki 页面,讨论了 Rsync 使用的比较算法。
关于中断的 Rsyncs: 此外检查返回代码以确定 Rsync 是否正确完成(可以找到 Rsync 退出代码列表这里)再次运行 Rsync是验证第一次是否无损坏或中断完成的最佳方法。 Rsync 将比较并跳过已成功复制的任何文件,并将复制任何新的或不同于源的文件(这与“恢复”中断的传输相同)。 如果源材料变化太快,以至于无法保证两次运行之间的一致性,则 Rsync 可能不是确保同步的最佳工具。
如果你说的“冗余”确实是指“冗余”:例如“我只想在目标服务器上覆盖当然我有完整的数据副本可以使用,即使我的传输中断”,那么解决方案就是执行多次 Rsync,如下所示:
- 将数据的旧副本从本地位置 1 同步到本地位置 2——两者都位于同一台服务器上,或位于连接失败风险较低的内部网络位置。
- 再次运行步骤 1 并检查错误。这可验证您拥有现有数据集的两个相同副本。
- 将数据的远程(新)副本 Rsync 至位置 1。
- 再次运行步骤 3,以确保位置 1 包含新数据的完整副本。
如果步骤 4 或 5 中断,您可以 a) 尝试再次从远程源进行 Rsync,或者 b) 只需反转步骤 1 中的 Rsync 方向并再次运行它,用本地机器上备份位置的最新“已知良好”副本替换远程数据的(可能已损坏的)副本。这将保证您拥有“冗余”,因为您永远不会面临只有损坏的数据副本而无法恢复完整数据集的风险。