Назад | Перейти на главную страницу

rsync-сервер с использованием подсистемы Windows для Linux

Возможно ли использование подсистемы Windows 10 Windows для Linux (WSL), чтобы сервер rsync работал на компьютере с Windows?

У нас есть система linux rsync, которая опрашивает окна Windows, в которых в настоящее время работает DeltaCopy, но иногда у нас возникают странные проблемы. Надеясь, что «встроенный» WSL rsync может улучшить ситуацию, но не знаю, как организовать его работу в качестве сервера.

Мне удалось заставить его работать в моей системе. Это не совсем демон в смысле службы Windows, а скорее фоновая задача текущего пользователя, но у меня это работает.

Установка и начальная настройка

Я установил WSL для своего пользователя и Debian в качестве предпочтительного приложения Linux. В любом случае он должен работать с любым дистрибутивом, поскольку он использует только rsync.

В моем домашнем каталоге linux я создал два файла: rsyncd.conf и secrets.

Файл conf:

auth users = nas
secrets file = /home/peter/rsyncd/secrets
hosts allow = 192.168.1.5,192.168.1.11
log file = /home/peter/rsyncd/rsyncd.log
port = 8730
use chroot = false
read only = false

[N_Almacen]
    path = /mnt/n/Almacen/rsyncd

[N_AlmacenNB]
    path = /mnt/n/AlmacenNB/rsyncd

Я использую порт 8730, чтобы не запускать демон как корень. Это также причина, по которой я отключил chroot.

Файл секретов, как обычно, содержит имена пользователей и пароли.

Как запустить это

Наконец, самая сложная часть. Как его запустить?

Вы можете проверить это с помощью этой команды:

rsync --daemon --config=/home/peter/rsyncd/rsyncd.conf --no-detach

Если вы уверены, что конфигурация работает, вы можете удалить --no-detach опция, и команда вызовет фоновую задачу. Даже если ты все закроешь трепать терминалы задача останется в фоновом режиме.

Как запустить его автоматически в фоновом режиме

Итак, как теперь запускаться автоматически при входе в систему?

Создайте ярлык Windows для C:\Windows\System32\wsl.exe и добавьте свою команду после этого. Полная команда будет:

C:\Windows\System32\wsl.exe rsync --daemon --config=/home/peter/rsyncd/rsyncd.conf

Теперь вы можете поместить этот ярлык в запускать папка для вашего пользователя.

--rsync-путь Опция может использоваться для доступа к WSL rsync с другого компьютера. Эта опция используется, чтобы указать, какую программу следует запустить на удаленном компьютере для запуска rsync. Итак, --rsync-path = 'wsl rsync' должен помочь.

Например,

rsync -avhP -e ssh local_path host:remote_path --rsync-path='wsl rsync'

Столкнувшись с той же проблемой, я обнаружил, что предложенное решение не работает в моем случае. В Win10 Home edition был установлен сервер OpenSSH, и ssh <user>@<winpc>.some.domain из системы Linux работает отлично. С помощью --rsync-path='wsl rsync' в вызове rsync приводил к сообщениям об ошибках от Win10. В зависимости от точного синтаксиса он сообщал либо «синтаксическая ошибка в имени», либо «wsl rsync не распознан».

Решение, которое действительно работает в моем случае, - создать файл на машине Win10 с именем C:\Windows\System32\wslrsync.bat, который содержит:

@echo off
wsl rsync %*

в сочетании с использованием --rsync-path=wslrsync в rsync-call.