如何在 rsnapshot 中截断备份路径

如何在 rsnapshot 中截断备份路径

我不确定标题是否正确。我的 rsnapshot.conf 中有一行

backup  [email protected]:/mnt/rsnapshot/      srv01/

因此 rsnapshot 会创建一个目录RSNAPSHOT_ROOT/daily.0/srv01/mnt/rsnapshot并将备份文件放在那里。对我来说,这/mnt/rsnapshot部分是不必要的;我宁愿直接将备份文件放在 中RSNAPSHOT_ROOT/daily.0/srv01/。有什么方法可以实现这一点吗?

答案1

rsnapshot使用--relative标志来rsync保存路径名信息。在大多数情况下,您可能确实希望保留(至少部分)该信息,尤其是在备份本地目录时。但是,就您而言,您确实不需要保留前导路径前缀。

使用较新的版本rsync(v.2.6.7+),您可以通过在所需的切点处--relative插入 来明确控制要保存的路径名前缀部分。不会有效地更改路径名,但它会告诉您只想保留 后面的路径名部分。由于您想切断整个路径名,只需将 附加到源路径的末尾,如下所示:././rsync--relative././

backup  [email protected]:/mnt/rsnapshot/./  srv01/

编辑

好的,看起来这个./技巧在这种情况下不起作用,因为rsnapshot删除了尾随的/。相反,您应该能够--relative在每个备份点的基础上禁用该选项,方法是在您的backup行中添加第四列,如下所示:

backup  [email protected]:/mnt/rsnapshot/  srv01/  +rsync_long_args=--no-relative

指示将+rsync_long_argsrsnapshot附加到其现有rsync_long_args选项,仅适用于当前备份点。通过附加--no-relativersync_long_args,您可以实现关闭 的预期效果--relative

答案2

Steven 的第一个建议./确实适用于 rsnapshot,您只需输入两次:

backup  [email protected]:/mnt/rsnapshot/././  srv01/

Rsnapshot 将删除最后一个斜杠,但第一个点对于 rsync 有效。

答案3

此行为实际上是由 rsync 的--relative标志控制的。引用rsync 手册

-R,--相对

使用相对路径。这意味着命令行上指定的完整路径名会被发送到服务器,而不仅仅是文件名的最后部分。当您想同时发送几个不同的目录时,这特别有用。例如,如果您使用此命令:

rsync -av /foo/bar/baz.c remote:/tmp/

...这将在远程机器的 /tmp/ 中创建一个名为 baz.c 的文件。如果你使用

rsync -avR /foo/bar/baz.c remote:/tmp/

那么将在远程计算机上创建一个名为 /tmp/foo/bar/baz.c 的文件,并保留其完整路径。这些额外的路径元素称为“隐含目录”(即上例中的“foo”和“foo/bar”目录)。[...]

因此,在rsnapshot.conffind 中,以 开头的行应该存在rsync_long_args。默认情况下,--delete --numeric-ids --relative --delete-excluded应该存在。删除该--relative选项应该会产生所需的结果。

相关内容