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

守护进程模式下的 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

这里的问题是复制的是这些文件夹的内容,而不是其绝对路径。我希望我的 ${DST_DIR} 中包含 /etc/etc_content 和 /root/root_content,而我得到的是 /etc 的内容(我假设先同步 /root,然后同步 /etc,这会删除 /root 内容...哎哟)。

我确信有一种方法可以强制 rsync 保留绝对路径。我尝试使用 -R 选项,但没有成功。我也尝试过不使用 chroot。

我怎样才能通过它?

非常感谢

答案1

你说得对“-R”可以使用相对路径,但工作方式略有不同。${模块}准确导出 rsync 服务器文件系统中由以下定义的部分“小路”范围。

你应该只有一个“小路”每个参数“模块”部分已定义。这解释了为什么您可以先看到 /root 内容,然后看到 /etc,因为当指定多个路径参数时,它似乎被覆盖了。

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

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

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

答案2

我找到了一种使用包含选项的方法;我的 rsync.conf 文件现在如下所示:

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

然后我可以使用文件夹的绝对路径检索它们,但是出现了另一个麻烦:

这里的问题是,同步仅适用于 / 又名 /etc/* 和 /root/* 正下方的包含目录,而不适用于 /usr/local/etc/*

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

我有点绝望;要么这无法用 rsync 执行我想要的操作,要么我忽略了一些显而易见的东西?rsync 的解释相当难。dsumsky,谢谢你的回答,我正在考虑最终还是应该采用你的解决方案。

相关内容