Backup
使用 RSync 和 CP 輪換備份 - 排除無法完美執行
我的腳本基本上是這樣的:
cp -al $yesterdays_snapshot $todays_snapshot rsync -vadlH --exclude-from excludes.rsyc $source $todays_snapshot
這很好用,除了一個問題:
如果昨天我沒有排除,但今天我意識到 /directory/cache 應該被排除,rsync 停止查看記憶體,但 cp 每天繼續向前複製它。一段時間後,這意味著快照將具有一年前的 /directory/cache 內容,這不是所需的行為。我們根本不希望 /directory/cache 在快照中。
如果 rsync 從最新的快照中刪除 /directory/cache 會更好。
或者,如果 cp 知道不複製 excludes.rsync 中列出的任何文件,那就太好了
我可以編寫一個函式,從 todays_snapshot 中手動刪除任何排除文件,但這需要一點技巧,這感覺就像是那種有現成答案的問題。
有什麼建議麼?
您嘗試對 cp 和 rsync 執行的操作是創建具有彼此硬連結的相同文件的備份集。
這可能非常有用,這就是為什麼 rsync 開發人員已經考慮到這一點,並直接在 rsync 中包含本機功能來完成此操作。
此功能由
--link-dest
選件提供。基本上你的 rsync 命令看起來像這樣
rsync -va sourcepath newsnapshotpath --link-dest previoussnapshot
。Rsync 會將任何相同的文件硬連結到之前的快照,並根據需要複製新文件。源上不再存在的文件將不會被連結/複製。在我對另一個問題的回答中,我展示了一系列命令,您可以發出這些命令來確切了解這一切是如何工作的。
作為記錄,如果你想避免重新發明輪子,你可能還想仔細看看 dirwish。這是專門為利用該
--link-dest
功能而設計的備份。