守护进程模式下的rsync:保留绝对目录结构

我正在尝试使用守护进程模式启动的rsync备份一些文件夹。 基本上客户端启动这个命令:

rsync --delete -avz -R -e "ssh -i ${KEY}" ${SERVER}::${MODULE} {DST_DIR} 

服务器的authorized_keys文件上有公钥:

  command="rsync --server --daemon --config /root/rsync.conf" 

这里是包含我想要备份的文件夹的rsync.conf文件:

  uid=0 gid=0 read only = true use chroot = true [backup] path = /root path = /etc 

这里的问题是这些文件夹的内容被复制,而不是其绝对path。 我想/ etc / etc_content和/ root / root_content在我的$ {DST_DIR},我得到的是/ etc的内容(我认为/ root是同步的,然后/ etc,删除/根内容…哎哟)。

我很确定有一种方法来强制rsync保存绝对path。 我已经尝试使用-R选项,但没有成功。 我也试过不使用chroot。

我怎样才能通过?

非常感谢

你说得对,使用“-R”选项来使用相对path,但是工作方式有点不同。 $ {MODULE}正好输出由“path”参数定义的rsync服务器文件系统的部分。

每个“模块”部分应该只定义一个“path”参数。 这就解释了为什么你可以先查看/ root内容,因为在指定多个path参数时它似乎被覆盖了。

我要么尝试为每个我想要备份的目录定义一个模块

 uid=0 gid=0 read only = true use chroot = true [root] path = /root [etc] path = /etc 

然后在所有这些模块上调用rsync

 for MODULE in root etc; do rsync -avzR $SERVER::$MODULE $DST_DIR/$MODULE done 

或者我会用单个模块部分导出更大部分的服务器文件系统

 uid=0 gid=0 read only = true use chroot = true [root] path = / 

并备份需要的目录

 rsync -avzR $SERVER::$MODULE/root $SERVER::$MODULE/etc $DST_DIR 

两种方式都将保留您所要求的原始/绝对目录结构。

我find了包含选项的方法; 我的rsync.conf文件现在看起来像这样:

  uid=0 gid=0 read only = true use chroot = true [backup] path = / include /etc/*** /root/*** /usr/local/etc/*** exclude /*** 

然后我可以用它们的绝对path检索文件夹,但是会出现另一个问题:

这里的问题是,同步只适用于直接在/ etc / etc / *和/ root / *之下的包含目录,并且它不适用于/ usr / local / etc / *

当我尝试使用include from关键字并将这些文件夹填充到指定的included_from文件时,会发生同样的问题。

我有点绝望, 要么这是不可能执行我想要的rsync,或者我失去了一些明显的东西? 男人对rsync的解释是相当艰难的。 dsumsky,谢谢你的回答,我想我应该采纳你的解决scheme。