Rsync

僅在有更改時使用 rsnapshot 進行備份

  • April 13, 2016

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 diffwhich callrsnapshot-diff來記錄兩個快照之間的差異。它只是比較 inode 編號,因此相當有效。

或者,在每次備份之前在備份樹之外創建一個文件來記錄時間,touch timestamp. 然後在新備份之前,創建一個新的時間戳,touch timestamp.new並測試是否有任何文件或目錄的時間比舊的時間戳更新

find tree -newer timestamp

如果沒有,請不要進行備份。無論如何,mv timestamp.new timestamp下一次。這假設您沒有操作文件和目錄時間戳的應用程序。

引用自:https://unix.stackexchange.com/questions/275934