четверг, 14 октября 2021 г.

Syncthing – синхронизация файлов и папок между устройствами в ЛВС и через Интернет


Как пишет Википедия, Syncthing – приложение, позволяющее синхронизировать файлы между несколькими устройствами. Присутствует поддержка сохранения последовательных версий файла по нескольким алгоритмам, включая пользовательский, что позволяет использовать Syncthing также для целей резервного копирования, хотя это и не рекомендуется.

Толчком для создания приложения сослужил инструмент синхронизации BitTorrent Sync. Разработчик изначально планировал раскрыть исходный код программы под свободной лицензией, но впоследствии код открыт не был. Для open source сообщества это послужило мотивацией к написанию открытой альтернативы – Syncthing под лицензией MIT.

Первая попытка использования данного инструмента была мной предпринята в 2020 году, однако тот "штурм" у меня не увенчался успехом. И только через год хватило терпения и усидчивости разобраться с настройкой и использованием данного программного продукта.

Так как настройка с первого раза может показаться немного запутанной, то в данной публикации предпринята попытка пошагового объяснения процесса настройки синхронизаций. Если изображение слишком маленькое, то щёлкните по нему для его увеличения. Весь "разбор полётов" разбит на условные блоки информации:

– установка Syncthing;
– имя устройства;
– другие (удалённые) устройства;
– назначение папок для синхронизации;
– перенос папки Default Folder;
– syncthing на Windows;
– предоставление новой папки в доступ другому устройству;
– наблюдение (мониторинг) за процессами синхронизаций;
– автостарт и ручной запуск;
– проверка синхронизации через Интернет;
– некоторые заключительные замечания;
– безопасность.

Установка Syncthing

Установку Syncthing можно осуществить на на компьютеры (ноутбуки), так и на мобильные устройства. Скачивание ПО производится с официального сайта. Поскольку Syncthing у меня используется на компьютерах под управлением Linux Mint, то установка была осуществлена посредством последовательного выполнения трёх терминальных команд:

sudo curl -s -o /usr/share/keyrings/syncthing-archive-keyring.gpg https://syncthing.net/release-key.gpg

echo "deb [signed-by=/usr/share/keyrings/syncthing-archive-keyring.gpg] https://apt.syncthing.net/ syncthing stable" | sudo tee /etc/apt/sources.list.d/syncthing.list

sudo apt updtae && sudo apt install -y syncthing

После установки в разделе "Интернет" главного меню появилось два пункта: Start Syncthing и Syncthing Web GUI, первый из которых производит собственно запуск программы, а второй является панелью управления и настроек Syncthing через браузер. 

На некоторых ресурсах предлагается настроить автоматический запуск Syncthing через службы, но мной было принято решение запускать его командой, отрабатываемой в процессе работы сценария запуска различного ПО при входе в сеанс. В принципе, команду запуска Syncthing можно прописать в автозагрузку:

/usr/bin/syncthing serve --no-browser --logfile=default

Примечание. logfile можно указать свой, например при запуске через sh

$log=/home/minter/Reports/$(date '+%d').syncthing.txt
/usr/bin/syncthing serve --no-browser --logfile=$log

В приводимом примере лог-файл в течение месяца каждый день будет новым.

Имя устройства

В правом столбце панели управления отображены сведения о Вашем устройстве. По умолчанию имя устройства совпадает с именем компьютера:


Если оно не устраивает, то его можно изменить, обратившись к меню "Действия – Настройки" в правом верхнем углу


Также обратите внимание на секцию "Подключения", в которой можно задать ограничения входящей и исходящей скоростей, а также снять галочки в неиспользуемых возможностях. По умолчанию всё включено, а скорость не ограничена: 


✔  Если поинтересоваться ссылкой "Помощь" в строке "Адрес протокола синхронизации", то можно узнать, что используется порт 2200. 

Если пойти далее и в меню "Действия" нажать на "Дополнительно" и перейти в "Настройки", то можно узнать, что для анонсов используется порт 21027. Однако Вы сами увидите грозное предупреждение красным цветом, что неправильные настройки могут привести к неработоспособности Вашего Syncthing. В этом случае может помочь сброс конфигурации, которая записана в файл config.xml, расположенный в скрытом каталоге ~/.config/syncthing


Другие (удалённые) устройства

Так как планируется осуществлять синхронизацию между компьютерами, то рекомендуется узнать свой ID, чтобы затем передать его другому устройству (Показать ID):


Если компьютеры расположены в пределах адресного пространства локальной сети, то ID другого компьютера может быть предложено автоматически в процессе сетевого обнаружения:

