Rsnapshot --exclude-from файл не работает для подкаталогов

Я делаю удаленное резервное копирование. Это мой конфиг 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  root@xx.xx.xx.xxx:/ 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 каталог. Нет других упомянутых + пути к файлам / подкаталогам загружаются.

я хочу + каталоги, которые будут включены и - не быть включает в себя.

Что я делаю не так?

2 ответа

Решение

Синтаксис сложен, но не невозможен, как только вы его освоите, уловка заключается в том, чтобы понять, что вы должны перечислить каталоги, чтобы они соответствовали один за другим относительно корня рабочего каталога 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

никогда не создаст совпадение.. по той же причине!

Кажется, ваш шаблон исключения /* означает, что любые пути, такие как /etc/something будут исключены, если вы явно не включите /etc а затем исключить тех, с кем вы не хотите /etc/*,

Так добавь + /etc а также - /etc/*и аналогично для /var а также /backups а также /backups/mysqldb,

Кстати, ранее я говорил, что вам нужно 2 файла, отдельные include_file и exclude_file. Вы можете сделать это, но на самом деле, если вы начинаете каждую строку в файле с явного "+" или "-", он переопределяет аспект включения или исключения по умолчанию. Таким образом, вы можете поместить все в один файл, при условии, что вы префикс строки, как вы сделали.

Другие вопросы по тегам