- Rsync: копирование и синхронизация файлов с удаленным сервером
- Установка и основные параметр rsync
- Rsync: локальное копирование/синхронизация каталогов
- Rsync: настройка синхронизации с удаленным сервером
- Другие примеры использования rsync
- Резервное копирование в Linux с помощью rsync
- Backup and Restore Your Linux System with rsync
- Video Tutorial
- Making the backup with rsync
- Restore the backup with rsync
- Conclusion
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 для копирования файлов в подключенные облачные хранилища.
Предыдущая статья Следующая статья
Backup and Restore Your Linux System with rsync
Rsync (Remote Sync) is a popular and powerful tool used to copy and synchronize files and directories between remote or local Linux/Unix systems. With the help of rsync, we can easily copy/synchronize data between local and remote directories, across different drives and networks.
In this tutorial, I will show you how to make a backup with rsync using the Linux terminal. If you prefer graphical programs, you can use rsync with graphical interface too.
Video Tutorial
Making the backup with rsync
To make this tutorial, I will use Arch Linux in a virtual machine built with VirtualBox. To simulate an external hard drive, I will connect a USB flash drive where the backup will be stored and then restored. I recommend you do the same to test your backup. This will give you the confidence to know that your backup works because an untested backup is not a backup.
For this case we will use this entire command:
sudo rsync -aAXv --delete --dry-run --exclude=/dev/* --exclude=/proc/* --exclude=/sys/* --exclude=/tmp/* --exclude=/run/* --exclude=/mnt/* --exclude=/media/* --exclude="swapfile" --exclude="lost+found" --exclude=".cache" --exclude="Downloads" --exclude=".VirtualBoxVMs"--exclude=".ecryptfs" / /run/media/alu/ALU/
To make a backup with rsync, we usually use the command line. I know that not everyone is confident with the command line tools, but you will realize that the process is not that complicated and you can also back up your system using the command line.
We now proceed to explain what this command means:
sudo — to execute the command as a superuser. Mandatory use.
rsync — is the program itself to use.
-A — preserve Access Control List.
-X — preserve extended attributes.
Basically, these three options mean to preserve all the attributes of your files. Owner attributes or permissions will not be modified during the backup process.
-v — It will show the progress of the backup.
—delete — this option allows you to make an incremental backup. That means, if it is not your first backup, it will backup only the difference between your source and the destination. So, it will backup only new files and modified files and it will also delete all the files in the backup which were deleted on your system. Be careful with this option.
—dry-run — This option simulates the backup. Useful to test its execution.
—exclude — Excludes folders and files from backup. I typed exclude as a separate option for every directory. You can also use it this way —exclude= . But make sure you change your working directory to root ( cd / ) before you run rsync, otherwise the joint exclude option may not work.
The excluded folders depend directly on each of us, however, the /dev/, /proc/, /proc/ /sys/ /tmp/ /run/ /mnt/ and /media folders are not important to backup because rsyn will not copy their content. /mnt/ it is vital to exclude them if we connect a USB memory.
/run/media/alu/ALU — This is where you what to backup. I recommend to enrypt the destination, to make your data safe.
We press enter, the command will execute in a simulation mode (because of the —dry-run option) This way we test it to make sure everything is okay. When you’re sure that everything is performed as you want, you remove —dry-run from the command and run it again.
Note: It is recommended that the backup drive has a Linux compatible file system as ext4.
Restore the backup with rsync
To restore the backup we have made, we are going to boot from a live ISO. Since we are working with Arch Linux, then the iso image must be from Arch Linux. Next, we must mount our USB flash drive.
Once logged in from the live image, we must create two folders, one for the system on the hard disk and the other where the backup created will be mounted:
Next, we need to check the names of our devices:
Then, we must mount the file system and the backup on the USB flash device:
mount /dev/sda1 /mnt/system mount /dev/sdb1 /mnt/usb
Finally, we proceed to perform the restoration of our backup. For this we run:
rsync -aAXv --delete --exclude="lost+found" /mnt/usb/ /mnt/system/
By running this command, we restore the backup of our system.
Conclusion
Rsync is a powerful tool that can be used from the command line, with multiple options that adapt to any need. You can of course use backup programs with graphical interface. There are also some really good non-open sources graphical backup programs.
Have you already done your backup? Let me know about your experience with rsync.
Please share this article through your social networks.
Average Linux UserFollow I am the founder of the Average Linux User project, which is a hobby I work on at night. During the day I am a scientist who uses computers to analyze genetic data.