Rsync linux from windows

Rsync: копирование и синхронизация файлов с удаленным сервером

Утилиту Rsync можно использовать для копирования и синхронизации файлов и папок с локального сервера Linux на удаленный и наоборот. Rsync позволяет копировать ваши данные между серверами внутри защищенного SSH соединения. Так же, rsync, поддерживает сжатие данных на лету, что повышает производительность системы.

Чтобы исключить потерю информации при отправке файлов, rsync сначала копирует всю передаваемую информацию во временный файл. Другая важная особенность rsync – файлы передаются в один поток, не создается отдельный поток для каждого файла (что вызывает проблему при передаче большого количества маленьких файлов в других утилитах).

В данной статье мы рассмотрим варианты использования rsync для синхронизации и копирования каталогов и файлов, и приведем примеры его расширенных настроек.

Установка и основные параметр rsync

Установка rsync не отличается от установки, любого другого пакета. В CentOS пакет rsync присутствует в базовом репозитории и устанавливается через yum (или dnf в CentOS 8):

# yum install rsync -y

Синтаксис команды выглядит следующим образом:

# 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 можно использовать для копирования файлов между локальными директориями сервера. Если вам нужно скопировать файлы из одной директории в другую, выполните команду:

# 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/

Я изменил только один файл и запустил команду. В результате в целевую директорию, был скопирован только измененный файл.

Читайте также:  Windows инсталятор для себя

Очень удобно использовать такую опцию, если файлы меняются не часто. Таким образом вы экономите время на копирование/синхронизацию директории.

Чтобы не захламлять директорию для бэкапов, можно добавить опцию —delete, это позволит сравнить файлы с источником и в случае присутствия файла в целевой директории и отсутствие его в исходной директории, удалить его автоматически. Но призываю использовать данную опцию с осторожностью, так как если вы настроите копирование директории по крону, в случае сбоя или вмешательства из вне в рабочую директорию, с последующим удалением рабочих файлов, у вас затрется информация и в бэкапах, что не позволит вам восстановить ваши данные. Пример:

# rsync -zvrac —delete /var/www/site /backup/

Rsync: настройка синхронизации с удаленным сервером

Чаще всего копирование/синхронизация rsync с удаленным сервером используется для резервного копирования или синхронизации конфигурации нод кластера. Можно выполнять автоматическую синхронизацию данных с рабочего сервера на резервный, и в случае проблем на продуктивном севере быстро все перевести на резервный. Это довольно удобный и простой в настройке вариант.

В современных версиях rsync протокол SSH используется для передачи файлов по-умолчанию. Однако вы можете использовать и демон rsyncd. Для этого клиент rsync должен быть установлен на удаленном компьютере, и его демон добавлен в автозагрузку:

# systemctl enable rsyncd

Конфигурационный файл 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 root@IP:/backup/

Где IP, это адрес удаленного сервера. После запуска команды, удаленный сервер запросит пароль пользователя (если включена авторизация по паролю). Для автоматической авотризации нужно настроить SSH ключи.

Скопируем директорию с локального сервера на удаленный:

# rsync -zvra /var/www/site root@IP:/backup/

То есть, все тоже самое, что и с локальными директориями, только мы указываем адрес удаленного сервера.

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

# rsync -zvra root@IP:/backup/ /backup

Для принудительного использования SSH протокола для копирования файлов, укажите это в вашей команде (для выбора транспортного протокола копирования файлов используется опция –e):

# rsync -zvrae ssh root@IP:/backup/ /backup

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

# rsync -zvrae «ssh -p 2222» root@IP:/backup/ /backup

Другие примеры использования rsync

Если в рамках сессии синхронизации вы передаете много информации и важно ограничить скорость передачи, задайте это дополнительной опцией –bwlimit (указывается скорость в КБ/с):

# rsync -zvra —bwlimit=100 /var/www/site root@IP:/backup/

При передаче файлов на удаленный сервер, вы можете ограничить максимальный размер файлов, которые нужно скопировать. Например, вы хотите скопировать все файлы, кроме файлов размером более 1 Мб:

# rsync -zvra —max-size=’1m’ /var/www/site root@IP:/backup/