Нажмите на кнопку "Добавить удалённое устройство" и кликните по ID того устройства, которое будет Вам показано или какое Вы выберите:



Как только ID выбранного устройства будет автоматически внесено в строку ID устройства, нажмите кнопку "Сохранить" (синего цвета).

Пример с несколькими устройствами в локальной сети:


В процессе добавления устройства можно изменить параметры "Предоставление доступа"



и ограничения скоростей для добавляемого узла в секции "Дополнительно" (справа).

Чтобы после добавления устройства оно не высвечивалось в виде первых символов ID назначьте при добавлении ему имя


и после его добавления оно будет отображаться с указанным именем:


Устройство просто добавлено, но в процессе синхронизаций не используется.

Назначение папок для синхронизации

По умолчанию на компьютере создаётся папка Sync, которая в панели управления отображается как Default Folder:


Попробуем её использовать для синхронизации между компьютерами H-4 и H-8.

В панели управления компьютером H-4 нажимаем по удалённому устройству H-8 и получаем подробную информацию (начальные символы реального ID затёрты): 


Нажимаем кнопку "Редактировать", находим в секции "Предоставление доступа" Default Folder и ставим в поле галочку:


Видим, что:


В свою очередь, в панели управления компьютером H-8 видим запрос, который необходимо утвердить, игнорировать или отклонить. Выбираем "Предоставить доступ":



После чего помещаем в папку Sync какой-либо маленький файл для проверки. Должно получиться:



Теперь на каком-либо из компьютеров удалите файл, помещённый в папку Sync для проверки. На втором компьютере он также должен исчезнуть.

Теперь узлы H-4 и H-8 используют свои папки Sync (Default Folder) для взаимной синхронизации.

В папках синхронизации автоматически создаются папки .stfolder, в составе которой будет расположен файл вида syncthing-folder-...txt, в котором содержится информация о значении Folder ID и времени создания. Например, файл syncthing-folder-ba9385.txt имеет содержание:

# This directory is a Syncthing folder marker.
# Do not delete.

folderID: q2ehx-jyra2
created: 2024-06-14T13:50:33+03:00 

Значение folderID можно увидеть через панель управления, вызвав на интересующей папке "Редактировать":



Если необходимо в течение нескольких дней сохранять файлы, удалённые другим устройством, то в настройках папки в разделе "Управление версиями" указать "Использовать версионность файлов в Корзине" и нужное число дней: 


Удалённые объекты будут располагаться в папке .stversions  Содержание этой папка пересматривается каждый час, а сама процедура называется "Интервал очистки". 

По умолчанию, синхронизация объектов производится в случайном порядке. Если его необходимо изменить, то сделать это можно в разделе "Дополнительно":


Перенос папки Default Folder

А что делать, если возникла необходимость перенести используемую для синхронизации папку Sync, прописанную в приложении как Default Folder, в другое место?

Щелкните в панели управления по Default Folder и нажмите на кнопку "Редактировать".


Удалите существующую папку кнопкой "Удалить", а затем создайте папку, ярлык для которой будет Default Folder, ID папки – default, а местоположение укажите то, которое нужно (при этом папка Sync в указываемом месте должна присутствовать), например /home/minter/Data/Sync


Проверьте сохранилось ли совместное использование и осуществляется ли синхронизация:


Syncthing на Windows

Тестирование syncthing на Windows осуществлялось на установленной на виртуальной машине ОС Windows 7. Для Windows достаточно скачать и установить программу SyncTrayzor

✔  Перед установкой мне потребовалось скачать и установить Microsft.NET 4.62 Про конкретную версию NET не скажу, так как на виртуальной Windows у меня была установлена только версия 3.5 Если необходима будет конкретная версия NET, отсутствующая в системе, то установщик об этом уведомит.

После установки в главном меню будут записи:


По нажатию SyncTrazor будет запущен браузер с интерфейсом управления и мониторинга программой. При этом сама программа прописывает себя в автозагрузку (через реестр) с командой запуска "C:\Program Files\SyncTrazor\SyncTrazor.exe" -minimized 

Индикация работы программы отображается значком в системном лотке (трее).

В диспетчере задач работа syncthing отображается как


что аналогично имеющимcя процессам в Linux за исключением программы-значка


Папкой по умолчанию, автоматически создаваемой при установке SyncTrazor, является папка Sync, расположенная в папке профиля пользователя системы:

На Windows можно организовать запуск Syncthing как службы от имени пользователя. При этом  ПО SyncTrayzor не используется. Для подробностей перейдите по ссылке.

Предоставление новой папки в доступ другому устройству

