Backup

使用 RSync 和 CP 輪換備份 - 排除無法完美執行

  • November 22, 2013

我的腳本基本上是這樣的:

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功能而設計的備份。

引用自:https://serverfault.com/questions/556683