- Keeping Linux files and directories in sync with rsync
- Great Linux resources
- Source and targets
- Rsync: копирование и синхронизация файлов с удаленным сервером
- Установка и основные параметр rsync
- Rsync: локальное копирование/синхронизация каталогов
- Rsync: настройка синхронизации с удаленным сервером
- Другие примеры использования rsync
- Резервное копирование в Linux с помощью rsync
Keeping Linux files and directories in sync with rsync
Admins (or normal users) often need to back up files or keep them in sync between multiple places (including local and remote) without transferring and overwrite all files on the target every time. One of the most useful tools in a sysadmin’s belt for this kind of task is rsync .
The rsync tool can recursively navigate a directory structure and update a second location with any new/changed/removed files. It checks to see if files exist in the destination before sending them, saving bandwidth and time for everything it skips. Also, rsync provides the ability to synchronize a directory structure (or even a single file) with another destination, local or remote. To accomplish this efficiently, by default, it will check the modification times of files. It can also do a quick hash check of files on the source and destination to determine whether or not it needs to transfer a new copy, possibly saving significant time and bandwidth.
Since it comes packaged with most Linux distributions by default, it should be easy to get started. This is also the case with macOS, *BSDs, and other Unix-like operating systems. Working with rsync is easy and can be used on the command line, in scripts, and some tools wrap it in a nice UI for managing tasks.
Great Linux resources
On the command line, rsync is generally invoked using a handful of parameters to define how it should behave since it’s a flexible tool. In its simplest form, rsync can be told to ensure that a file in one location should be the same in a second location in a filesystem.
It’s ordinarily desirable to pass rsync a few parameters to ensure things behave the way a human would expect them to. Passing parameters such as -a for “archive” is quite common as it is a “meta-parameter” that automatically invokes a handful of others for you. The -a is equivalent to -rlptgoD , which breaks down to:
- -r : Recurse through directories (as opposed to only working on files in the current directory)
- -l : Copy symlinks as new symlinks
- -p : Preserve permissions
- -t : Preserve modification times
- -g : Preserve group ownership
- -o : Preserve user ownership (which is restricted to only superusers when dealing with other user’s files)
- -D : Copy device files
Often this works how the user wants and no significant changes are necessary. But, some of those might be contrary to what a user needs, so breaking it out into the specific functionality might be the right answer.
Other noteworthy options include:
- -n : Dry run the command without transferring files
- —list-only : Only show the list of files that rsync would transfer
- -P : Show progress per file
- -v : Show progress overall, outputting information about each file as it completes it
- -u : Skip updating target files if they are newer than the source
- -q : Quiet mode. Useful for inclusion in scripting when the terminal output is not required
- -c : Use a checksum value to determine which files to skip, rather than the modification time and size
- —existing : Only update files, but don’t create new ones that are missing
- —files-from=FILE : Read list source files from a text file
- —exclude=PATTERN : Use PATTERN to exclude files from the sync
- —exclude-from=FILE : Same as above, but read from a file
- —include=PATTERN : Also used to negate the exclusion rules
- —include-from=FILE : Same as above, but read from a file
My personal default set of parameters for rsync end up being -avuP (archive, verbose output, update only new files, and show the progress of the work being done).
Source and targets
The source and target for the sync are files and directories. Also, rsync provides the functionality to interact with remote systems over SSH, which keeps the user from needing to set up network shares to be able to sync files from one place to another. This means you can easily script rsync jobs after configuring SSH keys on both ends, removing the need to manually login in for remote file sync.
Rsync: копирование и синхронизация файлов с удаленным сервером
21.04.2020
VyacheslavK
CentOS, Linux
комментариев 5
Утилиту Rsync можно использовать для копирования и синхронизации файлов и папок с локального сервера Linux на удаленный и наоборот. Rsync позволяет копировать ваши данные между серверами внутри защищенного SSH соединения. Так же, rsync, поддерживает сжатие данных на лету, что повышает производительность системы.
Чтобы исключить потерю информации при отправке файлов, rsync сначала копирует всю передаваемую информацию во временный файл. Другая важная особенность rsync – файлы передаются в один поток, не создается отдельный поток для каждого файла (что вызывает проблему при передаче большого количества маленьких файлов в других утилитах).
В данной статье мы рассмотрим варианты использования rsync для синхронизации и копирования каталогов и файлов, и приведем примеры его расширенных настроек.
Установка и основные параметр rsync
Установка rsync не отличается от установки, любого другого пакета. В CentOS пакет rsync присутствует в базовом репозитории и устанавливается через yum (или dnf в CentOS 8):
Синтаксис команды выглядит следующим образом:
# rsync опции источник приемник
В качестве источника и приемника можно указать локальную или удаленную директорию на другом сервере.
- -v – вывести подробную информацию о процессе
- -c – проверка контрольных сумм файлов
- -q – минимальная информация
Rsync: локальное копирование/синхронизация каталогов
Rsync можно использовать для копирования файлов между локальными директориями сервера. Если вам нужно скопировать файлы из одной директории в другую, выполните команду:
# rsync /var/www/html/package.zip /var/www/tmp/
В этом случае файл package.zip был просто скопирован в директорию /var/www/tmp/.
Можно добавить несколько опций для выполнения копирования. Например, чтобы перед выполнением копирования предварительно сжать файл, вывести подробную информацию и прогресс копирования файла, выполните:
# rsync -vz —progress /var/www/html/package.zip /var/www/tmp/
Вы можете использовать rsync для синхронизации содержимого локальных каталогов. Например, rsync удобно использовать, когда вам требуется скопировать файлы из рабочей директории, на хранилище, которое примонтировано к какому-то разделу. Несколько примеров команд:
# rsync -zvr /var/www/site /backup/
Мы скопировали директорию /var/www/site в директорию для резервных копий, опция -r позволила рекурсивно скопировать все вложенные директории и файлы.
Чтобы сохранить все атрибуты файлов при копировании, например, дату изменения и дату создания файлов, добавьте ключ -a:
# rsync -zvra /var/www/site /backup/
Если вы хотите скопировать только измененные файлы, добавьте опцию -c:
# rsync -zvrac /var/www/site /backup/
Я изменил только один файл и запустил команду. В результате в целевую директорию, был скопирован только измененный файл.
Очень удобно использовать такую опцию, если файлы меняются не часто. Таким образом вы экономите время на копирование/синхронизацию директории.
Чтобы не захламлять директорию для бэкапов, можно добавить опцию —delete, это позволит сравнить файлы с источником и в случае присутствия файла в целевой директории и отсутствие его в исходной директории, удалить его автоматически. Но призываю использовать данную опцию с осторожностью, так как если вы настроите копирование директории по крону, в случае сбоя или вмешательства из вне в рабочую директорию, с последующим удалением рабочих файлов, у вас затрется информация и в бэкапах, что не позволит вам восстановить ваши данные. Пример:
# rsync -zvrac —delete /var/www/site /backup/
Rsync: настройка синхронизации с удаленным сервером
Чаще всего копирование/синхронизация rsync с удаленным сервером используется для резервного копирования или синхронизации конфигурации нод кластера. Можно выполнять автоматическую синхронизацию данных с рабочего сервера на резервный, и в случае проблем на продуктивном севере быстро все перевести на резервный. Это довольно удобный и простой в настройке вариант.
В современных версиях rsync протокол SSH используется для передачи файлов по-умолчанию. Однако вы можете использовать и демон rsyncd. Для этого клиент rsync должен быть установлен на удаленном компьютере, и его демон добавлен в автозагрузку:
Конфигурационный файл rsync — /etc/rsyncd.conf. В этом файле можно настроить параметры rsync и настройки для синхронизации для разных ресурсов.
Для синхронизации через демона rsync адрес удаленного сервера указывается так rsync://. Например:
# rsync -av /var/www/site/package.zip rsync://192.168.1.32/backup
Чтобы скопировать файл на удаленный сервер, используйте команду:
# rsync -az /var/www/site/package.zip [email protected]:/backup/
Где IP, это адрес удаленного сервера. После запуска команды, удаленный сервер запросит пароль пользователя (если включена авторизация по паролю). Для автоматической авотризации нужно настроить SSH ключи.
Скопируем директорию с локального сервера на удаленный:
# rsync -zvra /var/www/site [email protected]:/backup/
То есть, все тоже самое, что и с локальными директориями, только мы указываем адрес удаленного сервера.
Так же вы можете синхронизировать файлы и с удаленного сервера на локальный, команда для этого немного изменится:
Для принудительного использования SSH протокола для копирования файлов, укажите это в вашей команде (для выбора транспортного протокола копирования файлов используется опция –e):
# rsync -zvrae ssh [email protected]:/backup/ /backup
Если удаленный SSH сервер имеет отличный от стандартного порт, его так же можно указать:
# rsync -zvrae «ssh -p 2222» [email protected]:/backup/ /backup
Другие примеры использования rsync
Если в рамках сессии синхронизации вы передаете много информации и важно ограничить скорость передачи, задайте это дополнительной опцией –bwlimit (указывается скорость в КБ/с):
# rsync -zvra —bwlimit=100 /var/www/site [email protected]:/backup/
При передаче файлов на удаленный сервер, вы можете ограничить максимальный размер файлов, которые нужно скопировать. Например, вы хотите скопировать все файлы, кроме файлов размером более 1 Мб:
# rsync -zvra —max-size=’1m’ /var/www/site [email protected]:/backup/
Если у вас на сервере нужна односторонняя синхронизация и после переноса файлов на удаленный сервер нужно удалить файлы с исходного сервера, воспользуйтесь опцией —-remove-source-files:
# rsync -zvra —remove-source-files —progress /var/www/site/package.zip [email protected]:/backup/
После выполнения команды, файл был скопирован на удаленный сервер и удален на источнике:
Так же очень удобный опции —include и —exclude, с помощью этих опций, можно делать исключения по копированию директорий или файлов:
# rsync -zvra —exclude=administrator/ /var/www/site [email protected]:/backup/
В данном случае мы исключили директорию “administrator” при копировании на удаленный сервер.
# rsync -zvra —include=’*.php’ —exclude=’*’ /var/www/site/administrator/ [email protected]:/backup/
Добавлением опции —include мы смогли задать фильтр по файлам, скопировали только файлы с расширением php.
Резервное копирование в Linux с помощью rsync
В своей рабое я часть использую rsync для автоматических задач резервного копирования в Linux. Можно написать простые bash скрипты или просто добавить команду rsync в cron и выполнять по расписанию.
Например, можно добавить в cron команду:
01 30 * * * rsync -zvra [email protected]:/backup/ /backup
В резульатате каждый день в 1-30 ночи, будет выполняться синхронизация каталогов локального и удаленного серверов.
Стоит учесть, что для выполнения команды rsync на удаленном сервер через cron, желательно настроить авторизацию серверов по SSH ключу. Примеры скриптов для бэкапа, мы приводили в статье «Скрипты для бэкапа файлов из Linux в облако», там как раз используется rsync для копирования файлов в подключенные облачные хранилища.
Предыдущая статья Следующая статья