rsync 备份保留已删除的文件

rsync 备份保留已删除的文件

我必须使用 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 进行传输,但最重要的是它使用硬链接管理时间点快照。它还可以让您确定要保留快照的频率和数量。

相关内容