2010-11-23 58 views
1

到现在为止,我一直在使用rsync从我的计算机备份到外部驱动器。备份数据由成千上万的小文件和数百个大文件(Maildir电子邮件和我最喜爱的系列剧集)组成。这样做的问题是,如果我的备份磁盘的单个扇区出现故障,可能是单个邮件可能已损坏,我觉得这是不可容忍的。加密安全备份

我想到了一个替代方案,其工作原理如下。有三棵树:由我希望备份的数据组成的文件树,在给定时刻备份树包含文件树的副本以及包含备份树的文件散列和元数据散列的散列树。整个散列树的散列也被保留下来。在备份之前,检查散列树的散列。这里的失败使整个备份的数据无效。检查成功后,将哈希树形状与备份树形状进行比较,并验证元数据哈希以确保备份树的元数据和形状一致。如果不是,可以列出个别肇事者。之后,执行rsync备份遍历。只要rsync更新文件,就会计算其新的散列和元数据散列并将其插入散列树中。只要rsync删除一个文件,该文件就会从散列树中删除。最后,散列树的散列被计算并存储。

这个过程非常有用,因为散列是针对正确的数据计算的,这意味着即使文件树中的文件已经插入散列树后损坏了,这种不一致也不会使备份(或将来的备份)。但是,最重要的特性是,如果攻击者损坏备份介质,但他喜欢,那么只要攻击者的攻击者破坏了散列算法,那么其中的信息就会被信任。另外,发送到备份或从其恢复的数据可以逐步验证。

我的问题是:这样的备份方案是否有合理的实现?我的搜索告诉我,唯一可用的备份方案可以进行完全备份或差异备份(例如,基于tar)或无法提供加密正确性保证(rsync)。

如果没有像这样的任何实现,也许我会写一个,但我想避免重新发明轮子。

+0

我认为这属于serverfault或可能是超级用户。 – Omnifarious 2010-11-23 03:36:44

+0

我想我听说过与这个概念类似的'merkle树'这个短语?我认为驱动器的法医分析可能涉及这样的事情。你可以使用hashdeep之类的东西来为数据添加散列。也请参阅tahoe-lafs – fuzzyTew 2016-02-10 20:18:18

回答

2

你在说什么听起来很像Git。我认为它几乎可以做你正在描述的东西。只需执行“备份”的过程为git commit。然后您可以使用git checkout恢复到以前的任何版本。

这是惊人的存储效率和非常快速传输内容,这可能会节省您的备份大量的时间。作为奖励,它是免费的,可移植的并且已经调试过!

+0

哦,是的,每个存储库都有完整的历史记录,所以您的常规机器和备份机器都具有完整的历史记录,因此一旦发生损坏时不会丢失数据。 – 2010-11-23 03:09:29

0

这听起来与Mercurial存储系统的工作方式几乎完全相同。 'rsync命令'将使用Mercurial的push来实现,这非常有效。

0

如果我不得不解决的问题,我会采取RAID阵列(以防止损坏)的驱动器,它使用内置的AES加密,然后将使用我习惯的任何备份方法。

0

Git-Annex是给出可用工具的适当解决方案。它是git的一个扩展,它允许为任意大的文件提供强大的支持,自动在数据存储之间同步,具有可选的图形用户界面,跟踪您拥有的备份数量以及准确存储哪些文件,并允许您为它应该如何管理不同的内容。您还可以自定义使用哪些加密哈希验证内容的完整性。

对于驱动器备份的需求,git-annex与bup具有互操作性,它具有更多针对那些寻找整个系统定期备份的功能。