В описываемом примере компьютер с ОС Linux предоставляет папку для синхронизации с Windows. Нажмите кнопку "+ Добавить папку". По умолчанию при создании новой папки syncthing генерирует её случайное наименование (две группы по 5 символов, разделённые через дефис) без указания ярлыка.


Чтобы избежать своего рода путаницы, мной было указано "вменяемое" имя папки, а также указан для неё ярлык, который совпадал с именем новой папки.


Среди устройств, которым она будет доступна, было указано устройство на Windows, которому было задано имя H-5.


На Windows точно также необходимо было добавить устройство Linux и принять приглашение для папки. Обратите внимание, что по умолчанию путь к папке был указан точно такой же как и для системы Linux, то есть "папка профиля пользователя – папка для syncthing":


В синхронизируемых папках как на Linux, так и на Windows, автоматически была создана скрытая папка .stfolder 



ID папки можно не изменять, а изменить только Ярлык папки. ID папки является одним и тем же для всех узлов Syncthing, использующих данную папку. В панели управления Syncthing папки всегда будут отображаться по имени ярлыка. Пример:

 




Наблюдение (мониторинг) за процессами синхронизаций

Процесс синхронизации показан в представленной ниже серии снимков экрана одного из узлов при синхронизации порции данных объёмом в 22 ГБ. Наблюдение осуществлялось как на синхронизируемой папке (Default Folder), так и на самом устройстве. При этом наблюдаемое устройство H-3 является получателем, а устройство H-4 источником.

В ЛВС при наблюдении за синхронизируемой папкой изменяющиеся показания в ГБ могут ввести в заблуждение. Эти цифры сначала имеют тенденцию к росту, а затем начинают постепенно уменьшаться. Насколько мне было понятно, данные показания отображают сколько ещё данных нужно синхронизировать в конкретный момент времени в пределах ближайших запланированных реплик. 













Автостарт и ручной запуск

После установки в Linux автостарт Syncthing не назначается. В Windows при использовании SyncTrayzor автостарт Syncthing назначается. По умолчанию запуск Syncthing в Linux производится через кнопку "Start Syncthing" меню "Интернет". Если необходим запуск Syncthing при старте системы, то в параметрах системы (Автозагрузка) создайте соответствующую запись. В строке "Команда" введите 

/usr/bin/syncthing serve --no-browser --logfile=default

Если необходимо задержать автостарт Syncthing, то либо в настройке Cinnamon укажите задержку в секундах, например


либо в xfce перейдите в папку вашего профиля ~/.config/autostart и добавьте в файл .desktop автостарта Syncthing запись X-GNOME-Autostart-Delay=5 
Число секунд назначайте на своё усмотрение.

В сети можно найти инструкцию как сделать автозапуск Syncthing в качестве службы (демона). Но на мой взгляд, для обычного пользователя это будет являться более сложным мероприятием, чем простое добавление записи в автозагрузку, поэтому здесь не рассматривается. 

🔰  Примечание 1. Обратите внимание, что параметром --logfile= можно задавать расположение файла протокола syncthing.log на жёстком диске. Для владельцев SSD с целью снижения числа записей на диск можно использовать --logfile=/tmp/syncthing.log, если /tmp смонтирована как tmpfs или использовать  --logfile=/run/user/1000/syncthing.log в случае, если вы являетесь единственным пользователем системы. Если пользователей несколько, то указывается ID конкретного пользователя, например /run/user/1001/syncthing.log, /run/user/1002/syncthing.log и т.д.

🔰  Примечание 2. По умолчанию, кнопки запуска и управления Syncthing расположены в меню "Интернет". Но если в вашем меню "Интернет" слишком много записей, то их можно переместить в меню "Прочие" (Cinnamon) или "Прочее" (xfce). Перейдите в /usr/share и через правое контекстное меню файлового менеджера откройте папку applications как root. Отредактируйте в текстовом редакторе два файла (рисунки для Cinnamon и xfce):



Приведите строку Categories к виду Categories=FileTransfer;P2P  В этом случае кнопки управления Syncthing будут отображаться в меню "Прочие" (Cinnamon) или "Прочее" (xfce).

Если желаете чтобы эти кнопки отображались в меню "Офис", то приведите строку Categories к виду  Categories=Office;FileTransfer;P2P

Обратите внимание, что в кнопке запуска Syncthing присутствует команда запуска приложения с указанием --logfie=default  Эту запись можно изменить, см. Примечание 1 выше.
   

Проверка синхронизаций через Интернет

Для осуществления данной операции через два маршрутизатора было создано два канала соединения с провайдером под различными учётными записями соединения с Интернет. При этом подключения различались по тарифным планам: 100/50 и 10/5 (Мегабит в секунду).

