使用 rsync 备份 rsnapshot 目录并复制整个备份目录

使用 rsync 备份 rsnapshot 目录并复制整个备份目录

我有一个运行 rsnapshot 的主备份服务器,上面存储了约 2TB 的备份。每晚备份后,我使用 将 rsnapshot 目录的内容复制到异地服务器rsync -aH --delete /source /dest。但是,这似乎每晚都会复制备份目录的全部内容,因为异地复制需要约 9 小时才能完成。

我猜想我的 rsync 命令没有正确的开关,但可能还有其他我遗漏的东西。有什么想法吗?

答案1

这里的问题是,如果您想在远程位置保留整个版本备份的副本,您将不得不处理 rsnapshot 在运行时旋转目录名称的事实,因此您最终会得到每次复制最新备份的全新副本。

您可以改变 rsnapshot 的运行方式,包括它执行复制的时间和旋转(重命名)目录的时间,还可以在 rsnapshots 执行周期的各个点执行脚本,例如在运行特定备份点之前或之后。

这里有一篇很有帮助的帖子:

https://stackoverflow.com/questions/10691522/mirror-rsnapshot-backup-directory

另一种方法是在您的第二台机器上获取 rsnapshot 的副本,并在主备份完成后让其备份 /snapshot_root/daily.0 的内容。这与正确的 rsync 标志结合将为您提供最新备份的增量副本。

答案2

我相信你只是多次复制相同的文件。希望这些有关 rsnapshot 如何工作的详细信息能够帮助解决问题。

以下是最重要的一点:

当 rsnapshot daily 运行时,它将轮换所有每日.X 目录,然后复制每小时.5进入每日.0

每小时.0 将始终包含最新的快照,并且每日.6始终包含一周前的快照。除非文件在快照之间发生变化,否则完整备份实际上只是指向相同文件的多个硬链接。因此,如果您的/etc/passwd文件在一周内没有变化,hourly.0/localhost/etc/passwd那么daily.6/localhost/etc/passwd 实际上将是完全相同的文件。

这就是 rsnapshot 节省空间的原因。如果文件在任何时候发生变化,下一次备份将取消硬链接每小时.0,并将其替换为一个全新的文件。

答案3

有一个名为的选项--link-dest可以满足您的需求。当此参数指向您的最新备份时,如果 src 与您上次备份中的数据(引用--link-dest)不同,它将仅将文件从 src 复制到 dest;如果数据相同,它将创建一个符号链接,从而为您提供完整版本的备份。

我使用此选项在单独的磁盘上本地创建每日快照,对于远程备份,您需要修改它以确保在远程系统上正确创建符号链接。我建议添加一些旧备份的轮换,并且必须创建一个初始标准备份以供比较。

today=$(date "+%Y-%m-%d-%H-%M-%S")
rsync -a --link-dest=/localbackups/latest/ /data/ /localbackups/${today}
cd /localbackups/
rm -rf /localbackups/latest
ln -s $today latest

相关内容