2012-05-21 79 views
9

我想將rsnapshot使用的備份目錄鏡像到第二個位置以獲得更高的安全性。理想的解決方案是使用rsync和ssh。我需要爲rsync提供哪些參數來保留硬鏈接(由rsnapshot創建)和符號鏈接,刪除文件,遞歸複製,刪除目標中的文件等?這些文件都在ext3文件系統上。此外,我可以做些什麼來避免這樣的可能性,即如果源已損壞,那麼這些缺陷會反射到鏡像上?鏡像rsnapshot備份目錄

+0

我發現有一個腳本調用rsnapshot拷貝,其旨在用於初始同步:[rsnapshot拷貝](http://cpansearch.perl.org/src/DCANTRELL/App-Rsnapshot-1.999_00002/utils的/ rsnapshot拷貝)。在這個文件的頭文件中,它指出:'rsnapshot-copy當前不適用於增量鏡像快照 root(儘管未來可能會增加增量模式)。「任何想法如何支持? – highsciguy

+0

另一個想法是使用rsnapshot日誌文件(可能首先相應地修改內部日誌記錄例程)來創建一個shell腳本,該腳本執行完全相同的mv和rsync操作,rsync在主備份上也對備份的鏡像副本執行了操作。 – highsciguy

+0

澄清一點,我看到一個正常的rsync問題(見下面的答案)。如果rsnapshot路徑中的文件被破壞(例如由於磁盤故障),由於使用硬鏈接,它將在所有較新的快照中被破壞,除非在稍後改變。這意味着文件丟失了。如果我對備份的鏡像副本執行常規自動rsync,那麼最終我會用其損壞的版本覆蓋文件而不會注意到。問題是如果有解決方案可以避免這種情況。 – highsciguy

回答

6

我認爲在rsync手冊頁中大部分記錄了要做什麼的選項。特別是,-H選項(--hard-links)啓用了硬鏈接檢測,而--delete將導致rsync刪除目標上源上不存在的內容。因此,也許是這樣的:

rsync -aH --delete /path/to/src/ /path/to/destination 

而且我能做些什麼,以避免如果源已損壞的缺陷rsynced鏡子的可能性?

好吧,那很棘手。你如何發現腐敗?我認爲唯一真正的解決方案是錯開備份的備份(即,將您實際備份到主要目標,然後在您的下一次備份運行之前立即將其rsync同步到次要目標)。這樣,如果您檢測到有問題,直到下一次備份運行才能恢復。

一個不同的解決方案是將rsnapshot備份到多個目標,以便實際上從原始來源生成備份到兩個不同的位置。這樣,如果一個人受到損害,第二個人應該不受影響。

+0

確定所有選項都在手冊頁中。我只是想確保我不會忘記任何事情。但-a選項似乎非常緊湊。由於兩個目的地不會同時可用,因此兩個位置的rsnapshot將不可行。難道只有更新的快照才能與鏡像同步嗎?以這種方式,即使這些位置中的較舊快照在主位置中損壞,它們也會被保留。當然,我需要重複由它添加快照時由rsnapshot執行的重命名... – highsciguy

1

爲防止損壞數據的複製,您可以保留每週備份,並希望在丟失所有備份之前,您會注意到源處的損壞。最好的方法是使用-c,然後它會比較源和目標的校驗和以確定是否複製文件。唯一的缺點是它必須讀取整個文件,使備份過程更慢。

#!/bin/sh 
# Create a Backup of Today 
# Definitions 
sevendaysago=$(date --date='6 days ago' +%Y-%m-%d-%A) 
# Delete backups from 7 days ago 
rm -rf /storage/backups/$sevendaysago 
mkdir -p /storage/backups/`date +\%Y-\%m-\%d`-`date +\%A`/$host/$username 

rsync -aHvz /storage/`date --date=yesterday +\%Y-\%m-\%d`-`date --date=yesterday +\%A`/$host/$user/ /storage/`date +\%Y-\%m-\%d`-`date +\%A`/$host/$user/ 

rsync -acHvz -e ssh --delete --exclude='logs' [email protected]:/home/tim/ /storage/`date +\%Y-\%m-\%d`-`date +\%A`/$host/$user/