Полезные рецепты при работе с rsync

 

Полезные рецепты при работе с rsync

1. Если копируемая директория заканчивается слэшем, то файлы будут скопированы в каталог назначения относительно корня изначально заданной директории.

Пример:

rsync -a /dir1/dir2 /dir3 – будет создана иерархия /dir3/dir2/файлы

rsync -a /dir1/dir2/ /dir3 – будет создана иерархия /dir3/файлы

2. При транзитном переносе файлов через дополнительную машину не нужно забывать, что опция “-a” подразумевает трансляцию имен пользователей и групп в локальные uid/gid, т.е. скопировав данные с первой машины на вторую, а потом со второй на локально подключенный жесткий диск, предназначенный для третьей машины, получим на третьей машины совершенно иных владельцев каталогов и файлов. Не тех которые были в /etc/password первой машины, а тех, которые в данным момент в /etc/password второй машины (изменятся типовые пользователи, например, web, ftp, dhcp, номера uid/gid которых отличаются на двух машинах). Чтобы этого не произошло нужно использовать опцию “–numeric-ids”.

3. Особенности задания файлов исключений (“–exclude-from=файл” или ” –exclude маска1 –exclude маска2″).

Для того чтобы исключить из бэкапа содержимое директории, но саму директорию оставить, нужно указать в “exclude” файле “/dir/*”, а не “/dir/” (под “/dir” подпадет и /dir123, и файл /dir.txt, для директорий указание “/” в конце обязательно). Звездочка (“*”) в шаблоне действует только на имя файла/каталога, чтобы маской охватывалась часть пути, включая “/”, нужно писать “**”. Шаблон не начинающийся с ‘/’ проверяется с конца строки. Например “/dir/test” будет проверен c начала пути, а “dir/test.txt” или “*.log” с конца. Если необходимо исключить все поддиректории в /dir, кроме /dir/best, в список исключений нужно поместить: + /dir/best/ – /dir/* При переборе содержимого “exclude” файла, срабатывает первое правило под которое подпадает текущий путь, не важно исключающие или нет. В качестве корня выступает директория назначения, т.е. “/” в “exclude” файле = “/dir3/dir2” или “/dir3” из первого совета.

4. Запрещение двойного сжатия при передаче данных по SSH.

rsync при задании опции “-z” более оптимально сжимает передаваемые данные, поэтому сжатие средствами ssh можно отключить: export RSYNC_RSH=”ssh -c arcfour -o Compression=no -x” rsync -a -z -v –bwlimit=16 /dir1 /dir2 user@test.ru:/dir3/ где, –bwlimit=16 ограничивает пропускную способность при копировании бэкапа в 16 Кбайт в сек.

5. Изменение уровня точности при сравнении локального и удаленного времени модификации файлов.

Например, для того чтобы считать идентичными файлы время модификации которых отличается на 1 секунду необходимо указать: “–modify-window=1″.

6. Пример сохранения истории изменения данных.

При этом старые измененные или удаленные файлы не теряются а перемещаются в директорию /snapshot/дата. #!/bin/sh snapshot_dir=”/snapshot/`date \\+\\%Y_\\%m_\\%d`” mkdir $snapshot_dir rsync -a -v –delete –max-delete=1000 –hard-links \\ –delete-excluded –exclude-from=/etc/rsync_backup.exclude \\ –backup –backup-dir=$snapshot_dir \\ / /backup RETCODE=$? if [ $RETCODE -ne 0 ]; then echo “Err code=$RETCODE”| mail -s “FATAL RSYNC BACKUP” admin@test.ru fi echo RET: $RETCODE /bin/chmod 0700 /backup /bin/chmod 0700 /snapshot

7. Некоторые полезные опции.

-v – говорливость, выводит имена обрабатываемых файлов;

-a – работа в режиме архивирования, сохраняются права доступа и информация о владельцах;

-H – сохранять жесткие ссылки, оставляя их на другом конце бэкапа;

-x – не выходить за пределы текущей точки монтирования;

–progress – показывать сколько процентов осталось до завершения и скорость передачи;

–delete – удалять из бэкапа файлы, которых уже нет на стороне источника.

–delete отличается от –delete-after тем, что удаление производится вначале, а не на завершающей стадии процесса бэкапа.

–delete-after работает быстрее, так как не требует лишней стадии обхода списка файлов, но требует использования опции –force для обработки таких ситуаций как удаление файла и появление диретории с тем же именем;

–delete-excluded – удалять части которые уже есть на стороне бэкапа, но появились в списке исключения;

-n – режим тестирования, реально никаких действий по копированию не производится, только эмуляция;

-c – использование сверки по контрольным суммам, а не по времени изменения и размеру;

–compare-dest=DIR – сохранять новые и измененные файлы в отдельной директории, не трогая на время копирования основную директорию назначения, в конце – разом, путем переименования, обновить содержимое бэкапа;

–link-dest=DIR – использовать жесткие ссылки на файлы в DIR, например, для создания подобия снапшотов;

–ignore-errors – продолжать копирование и удаление после появления ошибок;

–max-delete – ограничение максимально числа удаляемых за один раз файлов и каталогов;

-A – сохранять не только права доступа, но и ACL;

–files-from=FILE – задать список директорий и файлов для бэкапа в файле;