Возможно ли использование подсистемы 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.