Итак, несколько дней назад мне понадобилось перенести кое-какие данные с одного сервера на другой. Немного поискав в нете инфы о том, с помощью чего это можно сделать быстро, качественно, в защищенном канале и без гемора, да и так, чтобы если вдруг такой файл есть на целевом сервере, то его не трогать… и т.д.
Задача:
- Надо перенести файлы, с умной проверкой с одного сервера на другой
- Проверять на существование файлов, не перезаписывать если такой уже есть, дописать, если дата изменения отличатеся, или размер меньше
- Производить все операции в защищенном канале (туннеле)
- Возможность настроить на автоматические действия по расписанию, то есть делать тоже самоеделать но по указанному времени, автоматом, например через cron
- Не использовать другие протоколы передачи данных, кроме http
Решение:
- Устанавливаем rsync
portinstall -R rsync
- далее все просто: указываем опции (options), источник (source) и приемник (destination):
rsync -azvh(n) -e 'ssh -p 1627 -l root' site.com:/source/dir(/) /destin/dir/
Расшифровка:
- e — заменяет протокол с rsh на ssh (в одинарных кавычках: -p – порт, -l – пользователь)
- progress — вывод хода процесса работы на терминал
- l — пересоздание symlinks, это значит, что символические ссылки будут так же переноситься
- z — использовать сжатие
- u — update. Обновление, он будет пропускать файлы которые новей, чем на удалённом сервере
- o — установить владельца конечного файла таким же, как и у исходного
- g — установить группу конечного файла таким же, как и у исходного
- t — передача времени модификации и его обновление на удаленной системе. Этот ключ должен быть установлен для точной синхронизации
- h — вывод информации на терминал в удобном для чтения (human-readable) виде
- v — verbose. Вывод сообщений в терминал.
- r — рекурсивный режим
- n — отладочный режим
- compress-level — уровень сжатия
- delete-after — удалять файлы, которые не были найдены на удалённом сервере, “-after” означает, что удалить их нужно, только после окончания синхранизации. Так-же есть delete-before, delete-during, delete-excluded и просто delete
отладочный режим
Перед тем как запустить скрипт на рабочей машине, опробуйте всё в отладочном режиме, для этого используется ключь “-n”. В этом случае, rsyncне будет менять или удалять файлы, но покажет, весь ход работы.
исключение файлов
RSync может как исключать, так и включать файлы, по заданному шаблону. Например —exclude *.run исключит все файлы с расширением run.
В источнике указываем хост, разделитель : указывает на директорию. В приемнике просто директорию. Формат host:/dir – можно использовать как в источнике так и в применике, все зависит от того, что и куда вы синхронизируете.
Еще момент, если в источнике указать в конце слэш / , то будет синхронизированы только файлы в этой директории, если без слэша, то директория и все, что в ней.
Данная утилита позволяет также хранить пароль для уделенного пользователя в отдельном файле, и при вызове указывать путь к этому файлу, это удобно в том случае, когда вы настраиваете автоматический бекап файлов на удаленный сервер, с помощью ssh и удаленного пользователя, у котого установлен пароль.
Ну и конечно же, куда без man rsync 🙂