Перевод сборника команд Unix ToolBox. Часть 13 RSYNC

566

Ну и на сон грядущий решил предложить читателям «чертову» 13 часть перевода ?сборника команд Unix ToolBox.  Здесь вы узнаете о RSYNC. Это не абракадабра, а прекрасная программа, которая может выполнять целый комплекс задач. Кроме того, Rsync прекрасно используется как сервер. Выглядит это следующим образом. Есть отдельный сервер куда будут складываться все бэкапы. С этого сервера запускается по крону команда rsync с параметрами, которая реализует коннект к удаленным машинам в сети, например к Samsung R528 (NP-R528-DS05UA). На всех машинах работает Rsync-служба, в конфиге которой прописано какие именно каталоги нужно синхронизировать. Как говорится, все гениальное просто. Но команды для работы с Rsync все же стоит подучить.

Программа Rsync ( во FreeBSD есть в портах ), используется для удаленного копирования (резервного копирования ) или синхронизации файлов и каталогов, с минимальными затратами трафика. Может практически целиком заменить cp и scp, умеет кодировать данные, поддерживает сжатие и рекурсию, кроме того, прерванные передачи можно с легкостью перезапустить. На страницах руководства, все описано довольно подробно.

Вот несколько примеров:

Копировать директорию с контентом:

# rsync -a /home/colin/ /backup/colin/
# rsync -a /var/ /var_bak/
# rsync -aR —delete-during /home/user/ /backup/ # Используется относительный путь (см. ниже)

То-же что и выше, только по сети и с компрессией. По-умолчанию, Rsync использует для передачи протокол SSH в том числе и с ключами, если таковые имеются. Символ «:» используется как в SCP. Типичный пример удаленного копирования:

# rsync -axSRzv /home/user/ user@server:/backup/user/

Исключить из процесса удаленного копирования, директорию tmp в /home/user/ и сохранить иерархию, удаленная директория будет иметь структуру /backup/home/user/. Данный пример типичен для резервного копирования:

# rsync -azR —exclude /tmp/ /home/user/ user@server:/backup/

Использовать 20022 порт для SSH:

# rsync -az -e ‘ssh -p 20022’ /home/colin/ user@server:/backup/colin/

Можно использовать демон rsync (с «::«), это гораздо быстрее, но трафик не шифруется. Местонахождение папки папки для резервного копирования (например /backup) можно настроить в файле /etc/rsyncd.conf. Переменная RSYNC_PASSWORD служит для того, что-бы избежать необходимости ввода пароля вручную.

# rsync -axSRz /home/ ruser@hostname::rmodule/backup/
# rsync -axSRz ruser@hostname::rmodule/backup/ /home/ # Копировать обратно

Некоторые важные опции:

  • -a, -archive режим архива; то-же что и -rlptgoD (без -H)
  • -r, -recursive обходить директории (рекурсия)
  • -R, -relative относительные пути
  • -H, -hard-links сохранять жесткие ссылки ( hardlink )
  • -S, -sparse handle sparse files efficiently
  • -x, -one-file-system не пересекать границы файловой системы
  • -exclude=PATTERN исключить файлы заданного образца
  • -delete-during приемник удаляется ПРИ ПЕРЕДАЧЕ
  • -delete-after приемник удаляется ПОСЛЕ ПЕРЕДАЧИ

winrsync

Под Windows, rsync можно использовать через cygwin или отдельным приложением cwrsync. Очень удобно для автоматизации резервного копирования. Установите ОДИН из вариантов и добавьте путь в системные переменные Windows: Control Panel -> System -> tab Advanced, button Environment Variables. Отредактируйте переменную «Path«, добавив полный путь до rsync, например так: C:\Program Files\cwRsync\bin или C:\cygwin\bin. Это позволит использовать rsync и ssh из командной строки Windows.

Авторизация по ключу

Rsync автоматически туннелируется через SSH протокол, а тот использует SSH авторизацию на сервере. Автоматическое резервное копирование используется для минимизации участия пользователя в этом процессе, как раз для этого и нужна авторизация по публичному ключу, что-бы не запрашивать у пользователя ввод пароля.
Все команды выполняются в командной оболочке Windows (Start -> Run -> cmd). Создайте и загрузите ключи, как описано в материале SSH, SCP, «user» и «server» установите соответствующие.

# ssh-keygen -t dsa -N » # Создаем ключи
# rsync user@server:.ssh/authorized_keys2 # Копируем файл ssh/authorized_keys2 на локальную машину
# cat id_dsa.pub >> authorized_keys2 # Или используйте редактор, что-бы добавить ключ
# rsync authorized_keys2 user@server:.ssh/ # Копируем файл обратно на сервер
# del authorized_keys2 # Удаляем локальную копию

Теперь проверяем (одной строкой):

rsync -rv «/cygdrive/c/Documents and Settings/%USERNAME%/My Documents/» ‘user@server:My\ Documents/’
Автоматизация резервного копирования

Планировка и выполнение задания резервного копирования, можно вполне возложить на какой-нибудь планировщик или пакетные файлы (Programs -> Accessories -> System Tools -> Scheduled Tasks). Например, можно создать такой файл, заменив «user@server» на свои:

@ECHO OFF
REM rsync the directory My Documents
SETLOCAL
SET CWRSYNCHOME=C:\PROGRAM FILES\CWRSYNC
SET CYGWIN=nontsec
SET CWOLDPATH=%PATH%
REM uncomment the next line when using cygwin
SET PATH=%CWRSYNCHOME%\BIN;%PATH%
echo Press Control-C to abort
rsync -av «/cygdrive/c/Documents and Settings/%USERNAME%/My Documents/» \
‘user@server:My\ Documents/’
pause