Копирование и синхронизация файлов через rsync

Синхронизация с помощью rsync

Сегодня я хочу рассказать о том, как настроить синхронизацию с помощью утилиты rsync. Rsync - это одновременно утилита и сетевой протокол для Unix подобных систем, который служит для синхронизации файлов и директориев с одной машины в другую. Конечно есть всякие дропбоксы, работающие как дважды два. Но плюсом rsync именно является открытость и наличие в стандартных репозиториях во многих Linux дистрибутивах.

Забираем бекап-файлы с помощью rsync

Итак, представим себе типичную ситуацию: нам нужно забрать файлы себе на компьютер с веб-сервера с IP 192.168.1.2. При этом как можно быстрее.

rsync -avz --delete -e ssh [email protected]:/home/backups /home/pcuser/server-backups

И это все! Осталось только нажать в терминале enter затем свои пароль на сервере. Конечно, вместо [email protected] и /home/pcuser/server-backups вам нужно прописать свои данные.

Еще больше примеров

Чтобы видеть прогресс выполнения нужно добавить дополнительный параметр:

rsync -avz --delete --progress -e ssh [email protected]:/home/backups /home/pcuser/server-backups

А теперь представим себе другой сценарии. Вдруг вам нужно наоборот - синхронизировать свой локальные файлы с сервером.

rsync -avz --delete --progress -e ssh /home/pcuser/server-backups [email protected]:/home/backups

Во всех предыдущих примерах стоял параметр --delete. Этот параметр позволяет rsync удалять те файлы, которые были удалены на сервере. Чтобы отключить эту возможность нужно просто убрать этот параметр.

rsync -avz --progress -e ssh /home/pcuser/server-backups [email protected]:/home/backups

И еще один пример - синхронизация данных с одного сервера на другой:

rsync -avz --progress -e ssh [email protected]:/home/backups [email protected]:/home/backups

Автоматизация

Теперь пришло время автоматизировать процесс синхронизации, чтобы не пришлось каждый раз вручную запускать rsync. Очевидно, что организуем мы это через средства cron и bash-скрипта.

Создаем где-нибудь баш скрипт:

touch ~/get-backup.sh

Даем права на исполнение скрипта:

chmod +x ~/get-backup.sh

И прописываем нужные параметры rsync. Я собираюсь синхронизировать бекапы у себя на домашнем компе, поэтому содержимое файла будет примерно таким:

rsync -avz --delete -e ssh [email protected]:/home/backups /home/pcuser/server-backups

Остается только одна маленькая проблема - скрипт все время будет просить пароль. Для решения проблемы нужно сгенерировать ssh ключи и настроить все.

После этого можно смело прописывать задачу в cron:

0 22 * * * $HOME/get-backup.sh &> /dev/null

Все, теперь бекапы будут забираться с сервера каждый день в 22:00.

После всех примеров можно заключить, что утилита rsync в связке с openssh вполне можно использовать как opensource замену dropbox.

Если остались какие-то вопросы, смело пишите в комментариях :)