Полный цикл в digital

Утилита Rsync в Linux

Rsync программное обеспечение с открытым исходным кодом, которое можно использовать для синхронизации файлов и папок с локального компьютера на удаленный и наоборот. Примечательная особенность, возможность передавать зашифрованные файлы с помощью SSH и SSL. Кроме того, здесь передача файлов выполняется в один поток, в отличие от других подобных программ, создающий отдельный поток для передачи каждого файла. Это увеличивает скорость и убирает дополнительные задержки, которые становятся проблемой при передаче большого количества маленьких файлов. Примечательные особенности Rsync:

  • Возможность поддерживать синхронизацию целых деревьев каталогов
  • Можно сохранять символические ссылки, жесткие ссылки,  владельцев и права файла, метаданные и время создания
  • Не требует особых привилегий
  • Передача файлов одним потоком
  • Поддержка RSH, SSH в качестве транспорта
  • Поддержка анонимного Rsync

Синтаксис команды Rsync:

rsync опции источник приемник

Опции Rsync

  • -v выводить подробную информацию о процессе копирования;
  • -q минимум информации;
  • -c проверка контрольных сумм для файлов;
  • -a режим архивирования, когда сохраняются все атрибуты оригинальных файлов;
  • -R относительные пути;
  • -b создание резервной копии;
  • -u не перезаписывать более новые файлы;
  • -l копировать символьные ссылки;
  • -L копировать содержимое ссылок;
  • -H копировать жесткие ссылки;
  • -p сохранять права для файлов;
  • -g сохранять группу;
  • -t сохранять время модификации;
  • -x работать только в этой файловой системе;
  • -e использовать другой транспорт, например, ssh;
  • -z сжимать файлы перед передачей;
  • --delete удалять файлы которых нет в источнике;
  • --exclude исключить файлы по шаблону;
  • --recursive перебирать директории рекурсивно;
  • --no-recursive отключить рекурсию;
  • --progress выводить прогресс передачи файла;
  • --stat показать статистику передачи;
  • --version версия утилиты.

Служба rsync

Для большего контроля над процессом синхронизации Rsync позволяет вместо протокола SSH использовать собственную службу rsync-daemon (rsyncd).

Настройка службы Rsync выполняется в файле /etc/rsyncd.conf, который нужно создать:

sudo nano /etc/rsyncd.conf

Файл может выглядеть примерно так:

pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsync.log
[share]
path = /tmp/share/
hosts allow = 192.168.56.1
hosts deny = *
list = true
uid = root
gid = root
read only = false

Здесь мы задаем путь к нашей папке для синхронизации, разрешаем доступ к серверу только с ip адреса 192.168.56.1 и запрещаем все остальные подключения. Параметры uid и gid указывают пользователя и группу, от которых будет запущен демон. Лучше не использовать root, а создать нового пользователя и выдать ему права на ту папку, в которую будет выполняться синхронизация каталогов rsync.

Настройка Rsync завершена, остается сохранить файл, запустить сервер rsync:

systemctl start rsync

Добавить Rsync в автозагрузку:

systemctl enable rsync

Копирование и синхронизация файлов на локальном компьютере

Rsync позволяет синхронизировать файлы и папки в пределах одной машины. Давайте сначала рассмотрим использование Rsync для синхронизации файла на локальном компьютере:

rsync -zvh file /tmp/backups/

Указав опцию --progress вы можете видеть сколько процентов уже скопировано, а сколько еще осталось:

rsync -zvh --progress file /tmp/backups/

Синхронизация папок на локальной машине

Синхронизация папок Rsync выполняется так же просто, как и файлов:

rsync -zvh /home/user/documents /tmp/backups/

Если вы хотите, чтобы все атрибуты файлов, такие, как дата изменения и создания сохранялись, необходимо использовать опцию -a:

rsync -azvh /home/user/documents /tmp/backups/

Синхронизация с удаленным сервером

Ненамного сложнее синхронизировать файлы с удаленным сервером. Скопируем локальную папку documents, на удаленный сервер:

rsync -avz /home/sergiy/tmp/ root@192.168.56.102:/home/

По умолчанию Rsync попытается использовать транспорт ssh. Если вы хотите использовать ранее созданный сервер rsync, нужно указать это явно:

rsync -avz /home/sergiy/tmp/ rsync://192.168.56.102:/share

