如何使用 rsync 备份整个文件系统 – 包含/排除规则文件

如何使用 rsync 备份整个文件系统 – 包含/排除规则文件

我正在尝试为我的 FreeBSD 服务器设置 rsync 备份。

我整理了一个如下所示的 rsync 命令:

rsync -avzhe ssh --progress --delete --delete-excluded \
--exclude-from=/root/rsync-excludes \
-e ssh / [email protected]:Backups/location

我的/root/rsync-excludes文件如下所示:

- *~
+ /root
+ /usr/home
+ /usr/srv
+ /etc
+ /usr/local/etc
+ /var/backups
+ /usr/local/pgsql/backups
- /root/.my.cnf
- /*

但出于某种原因,它只备份 /etc 和 /root,而忽略了其他文件。有人能解释一下为什么吗?

解决方案

根据 Gilles 的回答,我找到了答案,我的配置现在如下所示:

- *~
+ /etc
+ /root
+ /usr/
+ /usr/home
+ /usr/local/
+ /usr/local/etc
+ /usr/local/git
+ /usr/local/pgsql/
+ /usr/local/pgsql/backups
- /usr/local/pgsql/*
+ /usr/local/varnish
- /usr/local/*
+ /usr/srv
- /usr/*
+ /var/
+ /var/backups
- /var/*
- /root/.my.cnf
- /*

答案1

在递归遍历过程中,rsync 将每个目录与规则进行匹配。当涉及到 时/usr,第一个匹配规则是- /*。因此/usr被排除,rsync 甚至不会查看其下方的任何内容。修复:明确包含、/usr以及和。/usr/local/usr/local/pgsql/var

rsync 手册在“包含/排除模式规则”下有更广泛的讨论(诚然,这不是最容易阅读的)。

答案2

看起来您获得了 --one-file-system 行为。这可能是 freebsd 上的默认行为。

我还看到您的目的地不是根帐户,这应该会破坏保留权限和所有权。

相关内容