Если у вас на сервере нужна односторонняя синхронизация и после переноса файлов на удаленный сервер нужно удалить файлы с исходного сервера, воспользуйтесь опцией —-remove-source-files:

# rsync -zvra —remove-source-files —progress /var/www/site/package.zip root@IP:/backup/

После выполнения команды, файл был скопирован на удаленный сервер и удален на источнике:

Так же очень удобный опции —include и —exclude, с помощью этих опций, можно делать исключения по копированию директорий или файлов:

# rsync -zvra —exclude=administrator/ /var/www/site root@IP:/backup/

В данном случае мы исключили директорию “administrator” при копировании на удаленный сервер.

# rsync -zvra —include=’*.php’ —exclude=’*’ /var/www/site/administrator/ root@IP:/backup/

Добавлением опции —include мы смогли задать фильтр по файлам, скопировали только файлы с расширением php.

Резервное копирование в Linux с помощью rsync

В своей рабое я часть использую rsync для автоматических задач резервного копирования в Linux. Можно написать простые bash скрипты или просто добавить команду rsync в cron и выполнять по расписанию.

Читайте также:  Драйвер для pc wireless gaming receiver xbox 360 windows

Например, можно добавить в cron команду:

01 30 * * * rsync -zvra root@IP:/backup/ /backup

В резульатате каждый день в 1-30 ночи, будет выполняться синхронизация каталогов локального и удаленного серверов.

Стоит учесть, что для выполнения команды rsync на удаленном сервер через cron, желательно настроить авторизацию серверов по SSH ключу. Примеры скриптов для бэкапа, мы приводили в статье «Скрипты для бэкапа файлов из Linux в облако», там как раз используется rsync для копирования файлов в подключенные облачные хранилища.

Экспериментальный блог

Когда-то создал ради пробы. Потом решил так и оставить.

Официальная возможность получить лицензионный софт бесплатно.

Это не реклама!

вторник, 6 декабря 2016 г.

rsync: копирование с Windows на Linux

Решил я всё же добить возможность копирования rsync-ом из-под винды на линукс. Не, ну в самом деле, что за издевательство — такой удобный способ и недоступен!

За основу взял DeltaCopy — cygwin-порт самого rsync и нескольких дополнительных утилит плюс графическая обвязка как для клиента, так и для сервера. GUI-вая часть меня пока не интересует, а вот rsync/win решил испытать. Сразу уточню: есть и другие порты, но их я не проверял и не пробовал.

Особенности

Задавать имя входного каталога на системе с windows лучше в формате /cygdrive/БУКВА/путь , где «буква» — буква диска без двоеточия, например: /cygrive/c/windows .

Windows имеет дурную привычку хранить имена файлов в разных кодировках — и юникод и 1251 и 866, в общем, полный бардак. Юниксы давно перебрались на utf-8 и не заставляют своих пользователей париться по этому поводу.

Rsync из DeltaCopy не поддерживает копирование виндовых ACL и есть какие-то странности с копированием других расширенных атрибутов. Но в моем конкретном случае это не критично, потому не заморачивался уточнениями.

Грабли

Первые грабли, на которые я наступил, это трансляция имён файлов, написанных не латиницей. Порылся в интернетах, где мне напомнили, что есть параметр —iconv=код_из,код_в , позволяющий указать характеристики трансляции
«код_из» — из какой кодировки преобразуем, «код_в» — в какую. Для копирования с windows на linux получаем —iconv=cp866,utf-8 .

Вторая грабля — неожиданное прекращение копирования при указании параметра iconv. Сообщение на отправляющей стороне было совсем невразумительным. А вот в протоколе на самом сервере ситуация немного прояснилась: » rsync: The server is configured to refuse —iconv «. Вот те на! Что за нафиг такой?
Вылечилось, опять же, по советам из этих ваших интернетов, добавлением строки charset=utf-8 в /etc/rsyncd.conf .

Всякое разное

Для большей безопасности, я создал в конфиге rsync-а несколько «модулей» — секций, описывающих разные места для копирования и доступы к ним. Пример такого модуля:

