Программа Rsync
(во FreeBSD есть в портах), используется для удаленного копирования(резервного копирования - backup) или синхронизации файлов и каталогов, с минимальными затратами трафика. Может практически целиком заменить 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
не пересекать границы FS --exclude=PATTERN
исключить файлы заданного образца --delete-during
приемник удаляется ПРИ ПЕРЕДАЧЕ --delete-after
приемник удаляется ПОСЛЕ ПЕРЕДАЧИПод 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, "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