![rsync 备份保留已删除的文件](https://linux22.com/image/500197/rsync%20%E5%A4%87%E4%BB%BD%E4%BF%9D%E7%95%99%E5%B7%B2%E5%88%A0%E9%99%A4%E7%9A%84%E6%96%87%E4%BB%B6.png)
我必须使用 rsync 备份一组用户数据。只有一件小事我不知道该怎么做。当用户删除文件时,它会保留在服务器上。这很好,因为它可能是被误删除的,但如果它不永远留在那里就好了。
那么,当文件在 SRC 上一段时间内没有出现时(比如 7 天),我该如何让 rsync 删除 DEST 上的文件呢?
我知道我可以编写一个脚本,手动使用 rsync 同步文件夹中的每个文件,然后确定是否应该删除 DEST 上的文件,但这样做有点愚蠢,因为后来才知道 rsync 已经有了这个功能。但我找不到它。
非常感谢您抽出时间
答案1
Rsync 不会自行执行此操作。例如快照可让您维护多代基于 rsync 的备份(每小时、每天、每月等),以便您可以检索意外删除的文件。通过使用硬链接,rsnapshot 可让您保留大量快照,而无需使用比完整备份“成本”更多的空间。
还有其他解决方案可以做同样的事情 - rsnapshot 恰好是我亲身体验过的解决方案。(如果您决定使用它,我强烈建议您使用“sync_first”选项...)
答案2
这些--backup
--backup-dir=
标志可能就是您要找的,如果您为备份目录指定了相对路径,则会在目标目录中创建一个目录,并且任何已删除的文件都将以其原始路径存储在该目录中。如果您想使用绝对路径,这当然也可以。
清除旧的已删除文件是另一个问题,我的使用--times
使它变得更加复杂,因为已删除文件上的时间戳将反映文件的最后修改时间,而不是删除时间。我正在考虑的一个选项是使用某种日期字符串构建备份目录值,并使用它来解析和清除一段时间。例如--backup-dir=/DELETED_FILES/$(date "+%Y_%m_%d-%H_%M_%S")
在一些示例文件上试用一下,最简单的版本是:
rsync --delete --backup --backup-dir=DELETED_FILES/ --recursive --times src/ dest/
或者使用带有日期标记的版本进行游戏:
rsync --delete --backup --backup-dir=DELETED_FILES/$(date "+%Y_%m_%d-%H_%M_%S") --recursive --times src/ dest/
我会将 DELETED_FILES 目录放在目标目录之外的绝对路径上,您可能想另作他用。
答案3
每周一次,我使用 rsync 的 --delete 选项
RSYNC_OPT="--stats --delete --delete-excluded -avvzpogte ssh --exclude-from /root/etc/exclude.txt"
其余时间,我进行增量备份
RSYNC_OPT="--stats -avvzpogte ssh --exclude-from /root/etc/exclude.txt"
两个脚本均由 cron 调用
答案4
查看 rsnapshot。它使用 rsync 进行传输,但最重要的是它使用硬链接管理时间点快照。它还可以让您确定要保留快照的频率和数量。