僅在有更改時使用 rsnapshot 進行備份
我
rsnapshot
用來定期將我的系統文件系統備份到遠端伺服器。(對於那些熟悉
rsync
但不太習慣的人,rsnapshot
這裡簡要介紹了它的工作原理。備份是源文件系統樹的逐個文件副本,很像cp -a
會產生的。“目前”備份始終是hourly.0
, 和前一個是hourly.1
。每次備份開始時,這些名稱都會輪換。在幕後,rsnapshot
用於rsync --link-dest
將未更改的文件硬連結hourly.0
到上一個備份樹中的相應條目,hourly.1
.)如果備份失敗,則會將先前的備份複製(連結)
cp -al
到目前備份中,從而始終顯示為已進行備份。如果自上次備份以來沒有任何更改,我想要避免進行備份。這可能包括備份失敗或只是源文件系統自上次備份以來未修改。(如果您願意,“製作備份”可以改寫為“刪除不必要的備份”。)
我考慮過在
hourly.0
樹中查找未在其他地方硬連結的文件,如果沒有,則只需刪除備份樹。這不會處理在其備份中有效連結到其他地方的文件,並且它也無法考慮對目錄的更改。我也考慮過使用rsync --dry-run
比較兩個備份樹並查看它的輸出,但這感覺有點難看。有更好的解決方案嗎?
快照之後,您可以使用
rsnapshot diff
which callrsnapshot-diff
來記錄兩個快照之間的差異。它只是比較 inode 編號,因此相當有效。或者,在每次備份之前在備份樹之外創建一個文件來記錄時間,
touch timestamp
. 然後在新備份之前,創建一個新的時間戳,touch timestamp.new
並測試是否有任何文件或目錄的時間比舊的時間戳更新find tree -newer timestamp
如果沒有,請不要進行備份。無論如何,
mv timestamp.new timestamp
下一次。這假設您沒有操作文件和目錄時間戳的應用程序。