Powered by Invision Power Board


  Ответ в темуСоздание новой темыСоздание опроса

> Полезные рецепты при работе с rsync
Mentat
Дата Mar 12 2009, 12:55 PM
Цитировать сообщение




Administrator
***


Группа: Admin
Сообщений: 2009
Пользователь №: 133
Регистрация: 5-February 04





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

http://www.opennet.ru/tips/info/1768.shtml
PM
Top
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса