Назад | Перейти на главную страницу

Как использовать rsync для резервного копирования всей файловой системы - включить / исключить файл правил

Я пытаюсь настроить резервное копирование rsync для своих серверов FreeBSD.

Я собрал команду rsync, которая выглядит так:

rsync -avzhe ssh --progress --delete --delete-excluded \
--exclude-from=/root/rsync-excludes \
-e ssh / backup@my.backup.box: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, оставив остальные файлы без учета. Может кто-нибудь объяснить почему?

Решение

Согласно ответу Жиля, я понял это, и моя конфигурация теперь выглядит так:

- *~
+ /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
- /*

Во время рекурсивного обхода rsync сопоставляет каждый каталог с правилами. Когда дело доходит до /usr, первое правило соответствия - /*. Следовательно /usr исключен, и rsync даже не смотрит на все, что ниже него. Исправить: явно включить /usr, так же как /usr/local, /usr/local/pgsql и /var.

В руководстве по rsync есть более подробное обсуждение в разделе «правила включения / исключения шаблонов» (по общему признанию, не самое легкое чтение).

Похоже, вы получаете поведение --one-file-system. Это может быть значение по умолчанию для freebsd.

Я также вижу, что ваш пункт назначения не является учетной записью root, что должно нарушить сохранение разрешений и владения.