我正在进行远程备份。这是我的 rsnapshot 配置。
config_version 1.2
snapshot_root /data/sbackup/
cmd_cp /bin/cp
cmd_rm /bin/rm
cmd_rsync /usr/bin/rsync
cmd_ssh /usr/bin/ssh
cmd_logger /usr/bin/logger
interval alpha 2
interval beta 2
interval gamma 2
interval delta 1
ssh_args -p xxxx
verbose 3
loglevel 4
logfile /var/log/rsnapshot/
exclude_file /data/xxxxx.exclude
rsync_long_args --stats --delete --numeric-ids --relative --delete-excluded
lockfile /var/run/rsnapshot.pid
backup [email protected]:/ xxxxx-server/
我在 exclude_file 中添加了此底线
+ /root
+ /backups/mysqldb/latest
+ /etc/automysqlbackup
+ /etc/imscp
+ /etc/postfix
+ /etc/fail2ban
+ /etc/dovecot
+ /etc/apache2
+ /etc/ssh
+ /etc/ssl
+ /etc/php5
+ /etc/cron.d
+ /usr
+ /var/mail
+ /var/www
+ /var/log
- /var/cache
- /boot
- /home
- /opt
- /etc
- /*
但执行 rsync 后,我只获取了完整root
目录usr
。没有下载其他提及的+
路径文件/子目录。
我希望+
目录被包含而-
不是被包含。
我做错了什么?
答案1
语法很难,但一旦你掌握了它,并非不可能,诀窍在于意识到你必须相对于 rsync/rsnapshot 工作目录的根目录逐个列出要匹配的目录:
假设你只想包含 /var/log 目录而不包含其他内容
+ /var # we want the var directory
+ /var/log # we want the var/log directory
- /var/* # we dont want anything else in the var directory
- /* # we don't want anything else at all
希望你能看到它,首先我们在 /var 上匹配,然后在 /var/log 上匹配,然后在 /var/* 上匹配,然后在 /* 上匹配。
这行不通
+ /var/log
- /*
因为 /var/log 不会生成匹配,奇怪的是......
在您的示例中,您的第一个
+ /backups/mysqldb/latest
永远不会创建匹配..出于同样的原因!
答案2
您的排除模式似乎/*
意味着任何类似的路径/etc/something
都将被排除,除非您明确包含/etc
然后排除那些您不想要的路径/etc/*
。
因此添加+ /etc
和- /etc/*
,并且对于/var
和/backups
和也类似/backups/mysqldb
。
顺便说一句,我之前说过你需要 2 个文件,一个单独的 include_file 和一个 exclude_file。你可以这样做,但事实上,如果你在文件中的每一行都以明确的“+”或“-”开头,它会覆盖默认包括或排除方面。因此,您可以将所有内容放在一个文件中,只要您像之前一样为行添加前缀即可。