Точно также можно синхронизировать файлы с Rsync из удаленного сервера:

rsync -avz root@192.168.56.102:/home/ /home/sergiy/tmp/

Адрес удаленного сервера записывается в таком формате:

имя_пользователя@адрес_машины/папка/на/удаленной_машине

Синхронизация файлов по SSH

Чтобы задать протокол подключения используется опция -e. При использовании SSH все передаваемые данные шифруются и передаются по защищенному каналу, таким образом, чтобы никто не мог их перехватить. Для использования SSH вам нужно знать пароль пользователя в системе.

Синхронизация файлов Rsync с удаленного сервера по SSH будет выглядеть вот так:

rsync -avzhe ssh root@192.168.56.102:/root/install.log /tmp/

Если вы используете другой порт для ssh, то здесь его можно указать:

rsync -avzhe "ssh -p 22" root@192.168.56.102:/root/install.log /tmp/

А теперь передадим данные на тот же сервер:

 rsync -avzhe ssh backup.tar root@192.168.0.101:/backups/

Просмотр прогресса при синхронизации

Для просмотра прогресса копирования файла с одной машины на другую используется опция progress:

rsync -avzhe ssh --progress /home/user/documents root@192.168.56.102:/root/documents

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

Опции include и exclude позволяют указать какие файлы нужно синхронизировать, а какие исключить. Опции работают не только с файлами но и с директориями. Например, скопируем все файлы, начинающиеся на букву R:

rsync -avze ssh --include 'R*' --exclude '*' root@192.168.56.102:/root/documents/ /root/documents

Удаление при синхронизации

Во время синхронизации можно удалять файлы, которых нет на машине откуда идет Rsync синхронизация, для этого используется опция --delete:

rsync -avz --delete root@192.168.56.102:/documents/ /tmp/documents/

Максимальный размер файлов

Вы можете указать максимальный размер файлов, которые нужно синхронизировать. Для этого используется опция --max-size. Например, будем синхронизировать только файлы меньше 200 килобайт:

rsync -avzhe ssh --max-size='200k' /user/documents/ root@192.168.56.102:/root/documents

Удаление исходных файлов

Есть возможность удалять исходные файлы после завершения синхронизации с удаленным сервером:

rsync --remove-source-files -zvh backup.tar /tmp/backups/

Таким образом, файл backup.tar будет удален после завершения копирования в папку /tmp/backups.

Режим симуляции rsync

Если вы новичок, и еще не использовали rsync, то возможно захотите посмотреть как отработает команда без применения реальных действий в файловой системе. Для этого есть опция dry-run. Команда только выведет все выполняемые действия в терминал, без выполнения реальных изменений:

rsync --dry-run --remove-source-files -zvh backup.tar /tmp/backups/

Ограничить скорость передачи

Вы можете ограничить использование пропускной способности сети с помощью опции --bwlimit:

rsync --bwlimit=100 -avzhe ssh /user/home/documents/ root@192.168.56.102:/root/documents/

Как я уже писал выше, Rsync синхронизирует только части файла, если вы хотите синхронизировать файл целиком используйте опцию -W:

rsync -zvhW backup.tar /tmp/backups/backup.tar
backup.tar

Автоматическая синхронизация папок rsync

Можно расписать автоматическую синхронизацию с помощью cron. Но в случае доступа к серверу по SSH необходимо будет создать ключ и загрузить его на сервер, чтобы аутентификация проходила без запроса пароля.

Создаем ключи:

ssh-keygen -t rsa

Загружаем публичный ключ на сервер к с которым собираемся синхронизироваться:

ssh-copy-id -i /home/sk/.ssh/id_rsa.pub sk@192.168.1.250

Теперь можем переходить к настройке расписания cron. Будем запускать синхронизацию каждый день:

crontab -e
00 05 * * * rsync -azvre ssh /home/user/Downloads/ 192.168.56.102:/share

Синхронизация каталогов будет выполняться каждый день в пять утра.

Заполните форму уже сегодня!
Для начала сотрудничества необходимо заполнить заявку или заказать обратный звонок. В ответ получите коммерческое предложение, которое будет содержать индивидуальную стратегию с учетом требований и поставленных задач
Работаем по будням с 9:00 до 18:00. Заявки, отправленные в выходные, обрабатываем в первый рабочий день до 12:00.
Спасибо, ваш запрос принят и будет обработан!
Эйч Маркетинг