Взаимодействующие через Интернет узлы понимают друг друга через их ID. Чтобы узнать ID своего устройства зайдите в панель управления http://127.0.0.1:8384 и вызовите в меню "Действия – Показать ID". ID вашего устройства будет отображено :


Записи о взаимодействующих устройствах должны присутствовать в каждом из устройств. Если данное устройство отсутствует, то при приглашении в папку другого устройства Syncthing выдаст запросы на добавление устройства и добавление папки данного устройства. 



Обратите внимание на то, что на верхнем рисунке указано "на 5.9.16.38:22067". Другое устройство хочет подключиться по порту 22067 с адреса 5.9.16.38  Указанный IP соответствует хосту g3la.de, а диапазон IP 5.9.16.32 – 5.9.16.63  принадлежит сети немецкого провайдера. У вас IP будет, скорее всего, другой. Данные IP являются адресами общедоступных серверов глобального обнаружения Syncthing, через которые определяются маршруты от одного узла Syncthing к другому.

В процессе наблюдения за синхронизацией тестового файла размером в 2,5 ГБ скорость передачи данных на передающем компьютере (H-4) и скорость приёма данных на принимающем компьютере (H-2), другими  словами скорость синхронизации – соответствовала тарифному плану второго подключения к Интернет (10/5). 



При включении отображения скрытых элементов общей папки (HEDY) синхронизируемый файл был отображён файлом с расширением tmp:


Некоторые заключительные замечания

При необходимости постоянного обмена синхронизируемыми данными Syncthing показал себя очень хорошо, при том что максимум зафиксированного расхода оперативной памяти у него составил порядка 80 МБ, а в режиме ожидания может не превысить 34 МБ. 


И если ранее для передачи больших порций данных в ЛВС мной использовались FTP, SFTP (ssh) или Warpinator, то в настоящий момент имеется мнение, что данную задачу следует возложить на Syncthing, а использовавшиеся ранее способы оставить для случаев, когда передача или получение данных через Syncthing затруднено по причине недостаточного свободного дискового пространства на каком-либо из узлов сети.

Все настройки, производимые через браузер, записываются в файл config.xml, расположенный в скрытом каталоге ~/.config/syncthing  Если в результате произведённых действий изменений получилось вообще неизвестно что (запутался, затупил и т.д. и т.п.), то, теоретически, можно остановить syncthing, удалить файл конфигурации и запустить syncthing снова. В Linux остановить syncthing можно командой

    killall -TERM syncthing   

Кардинальным решением вопроса, который применялся мной на этапе набития шишек, является полное удаление каталога настроек syncthing командой

   rm -fR ~/.config/syncthing  (rm -fR ~/.local/state/syncthing см. "Примечания" ниже)

или через менеджер файлов при включении отображения скрытых файлов. При этом при следующем запуске syncthing у вас будет совершенно новый экземпляр настроек с другим ID устройства. Поэтому если вы с кем-то уже обмениваетесь данными, то поставьте его об этом в известность и предоставьте ему новый ID своего устройства.


В Linux Mint 21.3 расположение конфигурационного файла config.xml поменялось с ~/.config/syncthing на ~/.local/state/syncthing 

Если в процессе редактирования файла config.xml расположение какой-либо папки было изменено и сама папка перемещена на новое место, то синхронизация может быть остановлена, а в браузере можно увидеть предупреждение (пример):

2024-01-19 22:28:48: Error on folder "Books-00" (resru-hjgnk): folder marker missing (this indicates potential data loss, search docs/forum to get information about how to proceed)

Это происходит по причине отсутствия в перемещённой папке скрытого каталога .stfolder  Создайте его вручную и перезапустите Syncthing.

Иногда необходимо исключить из синхронизации каких-либо файлов (или папок). Читайте пример здесь.


Безопасность

Безопасность является одной из основных целей проекта. Это означает, что злоумышленник не должен иметь возможности присоединиться к кластеру без приглашения, и не должно быть возможности извлечь личную информацию из перехваченного трафика. В настоящее время это реализовано следующим образом.

Весь трафик между устройствами защищен протоколом TLS. Чтобы предотвратить присоединение к кластеру незваных устройств, при установлении соединения отпечаток сертификата каждого устройства сравнивается с предварительно установленным списком допустимых устройств. Отпечаток вычисляется как хэш SHA256 сертификата и отображается в удобной для пользователя кодировке, называемой идентификатором устройства (Device ID).

Входящие запросы на данные файлов проверяются в той степени, в какой запрашиваемое имя файла должно существовать в локальном индексе и глобальной модели.

Комментариев нет:

Отправить комментарий