Restic: 添加命令将所有数据复制到另一个存储库

创建于 2015-10-25  ·  22评论  ·  资料来源: restic/restic

在#320 的讨论中,我们发现该功能可能有助于将所有数据(数据 blob、树 blob、快照)从存储库复制到新的存储库,即时重新创建包文件和索引。 这允许在不同的位置创建一个新的存储库(例如从本地存储库移动到 sftp 服务器)并从现在开始使用它而不会丢失任何历史记录和旧快照。

此问题会跟踪此功能的实现,并且可以在实现时关闭。

work in progress feature suggestion

最有用的评论

我想我已经实现了... /我挠头寻找它...
... https://github.com/middelink/restic/tree/fix-323
我需要检查它是否仍然可以编译,该分支后面有 228 次提交......

所有22条评论

这是为了处理从一个存储库 (A) 到新存储库 (B) 的一次性副本吗? 或者这是否意味着通过在 (A) 和 (B) 之间执行“同步”或更新自上次同步以来更改的内容来更通用?

目前,这仅用于处理一次性副本,以便用户可以迁移到不同位置的不同存储库,或使用新的主密钥。

鉴于互联网连接速度较慢,我希望能够尽可能高效地备份到 s3 和其他位置。

@witeshadow我不确定如何有效地做到这一点,因为数据在 repo A 中使用 master A' 加密,并且需要使用不同的 masterkey B` 对 repo B 进行加密。 我们需要读入所有数据,用 A` 解密,用 B` 加密并写出。 没有办法针对慢速带宽优化这一点。 会痛的...

我能想到的唯一优化是在源存储库 A 上有一个选择标准,通过使用主机、路径和标签过滤器,这样你就不必全部复制。 但是,这取决于您的用例。

@fd0我只是想为此功能请求添加我的投票。 我能做些什么来让它发生?

你可以实现它......功能本身并不难做,配置两个后端是困难的事情。 我们不支持访问多个后端(例如,只有一个$B2_ACCOUNT_ID )...所以我认为此功能取决于适当的配置文件(参见 #16)。

假设我们有两个存储库,A 和 B,并且您希望同步 A->B,以便在该过程完成后,B 中的 Blob(和快照)集是 A 中 Blob 集的超集.

因此,您打开两个存储库并为每个存储库加载索引文件。 然后迭代 A 的索引,为每个 blob 检查 blob 是否也包含在 B 中。如果这是真的,则继续下一个。 如果是假的,下载,解密,加密,上传到B。

最后是复制快照文件。 对于 A 中的每个快照文件,解密该文件,为 B 再次加密,将其存储在那里并完成。

正如我所说,技术实现相当简单:)

伟大的! 谢谢你的提示。 我有这个痒,所以我会看看我是否可以抽出时间来刮擦它——但在短期内,我将不得不放弃这个restic merge功能。 如果有人在我之前得到它,那很好——或者我最终会回到这个问题!

我想我已经实现了... /我挠头寻找它...
... https://github.com/middelink/restic/tree/fix-323
我需要检查它是否仍然可以编译,该分支后面有 228 次提交......

不仅允许完整副本而且允许快照子集可能很有​​用。 这将支持 #1910 建议的用例(经常备份到主存储库,然后从那里备份到异地/较慢/更昂贵的存储的频率较低),而且我认为,实施起来不会比完整副本难很多。 不过可能是未来的补充:-)

呃……对于没有开发技能的用户来说,有什么消息可以编译和尝试@middelink 的建议吗?

这主要是“我也是”的评论,但我希望能够仅将特定快照从一个存储库复制到另一个存储库,而不是“全部复制”或“同步”语义; 例如,每天备份到本地存储,然后每周一次只将最近的每天复制到 s3 存储桶等。

好吧,那么你很幸运,我的副本 cmd 需要一个或多个快照 ID。 事实上,copy-all 并不是它所做的。 您必须首先列出您的快照 ID,然后将它们连接到“restic copy”cmdline 上。 因为我认为这是一个退化的用例,所以我很满意。

如果不深入研究这个,也许与 ncw/rclone 的一些讨论可能有用......

我也对合并/复制功能感兴趣,我在 U 盘上有一个存储库,我想合并/复制到我的中央存储库(相同的密码)。
有这方面的消息吗?

看起来fork 分支已更新为master ,但还没有针对它的 PR。

@middelink您的代码是否已完成/可合并? 如果没有,还需要做什么? 这是我真正想要的功能:)

@theoretical2019代码本身已经完成,但每次我坐下来创建官方 PR 时,我总是在它准备好之前找到我需要做的事情。 像文档一样,像一个未发布的/变更日志......
哦,还有测试! 我有没有提到测试? 它需要测试:P

@middelink 仅供参考,我已经通过重新定位到上游 master 来测试您的分支,并且效果很好。 它创建了一个具有相同主机、标签和日期的新快照:+1:
等待公关 :tada:

现在有了这样的功能,我可以创建一个辅助存储库,只有当第一个存储库被锁定进行维护(例如修剪)时,客户端才会使用它。 修剪任务可以在完成后从辅助节点触发副本,因此不会丢失备份,因此备份服务的停机时间为零。

@middelink你愿意为你的代码创建一个 PR 吗? 这样做时,还请允许维护人员进行编辑- 这样,我们可以帮助您处理变更日志、文档等。

重要的是我们有一个基本的 PR 来处理。 我很乐意让你的伟大作品动起来,我想其他人也一样 :) 如果你在创建 PR 时需要任何帮助,请告诉我!

@rawtaz当然。 让我同步和所有的东西。 出于某种原因,我没有时间早点这样做,但现在看来我有时间了。

感谢大家为此所做的工作!

我还有一个问题没有得到文档的回答(至少对我而言):我是否需要同时修剪两者,或者在源中进行修剪并传播快照删除就足够了?

@lfrancke使用copy命令时,您会专门列出要复制的快照。 其他的,现有的、不存在的和以前存在但现在修剪和不再存在的快照都不适用。

如果您将快照从 repo A 复制到 repo B,然后在 repo A 中忘记并修剪它们,它们将不会在 repo B 中被自动忘记和修剪,您必须自己在 repo B 中执行此操作。

非常好,非常感谢@rawtaz的快速和有用的回复。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

axllent picture axllent  ·  4评论

mholt picture mholt  ·  4评论

christian-vent picture christian-vent  ·  3评论

jpic picture jpic  ·  3评论

cfbao picture cfbao  ·  3评论