我一直在使用rsync snapshot script from Mike Rubel的修改版本,並且一直在調整它以執行我想要的操作。他只需要每小時快照;我希望通過crontab每隔一小時,一天,一週和一個月提供快照。rsync每小時/每日/每週備份快照腳本的幫助
這裏是我的腳本每小時:
if [ -d $BUP/temp ] ; then
rm -rf $BUP/temp ;
fi;
rsync -avzO --delete --exclude-from=$CONFIG/rsync-excludes /home/jwhendy/ $DAT/jwhendy/ ;
rsync -avzO --delete --exclude=vault* --link-dest=../vault.hourly.0 $DAT/ $BUP/temp ;
if [ -d $BUP/vault.hourly.2 ] ; then
rm -rf $BUP/vault.hourly.2 ;
fi;
if [ -d $BUP/vault.hourly.1 ] ; then
mv $BUP/vault.hourly.1 $BUP/vault.hourly.2 ;
fi;
if [ -d $BUP/vault.hourly.0 ] ; then
mv $BUP/vault.hourly.0 $BUP/vault.hourly.1 ;
fi;
mv $BUP/temp $BUP/vault.hourly.0 ;
這裏的日常腳本(每週/每月的有幾乎相同的):
if [ -d $BUP/vault.daily.2 ] ; then
rm -rf $BUP/vault.daily.2 ;
fi;
if [ -d $BUP/vault.daily.1 ] ; then
mv $BUP/vault.daily.1 $BUP/vault.daily.2 ;
fi;
if [ -d $BUP/vault.daily.0 ] ; then
mv $BUP/vault.daily.0 $BUP/vault.daily.1 ;
fi;
if [ -d $BUP/vault.hourly.2 ] ; then
cp -al $BUP/vault.hourly.2 $BUP/vault.daily.0 ;
fi;
每小時腳本的偉大工程。我正在努力的是每小時 - >每日(和每日 - >每週等)的轉變。
目前,該腳本將起作用這樣的,比方說,如果每小時腳本運行6X在每天進行腳本將運行(「hourly.n」的簡稱後「hr.n」和「B_M」看臺對於單個快照):
| hour 1 | hour 2 | hour 3 | hour 4 | hour 5 | end of day |
|------------+------------+------------+------------+------------+---------------|
| hr.0 (b_0) | hr.0 (b_1) | hr.0 (b_2) | hr.0 (b_3) | hr.0 (b_4) | hr.0 (b_5) |
| | hr.1 (b_0) | hr.1 (b_1) | hr.1 (b_2) | hr.1 (b_3) | hr.1 (b_4) |
| | | hr.2 (b_0) | hr.2 (b_1) | hr.2 (b_2) | hr.2 (b_3) |
| | | | | | daily.0 (b_3) |
因爲如果它存在hourly.sh跳越hourly.2,我們可以看到,daily.0是首次與B_3創建,我已經失去了B_0,B_1和B_2。我寧願每小時進行一次hour.2的增量轉儲,每小時轉換爲daily.0,然後再刪除它。這樣,在任何給定的時間,我將每小時0,1和2,每日0將包含hourly.2的最新版本,然後它被刪除。
希望這是有道理的。
我試過把cp -al $BUP/hourly.2 $BUP/daily.0 ;
行放在小時腳本中。有三個問題,我已經與這個碰上:
- 似乎採取了很多比單獨rsync的腳本較長,即使它是技術上只是複製一些硬鏈接
- 因爲這些都是硬鏈接時,在我的情況下,第一次備份將是全尺寸(〜20GB);後續運行應該會生成更新文件大小的快照(它會這樣做)。我預計最大的快照會逐漸進一步回到樹中(最終在每月一次)。這
cp -al
行似乎在每天保持穩定.0它永遠不會回到daily.1等等(這可能是一個誤解如何du
工作。 - 我想不出如何不打破備份鏈,迫使一個新的快照(全部20GB)不得不被重新創建,換句話說,hourly.2每天都在不斷傾銷。但是最終
mv $BUP/daily.0 $BUP/daily.1
將使得每日不再存在0,因此,它將不得不從頭開始重新下一次hourly.sh運行。
在任何情況下,希望很顯然我想要完成的任務。我想,用於轉換每個腳本援助(每小時,每天,每週)進入下一個「桶」(每日,每週,每月),而不必花費時間啃硬鏈條。
我也不想在上表中顯示的過程中丟失重要的快照。
非常感謝您的任何建議。
對於你的第二個問題:你是什麼意思,最大的快照回退?據我所知你的第一個備份和所有以下備份應該是「等效的」。硬鏈接文件不關心首先存在哪個鏈接。用du檢查尺寸時,第一次和增量備份的尺寸是否不同? (假設你在備份之間沒有太大變化......) – 2012-03-14 14:30:57
@JanRüegg:我用'du'得到了不同的結果。我通常會做'du -sh/media/bup/vault。*'。其中一個總是顯示〜20GB,並且(假設腳本沒有中斷),其餘的是從10s到100s的任何地方,這取決於改變了什麼。我有時在20GB的範圍內看到不止一個,所以我認爲硬鏈接被破壞了......也許我只是不明白「du」是如何測量尺寸的?它會「重複計數」,還是應該在總文件夾中使用du,然後迭代所有快照? – Hendy 2012-03-14 14:57:12
http://rsnapshot.org/ – jordanm 2012-03-14 15:06:21