Как инкрементно копировать (синхронизировать) папки  с Linux на Windows?



Читатель сайта описывает свою любопытную проблему:

Добрый день! Возникла проблема: Никак не могу скопировать файлы с сервера на локальный компьютер под Windows. Пробовал так: Нахожусь на сервере, в папке с сайтами. Пишу такую команду: rsync -czavP сайт_1 localhost:Z:/home/сайт_1/ . Либо пишет, что пароль неправильный, либо запрашивает пароль к локальной машине, которого у меня на самом деле нет. В чем беда? Буду благодарен за помощь)Дмитрий

Что такое rsync?


Во-первых, rsync это утилита использующася только в Linux-системах. Для того, чтобы она работала в windows, её нужно устрановить там и настроить, например через cygwin. Во-вторых, почему вы пытаетесь отправлять файлы на localhost ? Localhost — это внутренний адрес-петля 127.0.0.1. При попытке отправить файлы туда, находясь в linux, вы пытаетесь подключиться с сервера на  самого себя, т.е на сам сервер.

Как сделать синхронизацию папки c Linux на Windows?

Для того чтобы отправить файлы в windows c помощью rsync самый лучший способ — это смонтировать файловую систему локального windows-компьютера на сервер через ssh-туннель по smb. Тогда не потребуется устанавливать rsync на сам Windows и это решает проблему с доступом между сервером и домашним компьютером.








Для этого нужно подключаясь к серверу с локального компьютера сделать проброс R-типа. Пробрасывать нужно localhost:445. Затем, нужно чтобы в системе на сервере был установлен пакет cifs-utils. Расшариваете на локальном компьютере нужную папку, затем создаете точку монтирования на сервере, и монтируете туда уже c localhost. Кстати, на нашем сайте есть генератор-скриптов для бэкапов сайта, и в нем реализована генерация такого скрипта.

Пример скрипта для синхронизации папок

Давайте посмотрим на примере такого скрипта подобное копирование:



start /b d:plink.exe -pw rootpassword root@example.com -N -R 445:localhost:445
d:plink.exe -pw rootpassword root@example.com -C "mkdir /tmp/win&&mount -t cifs -o rw,nounix,soft,intr,username=user,password=windowspass //localhost/backup /tmp/win"
d:plink.exe -pw rootpassword root@example.com -C "rsync -a --no-p --no-o --no-o --no-t /var/www/example.com/ /tmp/win && umount /tmp/win&&rmdir /tmp/win"
taskkill /f /im plink.exe


Так он генерируется нашим сервисом для бэкап-скриптов.

В первой строке запускаем в фоне программу plink.exe (консольный ssh-клиент для Windows). Подключаемся на удаленный сервер example.com и туннелируем порт 445 с локальной машины на lo-интерфейс сервера. После подключения по ssh сервер будет «думать», что у него на localhost:445 есть windows-шара или запущен smb, сервер.

start /b d:plink.exe -pw rootpassword root@example.com -N -R 445:localhost:445

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

d:plink.exe -pw rootpassword root@example.com -C "mkdir /tmp/win&&mount -t cifs -o rw,nounix,soft,intr,username=user,password=windowspass //localhost/backup /tmp/win"

Ну и здесь мы выполняем непосредственно синхронизацию папки сайта в эту папку. Все файлы отправляются на локальный компьютер, за это отвечает монтирование шары и туннель. Команде rsync передаем опции не сохранять атрибуты файлов — владельца и права, поскольку windows всё равно ничего не знает о таких атрибутах и не умеет с ними работать. По окончании синхронизации отмонтируем локальную шару от сервера.








d:plink.exe -pw rootpassword root@example.com -C "rsync -a --no-p --no-o --no-o --no-t /var/www/example.com/ /tmp/win && umount /tmp/win&&rmdir /tmp/win"

Здесь мы «убиваем» SSH-cессию, запущенную в фоне в самом начале.

taskkill /f /im plink.exe

Если вы поймете как это работает, то сможете аналогично использовать это на своих серверах. Или просто сделайте скрипт через наш сервис (вкладка rsync для бэкапа файлов) со своими данными и запустите его. Перед этим установите cifs-utils на сервер.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *