Rsnapshot --exclude-from ファイルがサブディレクトリに対して機能しない

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  [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ディレクトリのみが取得されます。他の指定された+パス ファイル/サブ ディレクトリはダウンロードされません。

+ディレクトリを include にしたいのですが、 -include にしたくないのです。

何が間違っているのでしょうか?

答え1

構文は難しいですが、一度コツをつかめば不可能ではありません。コツは、rsync/rsnapshot 作業ディレクトリのルートを基準にして、一致するディレクトリを 1 つずつリストする必要があることに気づくことです。

/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が必要だと言いました。これは可能ですが、実際にはファイルの各行を明示的に「+」または「-」で始めると、デフォルトアスペクトを含めるか除外するかを指定します。したがって、あなたが行ったように行の先頭にプレフィックスを付ければ、すべてを 1 つのファイルにまとめることができます。

関連情報