我有一个运行 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