Сервер rsync, использующий подсистему Windows для Linux

Можно ли с помощью Windows 10 Windows Subsystem для Linux (WSL) иметь сервер rsync, работающий в Windows?

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

1 ответ

Решение

Мне удалось заставить его работать в моей системе. Это не совсем демон в смысле службы 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, чтобы избежать запуска демона от имени пользователя root. Это также причина, по которой я отключил chroot.

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

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

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

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

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

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

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

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

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

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

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

Опция --rsync-path может использоваться для доступа к 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.

Другие вопросы по тегам