- Rsync — копирование и синхронизация файлов с удаленным сервером
- Установка и основные параметр rsync
- Локальное копирование/синхронизация каталогов
- Настройка синхронизации с удаленным сервером
- Другие примеры использования rsync
- Резервное копирование в Linux с помощью rsync
- 🖧 Как ограничить / уменьшить скорость передачи rsync на Linux
- Использование trickle
Rsync — копирование и синхронизация файлов с удаленным сервером
Утилиту Rsync можно использовать для копирования и синхронизации файлов и папок с локального сервера Linux на удаленный и наоборот. Rsync позволяет копировать ваши данные между серверами внутри защищенного SSH соединения. Так же, rsync, поддерживает сжатие данных на лету, что повышает производительность системы.
Чтобы исключить потерю информации при отправке файлов, rsync сначала копирует всю передаваемую информацию во временный файл. Другая важная особенность rsync – файлы передаются в один поток, не создается отдельный поток для каждого файла (что вызывает проблему при передаче большого количества маленьких файлов в других утилитах).
В данной статье мы рассмотрим варианты использования rsync для синхронизации и копирования каталогов и файлов, и приведем примеры его расширенных настроек.
Установка и основные параметр rsync
Установка rsync не отличается от установки, любого другого пакета. В CentOS пакет rsync присутствует в базовом репозитории и устанавливается через yum (или dnf в CentOS 8):
Синтаксис команды выглядит следующим образом:
rsync опции источник приемник
В качестве источника и приемника можно указать локальную или удаленную директорию на другом сервере.
- -v – вывести подробную информацию о процессе
- -c – проверка контрольных сумм файлов
- -q – минимальная информация
- -a – режим архивирования
- -R – относительные пути
- -y – не перезаписывать более новые файлы
- -b – создание резервной копии
- -l – копировать симлинки
- -L – копировать содержимое ссылок
- -H – копировать жесткие ссылки
- -g – сохранять группу
- -p – сохранять права для файлов
- -t – сохранять время модификаций
- -x – работать только в этой ФС
- -e – использовать другой транспортный протокол (например, ssh)
- -z – сжимать файлы перед передачей
- -delete – удалять файлы которых нет в источнике
- -exclude – исключить файлы
- -recursive – перебирать директории рекурсивно
- -no-recursive – отключить рекурсию
- -progress – выводить прогресс передачи файлов
- -stat – показать статистику передачи
- -max-size – максимальный размер файла для передачи
- -bwlimit — ограничение скорости для передачи файлов
- -version – версия утилиты
Локальное копирование/синхронизация каталогов
Rsync можно использовать для копирования файлов между локальными директориями сервера. Если вам нужно скопировать файлы из одной директории в другую, выполните команду:
rsync /root/test/test.txt /root/temp/
В этом случае файл test.txt был просто скопирован в директорию /root/temp/
Можно добавить несколько опций для выполнения копирования. Например, чтобы перед выполнением копирования предварительно сжать файл, вывести подробную информацию и прогресс копирования файла, выполните:
rsync -vz --progress /root/test/test.txt /root/tуmp/
Мы можем использовать rsync для синхронизации содержимого локальных каталогов. Например, rsync удобно использовать, когда вам требуется скопировать файлы из рабочей директории, на хранилище, которое примонтировано к какому-то разделу.
rsync -zvr /root/.config /mnt/files/
Мы скопировали директорию /root/.config в директорию для резервных копий, опция -r позволила рекурсивно скопировать все вложенные директории и файлы.
Чтобы сохранить все атрибуты файлов при копировании, например, дату изменения и дату создания файлов, добавьте ключ -a:
rsync -zvra /root/.config /mnt/files/
Если вы хотите скопировать только измененные файлы, добавьте опцию -c:
rsync -zvrac /root/.config /mnt/files/
Я изменил только один файл и запустил команду. В результате в целевую директорию, был скопирован только измененный файл.
Настройка синхронизации с удаленным сервером
Чаще всего копирование/синхронизация rsync с удаленным сервером используется для резервного копирования или синхронизации конфигурации нод кластера. Можно выполнять автоматическую синхронизацию данных с рабочего сервера на резервный, и в случае проблем на продуктивном севере быстро все перевести на резервный. Это довольно удобный и простой в настройке вариант.
В современных версиях rsync протокол SSH используется для передачи файлов по-умолчанию. Однако вы можете использовать и демон rsyncd. Для этого клиент rsync должен быть установлен на удаленном компьютере, и его демон добавлен в автозагрузку:
Конфигурационный файл rsync — /etc/rsyncd.conf. В этом файле можно настроить параметры rsync и настройки для синхронизации для разных ресурсов.
Для синхронизации через демона rsync адрес удаленного сервера указывается так rsync://. Например:
rsync -av /var/www/site/backup.zip rsync://192.168.1.1/backup
Чтобы скопировать файл на удаленный сервер, используйте команду:
rsync -az /var/www/site/backup.zip root@192.168.1.1:/backup/
После запуска команды, удаленный сервер запросит пароль пользователя (если включена авторизация по паролю). Для автоматической авотризации нужно настроить SSH ключи.
Скопируем директорию с локального сервера на удаленный:
rsync -zvra /var/www/site root@192.168.1.1:/backup/
То есть, все тоже самое, что и с локальными директориями, только мы указываем адрес удаленного сервера.
Так же вы можете синхронизировать файлы и с удаленного сервера на локальный, команда для этого немного изменится:
rsync -zvra root@192.168.1.1:/var/www/site /backup
Для принудительного использования SSH протокола для копирования файлов, укажите это в вашей команде (для выбора транспортного протокола копирования файлов используется опция –e):
rsync -zvrae ssh root@192.168.1.1:/backup/ /backup
Если удаленный SSH сервер имеет отличный от стандартного порт, его так же можно указать:
rsync -zvrae "ssh -p 2222" root@192.168.1.1:/backup/ /backup
Другие примеры использования rsync
Если в рамках сессии синхронизации вы передаете много информации и важно ограничить скорость передачи, задайте это дополнительной опцией –bwlimit (указывается скорость в КБ/с):
rsync -zvra --bwlimit=100 /var/www/site root@192.168.1.1:/backup/
При передаче файлов на удаленный сервер, вы можете ограничить максимальный размер файлов, которые нужно скопировать. Например, вы хотите скопировать все файлы, кроме файлов размером более 1 Мб:
rsync -zvra --max-size='1m' /var/www/site root@192.168.1.1:/backup/
Если у вас на сервере нужна односторонняя синхронизация и после переноса файлов на удаленный сервер нужно удалить файлы с исходного сервера, воспользуйтесь опцией -remove-source-files:
rsync -zvra --remove-source-files --progress /var/www/site/package.zip root@192.168.1.1:/backup/
После выполнения команды, файл был скопирован на удаленный сервер и удален на источнике.
Так же очень удобный опции —include и —exclude, с помощью этих опций, можно делать исключения по копированию директорий или файлов:
rsync -zvra --exclude=administrator/ /var/www/site root@192.168.1.1:/backup/
В данном случае мы исключили директорию “administrator” при копировании на удаленный сервер.
rsync -zvra --include='*.php' --exclude='*' /var/www/site/administrator/ root@IP:/backup/
Добавлением опции —include мы смогли задать фильтр по файлам, скопировали только файлы с расширением php.
Резервное копирование в Linux с помощью rsync
В своей рабое я часть использую rsync для автоматических задач резервного копирования в Linux. Можно написать простые bash скрипты или просто добавить команду rsync в cron и выполнять по расписанию.
Например, можно добавить в cron команду:
01 30 * * * rsync -zvra root@192.168.1.1:/backup/ /backup
В результате каждый день в 1:30 ночи, будет выполняться синхронизация каталогов локального и удаленного серверов.
Стоит учесть, что для выполнения команды rsync на удаленном сервер через cron, желательно настроить авторизацию серверов по SSH ключу. Примеры скриптов для бэкапа, мы приводили в статье «Скрипты для бэкапа файлов из Linux в облако», там как раз используется rsync для копирования файлов в подключенные облачные хранилища.
🖧 Как ограничить / уменьшить скорость передачи rsync на Linux
Мануал
Если вы используете утилиту rsync для синхронизации ваших резервных копий между серверами или локальным компьютером, возможно, вы захотите запретить скрипту использовать слишком большую полосу пропускной способности сети.
Смысл ограничения пропускной способности заключается в том, чтобы ваши скрипты резервного копирования не засоряли сетевое соединение.
Естественно, ограничение пропускной способности, которую используют ваши резервные копии, заставит их работать медленнее.
Вот обычная команда rsync:
$ rsync –avz -e ‘ssh’ /path/to/source user@remotehost:/path/to/dest/
$ rsync –bwlimit=[kb/second] –avz -e 'ssh' /path/to/source user@remotehost:/path/to/dest/
$ rsync –bwlimit=10000 –avz -e ‘ssh’ /path/to/source user@remotehost:/path/to/dest/
Вот пример из реального мира:
rsync –bwlimit=10000 –avz -e 'ssh' /backup/ root@192.168.0.51:/backup/
Использование trickle
Существует альтернатива опции -bwlimit.
Вы также можете использовать команду «trickle» для ограничения пропускной способности любого приложения, которое вы запускаете.
Синтаксис команды trickle:
$ trickle -u|-d [uploadLimit|downloadLimit] [app]
- -u uploadLimit -> ограничивает полосу загрузки
- -d downloadLimit -> ограничивает полосу скачивания
- app -> это приложение, для которого вы хотите ограничить пропускную способность, например Rsync .
Таким образом, в нашем случае мы ограничим использование полосы пропускания команды rsync до 10000 КБ / с, используя следующие команды:
$ trickle -s -u 10000 -d 10000 rsync –avz -e 'ssh' /backup/ root@192.168.0.51:/backup/
Пожалуйста, не спамьте и никого не оскорбляйте. Это поле для комментариев, а не спамбокс. Рекламные ссылки не индексируются!
- Аудит ИБ (49)
- Вакансии (12)
- Закрытие уязвимостей (105)
- Книги (27)
- Мануал (2 305)
- Медиа (66)
- Мероприятия (39)
- Мошенники (23)
- Обзоры (820)
- Обход запретов (34)
- Опросы (3)
- Скрипты (114)
- Статьи (352)
- Философия (114)
- Юмор (18)
Anything in here will be replaced on browsers that support the canvas element
Что такое 404 Frame? Большинство инструментов для взлома веб-сайта находятся в 404 Frame. Итак, что же представляют собой команды? Вы можете отдавать команды, используя повседневный разговорный язык, поскольку разработчики не хотели выбирать очень сложную систему команд. Команды Команды “help” / “commands” показывают все команды и их назначение. Команда “set target” – это команда, которая должна […]
В этой заметке вы узнаете о блокировке IP-адресов в Nginx. Это позволяет контролировать доступ к серверу. Nginx является одним из лучших веб-сервисов на сегодняшний день. Скорость обработки запросов делает его очень популярным среди системных администраторов. Кроме того, он обладает завидной гибкостью, что позволяет использовать его во многих ситуациях. Наступает момент, когда необходимо ограничить доступ к […]
Знаете ли вы, что выполняется в ваших контейнерах? Проведите аудит своих образов, чтобы исключить пакеты, которые делают вас уязвимыми для эксплуатации Насколько хорошо вы знаете базовые образы контейнеров, в которых работают ваши службы и инструменты? Этот вопрос часто игнорируется, поскольку мы очень доверяем им. Однако для обеспечения безопасности рабочих нагрузок и базовой инфраструктуры необходимо ответить […]
Одной из важнейших задач администратора является обеспечение обновления системы и всех доступных пакетов до последних версий. Даже после добавления нод в кластер Kubernetes нам все равно необходимо управлять обновлениями. В большинстве случаев после получения обновлений (например, обновлений ядра, системного обслуживания или аппаратных изменений) необходимо перезагрузить хост, чтобы изменения были применены. Для Kubernetes это может быть […]
Является ли запуск сервера NFS в кластере Kubernetes хорошей идеей или это ворота для хакеров Одним из многочисленных преимуществ сетевой файловой системы является ее способность выполнять многократное чтение-запись. И как и все в наши дни, NFS – это просто еще одна служба, которую можно запустить в своем кластере Kubernetes. Однако является ли сервер NFS подходящей […]