我发现 rsnapshot 是一款出色的工具,可用于将我的东西备份到本地文件系统。现在我需要创建 rsnapshot_push.conf 文件,在其中向 rsync 服务器提供参数。正确的做法是什么?我可以使用 rsync 将 /rsnapshot-backups/localhost/ 同步到 rsync 服务器吗?
答案1
Rsnapshot 在设计上是基于拉取的。Rsnapshot 的强大之处在于使用硬链接,而这只适用于本地文件系统。(nfs 可以使用,因为它支持硬链接,但 sshfs 等不支持)。
在推送场景中,最好的解决方案是使用 rsync 简单地将数据推送到服务器上的备份目录,然后允许 rsnapshot 处理来自该目录的快照,就像它设计的那样。Rsnapshot 并不关心更改是由 rsync 还是通过保存文件引入的。
在 rsnapshot FAQ 中有一个在 rsync 之后触发 rsnapshot 的奇特解决方案,但这可能有点过头了。只需从其日常 cron 作业中运行 rsnapshot 即可。
另一种解决方案是rdiff-备份但是这不能提供每个快照的良好目录视图,并且需要运行命令来恢复文件,这可能会使快速恢复变得复杂。
答案2
另一种选择是使用反向 ssh 隧道,然后从接收方进行“远程”拉取:
#!/bin/bash -x
IVAL=${1:-hourly}
ssh -vNR 1998:localhost:22 example.com &
ssh example.com "rsnapshot -c pull-from-sender-rsnapshot.conf ${IVAL}"
其中pull-from-sender-rsnapshot.conf
可能包含如下行:
backup localhost:1998/etc/ desktop-1
这可以由发送方的 cron 调用,在本地触发远程 rsnapshot。
答案3
我开发了rsnappush专门解决您遇到的相同问题,实际上我看到了您的帖子,因为我正在寻找一个预先构建的解决方案(尚不存在)。
概要
rsnappush [-h] [-r RSYNC_OPT] [-q] SOURCE_PATH [ACCOUNT:]DEST_PATH
描述
rsnappush是 rsync(1) 的包装器,用于协助推送到目标的文件级增量快照。未更改的文件是硬链接的。文件在每个快照的目录中清晰地布局:目标路径/备份-YYYYmmdd-HHMM/ 以便于访问和恢复。
源路径是任意本地路径。
目标路径是路径,本地或远程。如果是远程路径,帐户指定与 ssh(1) 兼容的帐户描述,例如用户@主持人。
此外,根据目标路径有一个权限/ 创建的目录包含来自 getfacl(1) 的压缩输出。解压缩后,可以使用 setfacl(1) 从此文件恢复权限。
例子
rsnappush --rsync-opt=--partial-dir=/home/user2/rsync-partial \
/home/user user2@remotehost:backups/