[media]
path = /media
use chroot = yes
lock file = /var/lock/media-restore.lock
read only = no
timeout = 600
auth users = восстановитель
uid=root

[media] — это имя модуля. Оно указывается в команде отправки:
. пользователь@сервер_rsync::media/путь
Пользователи вместе с их паролями задаются в файле, описанном в конфиге параметром
secrets file = /etc/rsyncd.secrets
Формат файла: каждый пользователь на отдельной строке в виде логин:пароль , например » восстановитель:пароль_восстановления «. В конце файла желательна пустая строка.

path — путь в файловой системе сервера
use chroot — крайне желательно во избежание злоупотреблений с путями типа модуль/путь/../../запретная_зона
lock file — служебный файл, создаваемый при обработке операций в этом модуле.
auth users — можно задать не только глобальный список разрешенных пользователей, но и для каждого модуля указывать отдельные разрешения. В примере я не хочу, чтобы к модулю [media] получил доступ какой-нибудь другой пользователь
uid — идентификатор пользователя, от имени которого выполняются операции. Сам демон rsync обычно запускается от рута, поэтому проблем с мимикрированием быть не должно. Дополнительно см. описание параметра —super .

How to use rsync from Windows PC to remote Linux server?

How do I use the rsync command from a local Windows 7 machine to a remote Linux server?

What software is needed on the Windows 7 machine to use rsync ?

The remote Linux server is using Amazon’s Linux AMI. The command rsync is already enabled on the machine and I can edit any needed access to the machine.

This is for the purposes of setting up a web server on the remote machine and the editing on my local machine and keeping the files in sync.

I do not want two-way access between the machines, I am only going to be editing files on my local machine and keeping them updated on the remote machine.

UPDATE:

I installed cygwin on my Windows 7 machine and installed the rsync package. Can someone provide the steps to set up the connection from the Windows 7 machine to the Linux server remotely?

Say I want to have a folder called C:\www on my Windows machine and keep it updating \var\www on my remote machine, how do I do that? It’s not a backup per se, it updates the files that I edit with my local computer.

7 Answers 7

I have MinGW (also known as ‘Git Bash’) on Windows 7, and a batch file that runs rsync to back up files on an external drive on a remote linux computer. Here’s the batch file ( my_rsync_file.bat )

Here’s a bit of line-by-line explanation:

REM Changing directory. (assuming we are in G:/My Documents/My Various Things)

This just emits a message to remind me what’s going on.

This changes directory one level up from where the batch file is (to ‘My Documents’). The batch file is in an external drive on my Windows computer. I want to sync all of the ‘My Documents’ folder on this external drive with a folder of the same name on an external drive on my remote linux computer.

REM starting rsync.

Just prints another message.

bash -c «rsync -avz -P —stats —timeout=60 —exclude Downloads . my_remote_linux_computer@128.95.155.200:/media/my_remote_linux_computer/LaCie/My\\ Documents»

bash : starts MinGW which has a built-in rsync library
-c : not sure what this does
rsync : library to sync files, comes with MinGW
-avzh : a-Archive, v-Verbose, z-Compress, h-Human-readable, these are the common options (more: http://linux.die.net/man/1/rsync)
-P : show progress for big files so I know if it’s frozen or not
—stats : show summary of how many files and bytes transferred at the end
—timeout=60 : kill it after 60 seconds if it gets stuck
—exclude omit files/directories from sync, in this case I exclude a directory called ‘Downloads’
. : indicates to sync all the contents of ‘My Documents’ (expect the specified thing to exclude in the line above)
my_remote_linux_computer : name of my remote linux computer (not it’s actual name 😉
@128.95.155.200 : the IP addres of my remote linux computer, from https://www.whatismyip.com/ (not my actual IP address 🙂
/media/my_remote_linux_computer/LaCie/My\\ Documents : the path to the directory on my remote linux computer that I want to receive the files. It’s an external drive.

Note that the space in «My Documents» is escaped with two backslashes, and the full name and directory of the remote destination is surrounded by double quote marks.

When I start double-click on the bat file I’m prompted for the password for my remote linux computer. When it completes I get some summary output and am prompted to press any key to close.

Читайте также:  Передача файлов mac windows
Оцените статью