2010-11-23 113 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具有互操作性,它具有更多針對那些尋找整個系統定期備份的功能。