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 - задать список директорий и файлов для бэкапа в файле;
|