我正在尝试为我的 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 上的默认行为。
我还看到您的目的地不是根帐户,这应该会破坏保留权限和所有权。