Сервер 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.