Утилита 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
Синхронизация каталогов будет выполняться каждый день в пять утра.